我有一堆服务器,我必须从中卸载应用程序。我正在使用:
$app = Get-WmiObject -Class Win32_Product | Where-Object {
$_.Name -match "application name"
}
$app.Uninstall()
我已经测试了上面的内容并且效果很好。我想现在运行它,以便在一堆服务器上卸载应用程序。我知道我可以使用for each选项但由于某种原因我遇到了让它运行的问题。
我创建了一个名为servers的文本文件,并在那里列出了我的服务器,但每次都出错了。
是否有人为我的上述卸载部分添加每个部分的工资都很高,所以它有效吗?
答案 0 :(得分:0)
稍后在您got your original code from的页面上,David Setler会给出您需要的答案。略微修改以适应您的场景:
$computers = Get-Content C:\servers.txt
foreach($server in $computers){
$app = Get-WmiObject -Class Win32_Product -computer $server | Where-Object {
$_.Name -match "application name"
}
$app.Uninstall()
}
假设$computers
是服务器文本文件中的服务器列表。
答案 1 :(得分:0)
Get-WmiObject
的-ComputerName
参数接受计算机名列表。
$servers = Get-Content 'C:\your\computerlist.txt'
Get-WmiObject -Computer $servers -Class Win32_Product |
? { $_.Name -like '*application name*' } |
% { $_.Uninstall() }
答案 2 :(得分:0)
我会远离win32_product,因为这个课程没有正常工作。 见https://support.microsoft.com/en-us/kb/974524。 基本上,当您查询此类时会发生的情况是每个msi都会触发修复软件包(垃圾邮件事件日志),这在某些情况下可能会破坏已安装的软件(在查询此类之后我看到某些程序的安装已损坏) - 虽然它很少见,但你不想在生产服务器上冒这个风险。)