Настройка моего кода Get-Hotfix и повышение его безопасности - PullRequest
0 голосов
/ 09 января 2020

После запроса о команде 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-адресов, не так уж и весело.

...