问题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
} }
请在上面的脚本中建议更正以获得所需的输出。
必需的输出:具有主机名和卸载状态的报告/文件,“未找到测试应用程序”列
答案 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
}