Удалённое удаление программного обеспечения через 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()
        }
    }
}

Я использовал этот подход много раз в производственных средах, и он, похоже, работает для меня. Всегда проверяйте это в непроизводственной среде, прежде чем завершать в рабочей среде.

Связанный контент