Get-WMIObject输出和错误处理

时间:2018-01-24 22:50:30

标签: error-handling wmi powershell-v2.0

尝试从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服务器不可用的错误,但该信息不能输出到输出文件。

我想我实际上正在寻找输出或不提供软件的输出报告机器以及尝试联系机器检查时的任何错误消息。

1 个答案:

答案 0 :(得分:0)

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_Productconsidered harmful。建议改用注册表查询。