尝试从PowerShell扫描中获取一些应在所有工作站上存在的软件的输出。
Get-Content -Path f:\desktop\Machines.csv |
ForEach-Object {Get-WmiObject -Class Win32_Product -ComputerName $_} |
Where-Object -FilterScript {$_.Name -like "*Adobe Reader*"} |
Select-Object -Property PSComputerName,Name,Version |
Export-Csv -Path f:\desktop\Results.csv -NoTypeInformation
问题是那些没有安装软件的机器在输出文件中没有任何信息。我经常在ISE控制台中收到RPC Server不可用的错误,但是该信息并没有将其写入输出文件。
我想我实际上是在寻找具有或不具有该软件以及任何错误消息的输出报告机器,以尝试到达要检查的机器。
最佳答案
如果结果为空,则将过滤器和选择内容移到ForEach-Object
内,并创建一个自定义对象。
Get-Content 'F:\desktop\Machines.csv' | ForEach-Object {
$o = Get-WmiObject -Class Win32_Product -ComputerName $_ |
Where-Object {$_.Name -like "*Adobe Reader*"} |
Select-Object PSComputerName,Name,Version
if ($o) {
$o
} else {
New-Object -Type PSObject -Property @{
'PSComputerName' = $_
'Name' = 'Adobe Reader'
'Version' = $null
}
}
} | Export-Csv 'F:\desktop\Results.csv' -NoType
但是请注意,
Win32_Product
是considered harmful。建议改用注册表查询。
关于error-handling - Get-WMIObject输出和错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48433002/