对象不断被命令污染
Object keeps getting contaminated by command
在我的脚本中,我 运行 像
这样的命令
[array]$Results = $AllSpamAllowGroups.Email | ForEach-Object {
& gam update group $_ spam_moderation_level moderate
[PSCustomObject]@{
GroupEmail = $_
Error = $LastExitCode
}
}
当我打开结果时是
"12"
"45"
"19"
...so on
如果我
& gam update group $_ spam_moderation_level moderate | out-null
那么$Results
有好的数据。但是这个命令实际上并没有做任何事情。
我必须将它分配给垃圾变量吗?
$IAMTrash = & gam update group $_ spam_moderation_level moderate
看来我不应该这样做。 (垃圾变量也给出了很好的数据)
最好的做法是将不需要的输出分配给 $null
,而不是“垃圾变量”。这实际上会丢弃输出并更好地传达您的意图。管道到 Out-Null
也可以,但是 less efficient.
[array]$Results = $AllSpamAllowGroups.Email | ForEach-Object {
# Makes the command run completely silent (unless it writes to stderr too)
$null = & gam update group $_ spam_moderation_level moderate
# Only this gets captured in $Results
[PSCustomObject]@{
GroupEmail = $_
Error = $LastExitCode
}
}
这种方法的缺点是您看不到程序在做什么。如果出现故障,它可能会输出有用的日志记录信息或详细的错误描述。使用上面的代码,所有这些都将丢失。
要查看命令输出而不让它“污染”您的结果,您可以将其通过管道传输到 Out-Host
,这样它只会写入控制台,但不会被捕获:
[array]$Results = $AllSpamAllowGroups.Email | ForEach-Object {
# Command output goes to console only
& gam update group $_ spam_moderation_level moderate | Out-Host
# Only this gets captured in $Results
[PSCustomObject]@{
GroupEmail = $_
Error = $LastExitCode
}
}
在我的脚本中,我 运行 像
这样的命令[array]$Results = $AllSpamAllowGroups.Email | ForEach-Object {
& gam update group $_ spam_moderation_level moderate
[PSCustomObject]@{
GroupEmail = $_
Error = $LastExitCode
}
}
当我打开结果时是
"12"
"45"
"19"
...so on
如果我
& gam update group $_ spam_moderation_level moderate | out-null
那么$Results
有好的数据。但是这个命令实际上并没有做任何事情。
我必须将它分配给垃圾变量吗?
$IAMTrash = & gam update group $_ spam_moderation_level moderate
看来我不应该这样做。 (垃圾变量也给出了很好的数据)
最好的做法是将不需要的输出分配给 $null
,而不是“垃圾变量”。这实际上会丢弃输出并更好地传达您的意图。管道到 Out-Null
也可以,但是 less efficient.
[array]$Results = $AllSpamAllowGroups.Email | ForEach-Object {
# Makes the command run completely silent (unless it writes to stderr too)
$null = & gam update group $_ spam_moderation_level moderate
# Only this gets captured in $Results
[PSCustomObject]@{
GroupEmail = $_
Error = $LastExitCode
}
}
这种方法的缺点是您看不到程序在做什么。如果出现故障,它可能会输出有用的日志记录信息或详细的错误描述。使用上面的代码,所有这些都将丢失。
要查看命令输出而不让它“污染”您的结果,您可以将其通过管道传输到 Out-Host
,这样它只会写入控制台,但不会被捕获:
[array]$Results = $AllSpamAllowGroups.Email | ForEach-Object {
# Command output goes to console only
& gam update group $_ spam_moderation_level moderate | Out-Host
# Only this gets captured in $Results
[PSCustomObject]@{
GroupEmail = $_
Error = $LastExitCode
}
}