Если у меня возникли проблемы с перезагрузкой и удалением очень проблемного приложения c с удаленных компьютеров, как я могу исправить свой сценарий? - PullRequest
0 голосов
/ 13 февраля 2020

Просто предупреждение: я пишу сценарии с PowerShell только около 2 месяцев.

У меня было довольно тяжелое испытание, чтобы создать сценарий для этого, но после 3 недель тестирования и создания десятков сценариев PowerShell мне нужна помощь. Существует проблемное приложение c под названием IBM i Access для Windows 7.1, которое мне необходимо удалить примерно с 150 компьютеров в нашей сети. Это программное обеспечение требует перезагрузки fre sh до удаления, и даже в этом случае оно довольно чувствительно.

Я разбил 150 машин на 5 групп по 30 машин и пометил каждую группу в последовательном "Group1.txt, Group2.txt, et c."

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

$computers = Get-Content "\\domain\share\Scripts\IBMiAccess\Group1.txt"
Foreach ($computername in $computers)
{
Restart-Computer -ComputerName $computers -Force
}

Но я заметил, что почти все машины будут продолжать перезагрузку, как будто они находятся в каком-то цикле.

Я также возникли ошибки «RP C Сервер недоступен», хотя Windows Брандмауэр не является проблемой, служба RP C запущена и работает, как и служба DCOM. Все эти машины могут быть удалены с помощью Enter-PSSession & PSEXEC via CMD, поэтому я не уверен, что может быть причиной этого сообщения об ошибке.

Я пытался удалить через Win32, хотя я слышал, как плохо это сделать, но мне удалось удалить с 1 или 2 машин. Вот как выглядел этот скрипт:

$computers = Get-Content "\\domain\share\Scripts\IBMiAccess\Group1.txt"

Foreach ($Computername in $computers)
    {
    $MyApp = Get-WmiObject -Class Win32_Product -ComputerName $Computername |
    Where-Object{$_.Name -like "*IBM i Access for Windows 7.1*"}
    $MyApp.Uninstall()
    }

Я получаю случайные ошибки с таким, как, например, «нулевая переменная» или «RP C сервер недоступен».

Затем я попытался создать скрипт с помощью Get-Package, так как я слышал, как это прекрасно.

Ну ...

Сначала я запустил этот сценарий, чтобы подтвердить, на каких машинах установлено приложение:

$computers = Get-Content "\\domain\share\Scripts\IBMiAccess\Group1.txt"

Invoke-Command -ComputerName $PC -Credential domain\admin -ScriptBlock {Get-Package -Name "*IBM i Access for Windows 7.1*"} | Format-Table -AutoSize

В результате появилась таблица, которая, как и ожидалось, подтвердила все из машин, на которых установлено это программное обеспечение. Ну ... я решил бросить команду Uninstall-Package в конце так:

$computers = Get-Content "\\domain\share\Scripts\IBMiAccess\Group1.txt"

Invoke-Command -ComputerName $PC -Credential domain\admin -ScriptBlock {Get-Package -Name "*IBM i Access for Windows 7.1*"} | Uninstall-Package

Я получил The input object cannot be bound to any parameters for the command either because the command does not take pipeline input or the input and its properties do not match any of the parameters that take pipeline input.

Я решил попробовать использовать его по-другому и создал это:

$computers = Get-Content "\\domain\share\Scripts\IBMiAccess\Group1.txt"
Invoke-Command -ComputerName $Computers {Get-Package "*IBM i Access for Windows*"} | Uninstall

Но мой вывод просто "

64-bit
Result code is 0

Моя последняя попытка была такой:

#This script is to mass uninstall the obsolete and deprecated IBM i Access for Windows 7.1

#Step 1: Call on list of target computers.

$host = Get-Content "\\domain\share\Scripts\IBMiAccess\Group1.txt"

#Specify the application name that needs to be removed and assign it a variable.

$target = Get-WmiObject -ComputerName $host -Class Win32_Product | Where-Object {$_.Name -like "*IBM i Access for Windows 7.1*"}

$target.Uninstall()

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

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

Спасибо за вашу помощь!

...