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

Я пытаюсь определить, как правильно вызывать переменную для 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

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

Новый текстовый документ.ps1: 4 знака: 8 + foreach $ comp { + ~ Отсутствует открытие '(' после ключевого слова 'foreach'.

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

Новый текстовый документ.ps1: 22 знака: 39 + 'TPM SpecVersion' = $ tpm.SpecVersion + ~ Литерал хеша был неполным.

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

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

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

Новый текстовый документ.ps1: 26 символов: 2 +} | Export-Csv -Path. \ Result.csv -NoTypeInformation + ~

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

1 Ответ

0 голосов
/ 31 мая 2019

Некоторые основные вещи, которые я изменил:

  • 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, что строка разбита на две части. Форматирование было испорчено, поэтому я удалил его, не забудьте вернуть его обратно.

...