Удалить программу с нескольких удаленных компьютеров и сгенерировать отчет - PullRequest
0 голосов
/ 24 сентября 2018

Вопрос 1: У меня есть скрипт ниже, который удаляет программу на локальном хосте, но в выходных данных мне просто нужно имя хоста и статус удаления

$app = Get-WmiObject -Class Win32_Product -Filter "Name = 'Test'"

$app.Uninstall() 

Вопрос 2: У меня ниже скрипт, которыйработающий на нескольких удаленных машинах, он делает то, что нужно, но результаты в другом файле иногда бывают ложными.Мне нужен вывод в файл с колонками hostname и статусом удаления

$computers = (Get-Content 'C:\Test\testmchines.txt')

foreach ( $computer in $computers ) {

    $Test = Get-WMIObject -Class Win32_Product -Filter "Name Like '%Test%'" -ComputerName $computer

    if ($Test) {
        "Found {0} on {1}" -f $Test.Name, $computer

        $result = $Test.Uninstall()
        if ($result -eq 0) {
            "Uninstall successful on {0}" -f $computer | out-file 'C:\Test\uninstall.txt' -Append
        }
        else {
            "Uninstall failed on {0}" -f $computer | out-file 'C:\Test\uninstall.txt' -Append
        }
    }
    else {
        "Test is not found on {0}" -f $computer | out-file 'C:\Test\uninstall.txt' -Append
    } }

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

Требуемый вывод: отчет / файл с именем хоста и статусом удаления, столбцы тестового приложения не найдены

1 Ответ

0 голосов
/ 25 сентября 2018

Для целей отчета вы можете использовать CSV форматированный файл.Создайте объект, содержащий необходимую информацию и использующий данные экспорта команд Export-Csv в файл.Я немного изменил ваш скрипт, чтобы показать вам объект, создающий и устанавливающий его свойства в соответствии с условиями процесса.

Надеюсь, вы поняли.

$computers = @(Get-Content 'C:\Test\testmchines.txt')

foreach ($computer in $computers){
    $Obj = New-Object PSCustomObject -Property @{ComputerName=$computer;TestExists=$false;Uninstalled=$false}

    $Test = Get-WMIObject -Class Win32_Product -Filter "Name Like '%Test%'" -ComputerName $computer

    if ($Test){
        $Obj.TestExists = $true
        $result = $Test.Uninstall()
        if ($result -eq 0) {
            $Obj.Uninstalled = $true
        }
    }
    $Obj | Export-Csv -Path 'C:\Test\uninstall.txt' -Append -NoTypeInformation
}
...