好的代码非常简单,但我似乎无法提取制造商信息。自从我上次使用PowerShell编写脚本以来已经有一年了,但看起来这样做并不是很困难。
$Var1 = GWMI Win32_PhysicalMedia
$Var2 = GWMI Win32_diskdrive |Select model
ForEach ($Item in $var2) {
$Item |Select model |Where {$_.deviceID -eq $Var1.tag}
}
答案 0 :(得分:1)
几点说明:这一点:
$Var2 = GWMI Win32_diskdrive |Select model
ForEach ($Item in $Var2) {
$Item |Select model |Where {$_.deviceID -eq $Var1.tag}
}
你基本上是这样说:“给我win32_diskdrive的”model“属性,然后你想过滤”deviceId“属性(因为你只选择了模型,你没有这个属性)
另外,你假设$ var1是一个对象,而不是一个对象数组(它很可能是)。如果你想迭代$ var2中的每个项目并将它与$ var1中的每个对象进行比较,看看你是否有匹配,我会在你的循环中放入另一个循环(注意除了搜索数组之外还有其他方法)此):
$Var1 = GWMI Win32_PhysicalMedia
$Var2 = GWMI Win32_diskdrive
#Iterate through each item in $var2
ForEach ($Item in $Var2) {
#Iterate through each item in $var1
foreach ($var1item in $var1)
{
#look for a match
$founditem = $Item |Where {$_.deviceID.tostring() -eq $var1item.tag.tostring()}
if ($founditem)
{
#if match, return the object
$FoundItem
}
}
}
我建议你花点时间通过查看PowerShell返回的对象来调试这些类型的问题.Gettype()和|获得会员。了解使用的对象是理解PowerShell的关键。
答案 1 :(得分:0)
在你的foreach循环中,你正在调用的变量名是$ var2而不是前面使用的$ Var2。我在我的系统上进行了更改并且工作正常。
$Var1 = GWMI Win32_PhysicalMedia
$Var2 = GWMI Win32_diskdrive |Select model
ForEach ($Item in $Var2) {
$Item |Select model |Where {$_.deviceID -eq $Var1.tag}
}
希望这有帮助!
答案 2 :(得分:0)
也许你想要
$drives = gwmi win32_diskdrive
$media = gwmi Win32_PhysicalMedia
foreach ($d in $drives) {
$media | where {$_.tag -eq $d.deviceID} | select <comma-separated list of properties>
}
或只是
gwmi win32_diskdrive | select deviceID, model | ft -auto
或者您正在寻找哪些制造商信息?