Software de desinstalação remota via powershell

Software de desinstalação remota via powershell

Tenho um usuário que trabalha em casa, mas está conectado à nossa rede interna. Tenho um programa de acesso remoto (LANDESK) que posso conectar ao sistema dele, mas, de acordo com a política do escritório, não posso remover programas a menos que esteja conectado à minha conta de administrador especial. A troca de contas desconecta esse usuário da VPN, efetivamente me expulsando do sistema dele.

Portanto, como um usuário bastante n00b do PowerShell, estou tentando encontrar um meio de executar um comando para executar o desinstalador do software como minha conta de administrador enquanto ele ainda está conectado. Windows 10 v1803. O software é SSMS 2014, se isso ajudar.

Obrigado por sugestões.

Responder1

No PowerShell, isso é muito fácil de fazer.

O bloco de script abaixo terá um nome de computador, seu nome de usuário e senha, conectar-se-á ao computador remoto e listará todos os softwares instalados por nome:

$computerName = "SomeComputerName"
$yourAccount = Get-Credential
Invoke-Command -ComputerName $computerName -Credential $yourAccount -ScriptBlock {
    Get-WmiObject Win32_Product | Select Name
}

Quando você tiver o nome do produto que deseja desinstalar remotamente, poderá executar uma desinstalação assim:

$computerName = "SomeComputerName"
$appName = "AppName"
$yourAccount = Get-Credential
Invoke-Command -ComputerName $computerName -Credential $yourAccount -ScriptBlock {
    Get-WmiObject Win32_product | Where {$_.name -eq $appName} | ForEach {
        $_.Uninstall()
    }
}

Nos exemplos acima - substitua "SomeComputerName" pelo nome do computador do qual você deseja desinstalar.

Você também pode fazer com que o script solicite um nome de computador, se preferir, com a seguinte linha:

$computerName = Read-Host "Enter Computer Name"

Se você tiver vários computadores com o mesmo software que deseja desinstalar - você também pode definir uma série de computadores para trabalhar e fazer desinstalações de muitas máquinas:

$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()
        }
    }
}

Responder2

Se você criar um arquivo chamado "servers.txt" e colocar sua lista de servidores nele, você também poderá fazer referência a $computerNames da seguinte maneira:

$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()
        }
    }
}

Usei essa abordagem muitas vezes em ambientes de produção e parece funcionar para mim. Sempre teste isso em um ambiente que não seja de produção antes de concluir em um ambiente de produção.

informação relacionada