首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >powershell从PC中删除软件

powershell从PC中删除软件
EN

Stack Overflow用户
提问于 2011-12-14 19:39:45
回答 1查看 3.5K关注 0票数 1
代码语言:javascript
复制
(Get-WmiObject -Class Win32_Product -ComputerName $PCNumber -ErrorAction SilentlyContinue | Where-Object { $_.Name -match "$softwareName" }).Uninstall() | Out-Null

我有以下代码,这是完美的工作。唯一的问题是,我不知道软件是否被删除了,或者not.This没有告诉我,但下面的代码告诉我了。

这种方式对我来说很有效。

代码语言:javascript
复制
$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.
}

我的问题是,我如何判断软件是否已被删除。使用下面的代码。

代码语言:javascript
复制
(Get-WmiObject -Class Win32_Product -ComputerName $PCNumber -ErrorAction SilentlyContinue | Where-Object { $_.Name -match "$softwareName" }).Uninstall() | Out-Null
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-14 20:16:30

您必须检查ReturnValue属性。当您通过管道连接到Out-Null时,您将抑制操作的输出,并且没有办法知道发生了什么,除非您发出第二个调用来查看它是否返回有问题的软件。

我建议使用Filter参数(而不是使用Where-Object)来查询服务器上的软件。为安全起见,您还应将结果通过管道传递给Foreach-Object cmdlet,因为您永远不会知道由于匹配操作而返回了多少软件对象(并且您调用卸载方法时,就好像结果只是一个对象一样):

代码语言:javascript
复制
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)"
     }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8503860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档