0

我正在尝试确定如何使用计算机列表正确调用 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

错误信息:

新文本 Document.ps1:4 char:8 + foreach $comp{ + ~ 在关键字“foreach”之后缺少开头“(”。

新文本 Document.ps1:4 char:14 + foreach $comp{ + ~ 表达式或语句中出现意外标记“{”。

新文本 Document.ps1:22 char:39 + 'TPM SpecVersion' = $tpm.SpecVersion + ~ 哈希文字不完整。

新文本 Document.ps1:4 char:14 + foreach $comp{ + ~ 在语句块或类型定义中缺少结束“}”。

新文本 Document.ps1:23 char:3 + ) + ~ 表达式或语句中出现意外标记 ')'。

新文本文档.ps1:26 char:1 + }| Export-Csv -Path .\Result.csv -NoTypeInformation + ~ 表达式或语句中出现意外标记“}”。

新文本 Document.ps1:26 char:2 + }| Export-Csv -Path .\Result.csv -NoTypeInformation + ~

不允许使用空的管道元素。+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : MissingOpenParenthesisAfterKeyword

4

1 回答 1

0

我改变了一些基本的东西:

  • 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该行被分成两部分。它弄乱了格式,所以我删除了它,别忘了把它放回去。

于 2019-05-31T07:31:48.053 回答