如何在PowerShell中抑制ExecuteNonQuery命令的输出?
解决PowerShell中ExecuteNonQuery()输出抑制问题
在PowerShell里,ExecuteNonQuery()方法默认会把返回的受影响行数输出到控制台,同时如果参数包含大量XML这类内容,还可能连带输出额外的属性信息。要抑制这些不必要的输出,有两种简单可行的处理方式:
方法1:用Out-Null屏蔽输出
直接将ExecuteNonQuery()的输出通过管道导向Out-Null,和你处理Parameters.Add时的思路一致:
$connection = New-Object System.Data.SqlClient.SqlConnection $connection.ConnectionString = $connectionString $connection.Open() $sqlQuery = "UPDATE [dbo].DocumentData SET XmlData = @content WHERE DocumentId = @id" $command = $connection.CreateCommand() $command.CommandText = $sqlQuery Write-Host 1 $command.Parameters.Add((New-Object Data.SqlClient.SqlParameter("@content", $content))) | Out-Null Write-Host 2 $command.Parameters.Add((New-Object Data.SqlClient.SqlParameter("@id", [int]$id))) | Out-Null Write-Host 3 # 屏蔽ExecuteNonQuery的输出 $command.ExecuteNonQuery() | Out-Null Write-Host 4 $connection.Close() $connection.Dispose()
方法2:将结果赋值给变量
如果后续需要用到ExecuteNonQuery()返回的受影响行数,可以把结果存入变量,这样就不会自动输出到控制台了:
$connection = New-Object System.Data.SqlClient.SqlConnection $connection.ConnectionString = $connectionString $connection.Open() $sqlQuery = "UPDATE [dbo].DocumentData SET XmlData = @content WHERE DocumentId = @id" $command = $connection.CreateCommand() $command.CommandText = $sqlQuery Write-Host 1 $command.Parameters.Add((New-Object Data.SqlClient.SqlParameter("@content", $content))) | Out-Null Write-Host 2 $command.Parameters.Add((New-Object Data.SqlClient.SqlParameter("@id", [int]$id))) | Out-Null Write-Host 3 # 将结果存入变量,避免输出 $affectedRows = $command.ExecuteNonQuery() # 可选:如果需要查看行数,可取消下面的注释 # Write-Host "受影响的行数:$affectedRows" Write-Host 4 $connection.Close() $connection.Dispose()
两种方法都能解决你的问题,第二种还能保留执行结果,可根据需求选择。
内容的提问来源于stack exchange,提问作者OzBob
相关产品推荐
相关产品推荐

