如何使用计算机列表正确调用 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 rootcimv2securitymicrosofttpm -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 规范版本" = $tpm。规格版本 + ~ 哈希文字不完整。

新建文本文档.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 + ~

不允许使用空管道元素。 + 类别信息:解析器错误:(:) [],父包含错误记录异常 + 完全限定错误 ID:缺少打开括号后关键字

我更改了一些基本内容:

  • ForEach:如果不使用 (),您可以使用Foreach-Object遍历$comp:

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

最新更新