Как правильно вызвать переменную для Get-WmiObject, используя список компьютеров

Я пытаюсь определить, как правильно вызвать переменную для Get-WmiObject, используя список компьютеров.

Что бы я ни делал, я не могу заставить этот код работать.

Я потратил несколько часов на просмотр кода, чтобы скомпилировать тот, который у меня есть, и чувствую, что я на 90% готов, но не могу пройти мимо этой последней мелочи. Я тоже новичок в Powershell, но стараюсь изо всех сил

$comp = Import-CSV .\testlist.csv 

foreach $comp{



    $cs = Get-CimInstance -ClassName Win32_ComputerSystem -ComputerName $comp
    $bios = Get-CimInstance -ClassName Win32_BIOS -ComputerName $comp
    $tpm = Get-WmiObject -Namespace root\cimv2\security\microsofttpm -Class Win32_Tpm -computername $comp -Authentication PacketPrivacy
    $cos = Get-CimInstance -ClassName Win32_OperatingSystem -computername $comp | select-object Caption, BuildNumber, OSArchitecture

    $properties = [ordered]@{
        'ComputerName' = $comp;
        'Model' = $cs.Model;
        'Operating System' = $cos.Caption
        'OS build' = $cos.BuildNumber
        'OS Type' = $cos.OSArchitecture
        'BIOSVersion' = $bios.SMBIOSBIOSVersion
        'TPM ManufacturerId' = $tpm.ManufacturerId
        'TPM Firmware version' = $tpm.ManufacturerVersion
        'TPM SpecVersion' = $tpm.SpecVersion
        )


}| Export-Csv -Path .\Result.csv -NoTypeInformation

Сообщение об ошибке:

New Text Document.ps1: 4 char: 8 + foreach $ comp {+ ~ Отсутствует открытие '(' после ключевого слова 'foreach'.

New Text Document.ps1: 4 char: 14 + foreach $ comp {+ ~ Неожиданный токен '{' в выражении или инструкции.

New Text Document.ps1: 22 символа: 39 + 'TPM SpecVersion' = $ tpm.SpecVersion + ~ Хэш-литерал был неполным.

Новый текст Document.ps1: 4 символа: 14 + foreach $ comp {+ ~ Отсутствует закрывающий '}' в блоке оператора или определении типа.

New Text Document.ps1: 23 символа: 3 +) + ~ Неожиданный токен ')' в выражении или инструкции.

Новый текст Document.ps1: 26 символов: 1 +} | Export-Csv -Path. \ Result.csv -NoTypeInformation + ~ Неожиданный токен '}' в выражении или инструкции.

Новый текст Document.ps1: 26 символов: 2 +} | Экспорт-CSV -Путь. \ Result.csv -NoTypeInformation + ~

Пустой элемент трубы не допускается. + CategoryInfo: ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId: MissingOpenParenthesisAfterKeyword


person Reckless    schedule 30.05.2019    source источник
comment
убрать круглые скобки после $ tpm.SpecVersion   -  person Kory Gill    schedule 31.05.2019
comment
[1] ПОЖАЛУЙСТА, исправьте форматирование кода. ///// [2] это foreach $comp{ НЕ то, как вызывается цикл foreach. [ухмылка] должно быть что-то вроде foreach ($Thing in $Collection) {Do-Stuff -With ParameterInfo}.   -  person Lee_Dailey    schedule 31.05.2019


Ответы (1)


Я изменил некоторые базовые вещи:

  • ForEach: если вы не используете (), вы можете выполнить цикл $ comp, используя Foreach-Object:

$comp | ForEach-Object { write-host "computername: $_ "} .

  • Нет ; в конце строки :)

  • Подключите каждый элемент к экспорту csv и используйте -append (конечный результат вы указали по конвейеру)

  • Я предпочитаю использовать convertTo-csv | out-file somefile.csv. Export-csv делает то же самое, но применяет некоторые фильтры к выходным данным, которые иногда приводят к неожиданным результатам

foreach ($c in $comp) {
            $cs = Get-CimInstance -ClassName Win32_ComputerSystem -ComputerName $c
            $bios = Get-CimInstance -ClassName Win32_BIOS -ComputerName $c
            $tpm = Get-WmiObject -Namespace root\cimv2\security\microsofttpm -Class Win32_Tpm -computername $c -Authentication PacketPrivacy
            $cos = Get-CimInstance -ClassName Win32_OperatingSystem -computername $c | select-object Caption, BuildNumber, OSArchitecture    
        $properties = [ordered]@{
            'ComputerName'         = $c
            'Model'                = $cs.Model
            'Operating System'     = $cos.Caption
            'OS build'             = $cos.BuildNumber
            'OS Type'              = $cos.OSArchitecture
            'BIOSVersion'          = $bios.SMBIOSBIOSVersion
            'TPM ManufacturerId'   = $tpm.ManufacturerId
            'TPM Firmware version' = $tpm.ManufacturerVersion
            'TPM SpecVersion'      = $tpm.SpecVersion
        }  | 
        Export-Csv -Path .\Result.csv -NoTypeInformation
}

После } | стоит символ обратной галочки (`), который сообщает PowerShell, что строка разбита на две части. Это испортило форматирование, поэтому я удалил его, не забудьте вернуть обратно.

person Iftimie Tudor    schedule 31.05.2019