IP-адрес и имя компьютера поступают из CSV, поэтому вам не нужно определять их статически.
Что касается имени пользователя, пара вещей:
-
Вам нужно использовать двойные кавычки для расширения.
Также вам нужно прочитать свойство 'CPU Name', один из способов сделать это - использовать подвыражение внутри большего выражения в двойных кавычках, например "$($variable.property)more text"
. Или вы можете объединить строку $variable.property + 'more text'
Поскольку CPU Name
содержит пробел в имени столбца, вам необходимо заключить его в кавычки.
Так как имя пользователя происходит от имени компьютера, которое происходит из CSV, определение переменной имени пользователя должно быть в foreach
l oop.
методы безопасности в этом сценарии сомнительны, но выходят за рамки вопроса. например, сохранение паролей в сценариях, особенно локальной учетной записи с правами администратора, на большом количестве сетевых компьютеров, которые имеют один и тот же пароль ...
$InputFile = 'C:\MyFolder\Input.csv'
$OutputFile = 'C:\MyFolder\Output.csv'
$Password = Read-Host | ConvertTo-SecureString -AsPlainText -Force
$Computers = Import-CSV $InputFile
$HotfixOutput = foreach ($Computer in $Computers) {
$Username = "$($Computer.'CPU Name')\MyUsername"
$MySecureCreds = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $Username,$Password
try {
Get-HotFix -Credential $MySecureCreds -ipaddress $Computer.'IP Address' | Select-Object PSComputerName, HotFixID, Description, InstalledBy, InstalledOn
}
catch {
Write-Warning "System Not reachable: $($Computer.'IP Address')"
}
}
$HotfixOutput | Export-Csv $OutputFile -NoTypeInformation
Remove-Variable Password
Remove-Variable MySecureCreds