通过 powershell 远程卸载软件

通过 powershell 远程卸载软件

我有一个在家办公的用户,但他已连接到我们的内部网络。我有一个远程访问程序 (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()
        }
    }
}

我在生产环境中多次使用过这种方法,它似乎对我有用。在生产环境中完成之前,请务必在非生产环境中进行测试。

相关内容