Remote-Deinstallation von Software über Powershell

Remote-Deinstallation von Software über Powershell

Ich habe einen Benutzer, der von zu Hause aus arbeitet, aber mit unserem internen Netzwerk verbunden ist. Ich habe ein Fernzugriffsprogramm (LANDESK), mit dem ich eine Verbindung zu seinem System herstellen kann, aber gemäß unserer Bürorichtlinie kann ich keine Programme entfernen, wenn ich nicht bei meinem speziellen Administratorkonto angemeldet bin. Durch das Wechseln der Konten wird dieser Benutzer vom VPN getrennt, wodurch ich effektiv aus seinem System geworfen werde.

Als ziemlich unerfahrener PowerShell-Benutzer versuche ich, eine Möglichkeit zu finden, mit der ich einen Befehl ausführen kann, um das Deinstallationsprogramm für die Software mit meinem Administratorkonto auszuführen, während er noch angemeldet ist. Vorzugsweise im Hintergrund. Windows 10 v1803. Die Software ist SSMS 2014, falls das hilft.

Danke für die Vorschläge.

Antwort1

Dies ist in PowerShell ganz einfach möglich.

Der folgende Skriptblock verwendet einen Computernamen, Ihren Benutzernamen und Ihr Kennwort, stellt eine Verbindung zum Remotecomputer her und listet alle installierten Programme nach Namen auf:

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

Wenn Sie den Namen des Produkts haben, das Sie remote deinstallieren möchten, können Sie die Deinstallation wie folgt durchführen:

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

Ersetzen Sie in den obigen Beispielen „SomeComputerName“ durch den Namen des Computers, von dem Sie die Deinstallation durchführen möchten.

Wenn Sie möchten, können Sie das Skript auch so einrichten, dass es Sie mit der folgenden Zeile zur Eingabe eines Computernamens auffordert:

$computerName = Read-Host "Enter Computer Name"

Wenn Sie mehrere Computer mit derselben Software haben, die Sie deinstallieren möchten, können Sie auch ein Array von Computern definieren, mit denen Sie arbeiten möchten, und die Deinstallation von mehreren Maschinen aus durchführen:

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

Antwort2

Wenn Sie eine Datei mit dem Namen „servers.txt“ erstellen und Ihre Serverliste darin ablegen, können Sie auch wie folgt auf $computerNames verweisen:

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

Ich habe diesen Ansatz oft in Produktionsumgebungen verwendet und er scheint für mich zu funktionieren. Testen Sie dies immer in einer Nicht-Produktionsumgebung, bevor Sie es in einer Produktionsumgebung abschließen.

verwandte Informationen