簡體   English   中英

Powershell變量被賦予函數的結果和傳遞給函數的參數I.

[英]Powershell variable is assigned the result of a function AND the parameter I passed to the function

我在我的劇本中一遍又一遍地遇到這種情況。 我有這行代碼:

$Errors = Get-DeploymentErrors $uniqueID

運行時,會為$ Errors分配Get-DeploymentErrors的結果和$ uniqueID的值。 我只想為$ Errors分配Get-DeploymentErrors的結果。

以下是Get-DeploymentErrors函數:

Function Get-DeploymentErrors($uniqueID)
{
$Errors = @()

$conn = New-Object -TypeName System.Data.SqlClient.SqlConnection
$conn.ConnectionString = 'removed connection string'

$cmd = New-Object -TypeName System.Data.SqlClient.SqlCommand
$cmd.Connection = $conn
$cmd.CommandText = "removed sql statement"
$cmd.Parameters.AddWithValue("@uniqueID", $uniqueID)

$conn.Open()
$reader = $cmd.ExecuteReader()

if($reader.HasRows)
{
    While ($reader.Read())
    {
        $error = New-Object -TypeName PSObject

        $error | Add-Member -MemberType NoteProperty -Name StepID -Value $reader["StepID"]
        $error | Add-Member -MemberType NoteProperty -Name DeploymentID -Value $reader["DeploymentID"]
        $error | Add-Member -MemberType NoteProperty -Name MessageID -Value $reader["MessageID"]
        $error | Add-Member -MemberType NoteProperty -Name Severity -Value $reader["Severity"]
        $error | Add-Member -MemberType NoteProperty -Name Message -Value $reader["Message"]
        $error | Add-Member -MemberType NoteProperty -Name StepName -Value $reader["StepName"]
        $error | Add-Member -MemberType NoteProperty -Name CurrentStep -Value $reader["CurrentStep"]
        $error | Add-Member -MemberType NoteProperty -Name TotalSteps -Value $reader["TotalSteps"]
        $error | Add-Member -MemberType NoteProperty -Name CurrentTime -Value $reader["CurrentTime"]

        $Errors += $error
    }
}

return $Errors
}

$cmd.Parameters.AddWithValue()回顯添加的參數,PowerShell函數返回成功輸出流上的整個非捕獲輸出,而不僅僅是return關鍵字的參數。

引自about_Return (強調我的):

簡短的介紹
退出當前范圍,可以是函數,腳本或腳本塊。

詳細描述
Return關鍵字退出函數,腳本或腳本塊。 它可用於退出特定點的范圍,返回值或指示已達到范圍的結尾。

熟悉C或C#等語言的用戶可能希望使用Return關鍵字來制作明確保留范圍的邏輯。

在Windows PowerShell中, 即使沒有包含Return關鍵字的語句,每個語句的結果也會作為輸出返回。 C或C#等語言僅返回Return關鍵字指定的值。

使用以下任一方法來抑制不需要的輸出:

  • [void]$cmd.Parameters.AddWithValue("@uniqueID", $uniqueID)
  • $cmd.Parameters.AddWithValue("@uniqueID", $uniqueID) | Out-Null
  • $cmd.Parameters.AddWithValue("@uniqueID", $uniqueID) > $null
  • $param = $cmd.Parameters.AddWithValue("@uniqueID", $uniqueID)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM