Изменение PowerShell для экспорта Центра обновления Windows в файл CSV только для определенного подразделения не работает - PullRequest
0 голосов
/ 08 февраля 2019

Мне нужно получить список последних обновлений Windows Update на сервере из нескольких разных подразделений, а затем экспортировать его, как в CSV-файле, с приведенным ниже столбцом, и его примерный результат, который я собираю вручную, Get-HotFix локальнона каждом сервере:

ServerName, Last Time Update Installed, KB Number, KB Update Name, InstalledBy
PRODSQL01-VM, 31/12/2018 02:46:55, KB4462930, Cumulative Update, NT AUTHORITY\SYSTEM
PRODSQL02-VM, 18/12/2018 12:00:00 AM, KB4471324, Security Update, DOMAIN\SVC_SCCM
PRODDC01-VM, 16/1/2019 02:16:31, KB4343669, Cumulative Update, DOMAIN\SVC_SCCM
PRODDC02-VM, 13/1/2018 03:00:00 AM, KB4457146, Security Update, DOMAIN\Admin-Staff1

Это модифицированный скрипт для обработки нескольких OU, но в результате все равно остается пустой файл CSV:

$CsvFile = 'C:\Result.csv'
$key = 'SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\Results\Install'
$keytype = [Microsoft.Win32.RegistryHive]::LocalMachine 

$OUList = @(
    "OU=TEST Servers,OU=MyDomain Testing,DC=MyDomain,DC=com"
    "OU=PROD Servers,OU=Servers,OU=MyDomain Sydney,DC=MyDomain,DC=com"
    "OU=PROD Servers,OU=Servers,OU=New Company,DC=MyDomain,DC=com"
)

$OUList | ForEach-Object {
    $OU = $_
    $Computers = Get-ADComputer -Filter {Enabled -eq $True -and OperatingSystem -like "*Server*"} -SearchBase $OU |
        Select-Object -ExpandProperty DNSHostName |
        ForEach-Object {
        If (Test-Connection $_ -Count 1 -Quiet) {
            $_
        }
        Else {
            Write-Host "Cannot reach $($_)" -ForegroundColor Red
        }
    }
    ForEach ($computer in $Computers) {
        Try {
            $remoteBase = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype, $computer) 
            $regKey = $remoteBase.OpenSubKey($key) 
            $keyValue = $regkey.GetValue('LastSuccessTime')
            Write-Host '' 
            Write-Host "$($computer): last time updates were installed was $($keyValue)"
        }
        Catch {
            $ | Write-Error
        }
        Finally {
            If ($regKey) {$regKey.Close()}
        }
    }
} | Export-Csv -Path $Csvfile -NoTypeInformation

1 Ответ

0 голосов
/ 08 февраля 2019

Как уже упоминали другие, вы делаете write-host, а не добавляете что-либо в свой CSV-файл.

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

$CsvFile = 'C:\Result.csv'
$Results = @() #object to hold the output
$key = 'SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\Results\Install'
$keytype = [Microsoft.Win32.RegistryHive]::LocalMachine 

$OUList = @(
    "OU=TEST Servers,OU=MyDomain Testing,DC=MyDomain,DC=com"
    "OU=PROD Servers,OU=Servers,OU=MyDomain Sydney,DC=MyDomain,DC=com"
    "OU=PROD Servers,OU=Servers,OU=New Company,DC=MyDomain,DC=com"
)

ForEach ($OU in $OUList) {
    Get-ADComputer -Filter {Enabled -eq $True -and OperatingSystem -like "*Server*"} -SearchBase $OU | 
    Select-Object -ExpandProperty DNSHostName | 
    ForEach-Object {
        If (Test-Connection $_ -Count 1 -Quiet) {
            Try {
                $remoteBase = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey($keytype, $_) 
                $regKey = $remoteBase.OpenSubKey($key) 
                $keyValue = $regkey.GetValue('LastSuccessTime')
                # Add result to Results array.  Not Result
                $results += [pscustomobject]@{
                    Computer = $_
                    LastSuccessTime = $KeyValue
                }
            }
            Catch {
                $ | Write-Error
            }
            Finally {
                If ($regKey) {$regKey.Close()}
            }
        }
        Else {
            Write-Host "Cannot reach $($_)" -ForegroundColor Red
        }
    }
}
#export result object to CSV
$Results | Export-Csv -Path $Csvfile -NoTypeInformation
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...