![通过 powershell 远程卸载软件](https://linux22.com/image/1600742/%E9%80%9A%E8%BF%87%20powershell%20%E8%BF%9C%E7%A8%8B%E5%8D%B8%E8%BD%BD%E8%BD%AF%E4%BB%B6.png)
我有一个在家办公的用户,但他已连接到我们的内部网络。我有一个远程访问程序 (LANDESK),可以连接到他的系统,但根据我们办公室的政策,除非我登录到我的特殊管理员帐户,否则我无法删除程序。切换帐户会断开此用户与 VPN 的连接,从而有效地将我从他的系统中踢出。
因此,作为一个相当新手的 PowerShell 用户,我试图想出一种方法来运行命令,以我的管理员帐户身份在他仍登录时执行软件的卸载程序。最好是默默地。Windows 10 v1803。如果有帮助的话,软件是 SSMS 2014。
感谢您的建议。
答案1
在 PowerShell 中,这非常容易做到。
下面的脚本块将获取计算机名称、您的用户名和密码,连接到远程计算机并按名称列出所有已安装的软件:
$computerName = "SomeComputerName"
$yourAccount = Get-Credential
Invoke-Command -ComputerName $computerName -Credential $yourAccount -ScriptBlock {
Get-WmiObject Win32_Product | Select Name
}
当您知道要远程卸载的产品名称时,您可以像这样执行卸载:
$computerName = "SomeComputerName"
$appName = "AppName"
$yourAccount = Get-Credential
Invoke-Command -ComputerName $computerName -Credential $yourAccount -ScriptBlock {
Get-WmiObject Win32_product | Where {$_.name -eq $appName} | ForEach {
$_.Uninstall()
}
}
在上面的例子中 - 将“SomeComputerName”替换为您要卸载的计算机的名称。
如果愿意,您还可以使用以下行让脚本提示您输入计算机名称:
$computerName = Read-Host "Enter Computer Name"
如果您有多台计算机上安装了想要卸载的同一款软件 - 您还可以定义一个计算机阵列来处理并从多台机器上执行卸载:
$computerNames = @("SomeComputerName1", "SomeComputerName2", "SomeComputerName3")
$appName = "AppName"
$yourAccount = Get-Credential
ForEach ($computerName in $computerNames) {
Invoke-Command -ComputerName $computerName -Credential $yourAccount -ScriptBlock {
Get-WmiObject Win32_product | Where {$_.name -eq $appName} | ForEach {
$_.Uninstall()
}
}
}
答案2
如果您创建一个名为“servers.txt”的文件并将服务器列表放在其中,您也可以引用 $computerNames,如下所示:
$computerNames = Get-Content "C:\some-directory\servers.txt"
$appName = "AppName"
$yourAccount = Get-Credential
ForEach ($computerName in $computerNames) {
Invoke-Command -ComputerName $computerName -Credential $yourAccount -ScriptBlock {
Get-WmiObject Win32_product | Where {$_.name -eq $appName} | ForEach {
$_.Uninstall()
}
}
}
我在生产环境中多次使用过这种方法,它似乎对我有用。在生产环境中完成之前,请务必在非生产环境中进行测试。