【发布时间】:2015-01-06 16:32:32
【问题描述】:
我正在编写一个函数来从各种计算机收集 WMI 信息。我要做的第一件事是检查我是否可以访问当前计算机,如果不能,我会写入错误并继续。我的问题是,我怎样才能将错误写入屏幕然后成功调用的结果? (删减代码:)
Function Get-Info
{
Param([Parameter(ValueFromPipeline=$true)]
[string[]] $computerName = "." )
Process
{
foreach ($Computer in $ComputerName)
{
if (-Not $(test-connection $computer -Count 2 -ErrorAction SilentlyContinue) )
{
Write-Error "Unable to access $computer"
continue
}
$Info = get-WMIObject -Class <someClass> -ComputerName $Computer
$result = New-Object PSObject -Property @{
Prop1 = $Info.Property
<# ... #> }
Write-Output $Result
}
}
}
当我查询一组系统时,我得到的是 info, <error>, info, <error> 而不是 <error>,<error>,info...,这正是我想要的。
任何帮助将不胜感激。
【问题讨论】:
-
澄清:您希望在所有成功结果之前打印所有错误?
-
你不能在foreach循环外部
Write-Output $Results的数组$results += $result中捕获结果吗? -
请注意
Write-Error和Write-Output写入不同的流。任何单个流的消息都是按顺序打印的,但不同流之间没有保证顺序。 -
是arco444 - 输出前出错。
-
尽量避免收集输出。在我见过的使用 Write-Output 的文章中查看书籍中的一些“最佳实践”(或将输出作为最后一个进入管道的条目),我正在努力为可重用性提供最佳功能。
标签: powershell output