(Get-WmiObject -Class Win32_Product -ComputerName $PCNumber -ErrorAction SilentlyContinue | Where-Object { $_.Name -match "$softwareName" }).Uninstall() | Out-Null我有以下代码,这是完美的工作。唯一的问题是,我不知道软件是否被删除了,或者not.This没有告诉我,但下面的代码告诉我了。
这种方式对我来说很有效。
$software = Get-WmiObject -Class Win32_Product -ComputerName $PCNumber -ErrorAction SilentlyContinue | Where-Object { $_.Name -match "$softwareName" }
$soft = $software.Uninstall();
$n = $software.ReturnValue;
if ( $n -eq 0 ){
SOFTWARE HAS BEEN REMOVED.
}我的问题是,我如何判断软件是否已被删除。使用下面的代码。
(Get-WmiObject -Class Win32_Product -ComputerName $PCNumber -ErrorAction SilentlyContinue | Where-Object { $_.Name -match "$softwareName" }).Uninstall() | Out-Null发布于 2011-12-14 20:16:30
您必须检查ReturnValue属性。当您通过管道连接到Out-Null时,您将抑制操作的输出,并且没有办法知道发生了什么,除非您发出第二个调用来查看它是否返回有问题的软件。
我建议使用Filter参数(而不是使用Where-Object)来查询服务器上的软件。为安全起见,您还应将结果通过管道传递给Foreach-Object cmdlet,因为您永远不会知道由于匹配操作而返回了多少软件对象(并且您调用卸载方法时,就好像结果只是一个对象一样):
Get-WmiObject -Class Win32_Product -ComputerName $PCNumber -Filter "Name LIKE '%$softwareName%'" | Foreach-Object {
Write-Host "Uninstalling: $($_.Name)"
$rv = $_.Uninstall().ReturnValue
if($rv -eq 0)
{
"$($_.Name) uninstalled successfully"
} # Changed this round bracket to a squigly one to prperly close the scriptblock for "if"
else
{
"There was an error ($rv) uninstalling $($_.Name)"
}
}https://stackoverflow.com/questions/8503860
复制相似问题