我在我的剧本中一遍又一遍地遇到这种情况。我有这行代码:
$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
}
答案 0 :(得分:5)
$cmd.Parameters.AddWithValue()
回显添加的参数,PowerShell函数返回success output stream上的整个非捕获输出,而不仅仅是return
关键字的参数。
引自about_Return
(强调我的):
简短说明
退出当前范围,可以是函数,脚本或脚本块。详细说明
Return关键字退出函数,脚本或脚本块。它可用于退出特定点的范围,返回值或指示已达到范围的结尾。熟悉C或C#等语言的用户可能希望使用Return关键字来制作明确保留范围的逻辑。
在Windows PowerShell中,即使没有包含Return关键字的语句,每个语句的结果也会作为输出返回。 C或C#等语言仅返回由指定的值指定的值。返回关键字。
使用以下任何一种方法来抑制不需要的输出:
[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)