После запроса о команде Get Hotfix , над которой я работал, я настроил код достаточно, чтобы он работал в моей среде; Тем не менее, я хотел бы сделать его более безопасным и лучше обрабатывать ошибки. Существующий код очень расплывчатый, и не очень легко определить, где находятся точки сбоя без отладки.
Вот код, который я использовал:
$InputFile = 'C:\***\Computers.csv'
$Computers = Import-CSV $InputFile
$OutputFile = 'C:\***\Results.csv'
$Password = '***' | ConvertTo-SecureString -asPlainText -Force
$HotfixOutput = foreach ($Computer in $Computers) {
$Username = "$($Computer.CPUName)\***"
$MySecureCreds = New-Object System.Management.Automation.PSCredential ($Username,$Password)
try {
Get-HotFix -Credential $MySecureCreds -ipaddress $Computer.IPAddress | Select-Object PSComputerName, HotFixID, Description, InstalledBy, InstalledOn
}
catch {
Write-Warning "System Not reachable: $($Computer.IPAddress)"
}
}
$HotfixOutput | Export-Csv $OutputFile -NoTypeInformation
Remove-Variable Password
Remove-Variable MySecureCreds
Теперь я хочу сделать Несколько вещей в коде, чтобы сделать его более безопасным и, возможно, немного быстрее. Первая мысль - сменить открытый текст на приглашение К счастью, я нашел это руководство , которое я собираюсь включить. Итак, я удаляю существующий $ Password и ввожу его вместо него:
$SecurePassword = Read-Host -Prompt "Enter password" -AsSecureString
И помещаю этот дополнительный код в область foreach вместо элемента $ MySecureCreds:
$Credentials = New-Object System.Management.Automation.PSCredential `
-ArgumentList $UserName, $SecurePassword
Я также хотел бы обернуть команду try вокруг теста / результата ping. Видимо, я могу сделать это с помощью следующей команды, а затем избавиться от try / catch там. И затем предупреждение о записи команды else.
if((Test-Connection -TargetName $($Computer.IPAddress) -Quiet -Count 1) -ne $null)
Мне также интересно, если, возможно, мне следует включить проверку учетных данных, если она не работает. Я нашел this , но мне интересно, нужно ли мне создать объект или я могу каким-то образом просто вырезать часть этого и включить его в часть foreach.
Наконец, мне интересно если мне нужно, чтобы он сгенерировал один CSV в конце или поместил его в раздел foreach. Нет необходимости работать с кучей отдельных файлов, но ждать, пока он обработает 200 IP-адресов, не так уж и весело.