从多台远程计算机上卸载程序并生成报告

时间:2018-09-24 20:39:36

标签: powershell powershell-v3.0 powershell-v4.0 powershell-remoting

问题1:我下面有一个脚本,它将在本地主机上卸载程序,但是在输出中,我只需要主机名和卸载状态

$app = Get-WmiObject -Class Win32_Product -Filter "Name = 'Test'"

$app.Uninstall() 

问题2:我下面有一个脚本,该脚本正在多个远程计算机上运行,​​正在执行此操作,但有时文件外结果错误。我需要输出到具有主机名和卸载状态列的文件

$computers = (Get-Content 'C:\Test\testmchines.txt')

foreach ( $computer in $computers ) {

    $Test = Get-WMIObject -Class Win32_Product -Filter "Name Like '%Test%'" -ComputerName $computer

    if ($Test) {
        "Found {0} on {1}" -f $Test.Name, $computer

        $result = $Test.Uninstall()
        if ($result -eq 0) {
            "Uninstall successful on {0}" -f $computer | out-file 'C:\Test\uninstall.txt' -Append
        }
        else {
            "Uninstall failed on {0}" -f $computer | out-file 'C:\Test\uninstall.txt' -Append
        }
    }
    else {
        "Test is not found on {0}" -f $computer | out-file 'C:\Test\uninstall.txt' -Append
    } }

请在上面的脚本中建议更正以获得所需的输出。

必需的输出:具有主机名和卸载状态的报告/文件,“未找到测试应用程序”列

1 个答案:

答案 0 :(得分:0)

出于报告目的,您可以使用CSV格式的文件。使对象包含必需的信息,并使用Export-Csv cmdlet将数据导出到文件中。我对脚本进行了一些更改,以向您展示根据过程条件创建和设置其属性的对象。

我希望你明白了。

$computers = @(Get-Content 'C:\Test\testmchines.txt')

foreach ($computer in $computers){
    $Obj = New-Object PSCustomObject -Property @{ComputerName=$computer;TestExists=$false;Uninstalled=$false}

    $Test = Get-WMIObject -Class Win32_Product -Filter "Name Like '%Test%'" -ComputerName $computer

    if ($Test){
        $Obj.TestExists = $true
        $result = $Test.Uninstall()
        if ($result -eq 0) {
            $Obj.Uninstalled = $true
        }
    }
    $Obj | Export-Csv -Path 'C:\Test\uninstall.txt' -Append -NoTypeInformation
}