Импорт CSV и использование Get-Hotfix для экспорта в CSV - PullRequest
0 голосов
/ 06 января 2020

Итак, у меня возникли некоторые трудности с кодом, который я пытаюсь использовать, чтобы получить исправления с большого количества компьютеров (которые перечислены в файле CSV под столбцом «IP-адрес») и экспортировать полученный результат в CSV. Каждому из них требуется учетная запись локального компьютера для входа (в том же CSV под столбцом «CPU Name»). Мне все равно, если это один CSV для всего этого или CSV для каждого результата. Вот код на данный момент:

$ipaddress = [What do I put here?]
$cpuname = [What do I put here?]
$OutputFile = 'MyFolder\Computer.csv'
$Username = '$cpuname\MyUsername' [Is this ok?]
$Password = 'MyPassword'
$pass = ConvertTo-SecureString -AsPlainText $Password -Force

$SecureString = $pass
$MySecureCreds = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $Username,$SecureString

$Computers = Import-CSV "C:\MyFolder\Computers.csv"

ForEach ($ipaddress in $Computers) {
    }

  try  

    { 
Get-HotFix -Credential $MySecureCreds -ipaddress $IPAddress | Select-Object PSComputerName,HotFixID,Description,InstalledBy,InstalledOn | export-csv $OutputFile
    } 

catch

    { 
Write-Warning "System Not reachable:$ipaddress"
    }

Я близко?

1 Ответ

0 голосов
/ 07 января 2020

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...