Удаленное удаление программного обеспечения через powershell

У меня есть пользователь, который работает из дома, но он подключен к нашей внутренней сети. У меня есть программа удаленного доступа (LANDESK), которую я могу подключить к его системе, но в соответствии с политикой нашего офиса, я не могу удалять программы, если я не вошел в свою специальную учетную запись администратора. Смена учетных записей отключает этого пользователя от VPN, фактически отключая меня от его системы.

Итак, как довольно n00b пользователь PowerShell, я пытаюсь придумать средство для запуска команды для выполнения деинсталлятора для программного обеспечения в качестве моей учетной записи администратора, пока он все еще вошел в систему. Желательно молча . Windows 10 v1803. Программное обеспечение — SSMS 2014, если это помогает.

Спасибо за предложения.


В PowerShell это очень легко сделать.

Приведенный ниже блок скрипта примет имя компьютера, ваше имя пользователя и пароль, подключится к удаленному компьютеру и перечислит все установленное программное обеспечение по имени:

  $ computerName =  "SomeComputerName" $ ​​yourAccount = Get-CredentialInvoke-Command -ComputerName $ computerName -Credential $ yourAccount -ScriptBlock {Get-WmiObject Win32_Product |  Выберите имя}  

Если у вас есть имя продукта, который вы хотите удалить удаленно, вы можете выполнить удаление следующим образом:

  $ computerName = "SomeComputerName" $ ​​appName = "AppName" $ ​​yourAccount = Get-CredentialInvoke-Command -ComputerName $ computerName -Credential $ yourAccount -ScriptBlock {Get-WmiObject Win32_product |  Где {$ _. Name -eq $ appName} |  ForEach {$ _. Uninstall ()}}  

В приведенных выше eaxmples — замените «SomeComputerName» на имя компьютера, с которого вы хотите выполнить удаление.

Вы также можете заставить сценарий запрашивать у вас имя компьютера, если хотите, с помощью следующей строки:

  $ computerName = Read-Host "Enter Computer Name"  

Если у вас есть несколько компьютеров с одним и тем же программным обеспечением, которое вы хотите удалить, вы также можете определить массив компьютеров для работы и удаления с множества машин:

  $ computerNames = @ ("SomeComputerName1", "SomeComputerName2", "SomeComputerName3") $ appName = "AppName" $ ​​yourAccount = Get-CredentialForEach ($ computerName в $ computerNames) {Invoke-  Команда -ComputerName $ computerName -Credential $ yourAccount -ScriptBlock {Get-WmiObject Win32_product |  Где {$ _. Name -eq $ appName} |  ForEach {$ _. Uninstall ()}}}  

Если вы создаете файл с именем «servers.txt» и поместите в него свой список серверов, вы также можете ссылаться на $ computerNames следующим образом:

  $ computerNames = Get-Content "C:  some-directory   server.txt "$ appName =" AppName "$ yourAccount = Get-CredentialForEach ($ computerName в $ computerNames) {Invoke-Command -ComputerName $ computerName -Credential $ yourAccount -ScriptBlock {Get-WmiObject Win32_product |  Где {$ _. Name -eq $ appName} |  ForEach {$ _. Uninstall ()}}}  

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

Новый участник

Дэвид Гилл новый участник этого сайта. Будьте внимательны, прося разъяснений, комментируя и отвечая. Ознакомьтесь с нашим Кодексом поведения.



Удаление программного обеспечения с помощью PowerShell на удаленном компьютере?

Я использую этот сценарий для удаления программного обеспечения (например, Java). Однако на моем компьютере есть два пакета Java: Java 8 Update и Java Auto Updater.

Я понимаю, что когда я запускаю свой скрипт на таком компьютере, на котором установлено два программного обеспечения, соответствующих моему Regex ( Java * в данном случае), ему не удается создать $ classkey , который является уникальным для WMI удаленной машины, и поэтому в этом случае он ломается.

  функция Uninstall-Application ($ computer, $ target) {$ productInfo = Get-WmiObject Win32_Product -Filter "Name LIKE '% $ target%'" -ComputerName $ computer $ pin = $  productInfo.IdentifyingNumber $ pn = $ productInfo.Name $ pv = $ productInfo.Version if ($ pn -ne $ null) {for ($ i = 0; $ i -lt $ Productinfo.length; $ i ++) {$ classKey =  "IdentifyingNumber =` "$ pin [$ i]` ", Name =` "$ pn [$ i]` ", version =` "$ pv [$ i]` "" $ uninstallReturn = ([wmi] "\  $ computer  root  cimv2: Win32_Product. $ classKey "). uninstall () if ($ uninstallReturn.ReturnValue -ge 0) {Write-Host" Удаление завершено "} else {$ uninstallReturn |  Out-Host}}} else {Throw "Product not found"}} uninstall-application "RemoteServer" "Java"  

Этот код работает, если есть только одно программное обеспечение, которое соответствует мое регулярное выражение.


Вы можете использовать цикл foreach для запуска кода удаления для нескольких элементов.

   $ products = Get-WmiObject Win32_Product -Filter "Name LIKE '% $ target%'" -ComputerName $ computerforeach ($ productInfo в $ products) {#uninstall code}  

Полная функция:

  function Uninstall-Application ($ computer, $ target) {$ products = Get-WmiObject Win32_Product -Filter "Имя LIKE '% $ target%'  "-ComputerName $ computer foreach ($ productInfo в $ products) {$ pin = $ productInfo.IdentifyingNumber $ pn = $ productInfo.Name $ pv = $ productInfo.Version if ($ pn -ne $ null) {for ($ i =  0; $ i -lt $ Productinfo.length; $ i ++) {$ classKey = "IdentifyingNumber =` "$ pin [$ i]` ", Name =` "$ pn [$ i]` ", version =` "$  pv [$ i] `" "# $ uninstallReturn = ([wmi]" \ $ computer  root  cimv2: Win32_Product. $ c  lassKey "). uninstall () #if ($ uninstallReturn. ReturnValue -ge 0) {Write-Host "Удаление завершено"} #else {$ uninstallReturn |  Out-Host}}} else {Бросьте "Продукт не найден"}}} Uninstall-Application "localhost" "Java"  

Оцените статью
clickpad.ru
Добавить комментарий