Greatings,我试图用Powershell提取WMI信息,以便通过PHP将它们推送到Mysql DB中。 如果一台机器无法访问互联网,我会导出一个XML文件(正在运行)。
$filePath = $PSScriptRoot + '\processors.xml'
$XmlWriter = New-Object System.XMl.XmlTextWriter($filePath,$Null)
$processor = Get-WmiObject Win32_Processor
$xmlWriter.WriteStartElement("Processor")
foreach ($item in $processor){
$xmlWriter.WriteStartElement($item.DeviceID)
$xmlWriter.WriteElementString("Name",$item.Name)
$xmlWriter.WriteElementString("AddressWidth",$item.AddressWidth)
$xmlWriter.WriteElementString("NumberOfCores",$item.NumberOfCores)
$xmlWriter.WriteElementString("NumberOfLogicalProcessors",$item.NumberOfLogicalProcessors)
$xmlWriter.WriteElementString("L2CacheSize",$item.L2CacheSize)
$xmlWriter.WriteElementString("L3CacheSize",$item.L3CacheSize)
$xmlWriter.WriteEndElement()
}
$xmlWriter.WriteEndElement()
$xmlWriter.Finalize
$xmlWriter.Flush()
$xmlWriter.Close()
但是如果一台机器可以访问互联网,我更喜欢通过HTTP POST将信息直接推送到页面,这将验证信息并将它们存储在数据库中。 这是我的问题,因为我不知道项目的数量(这里是处理器,但想象有内存,硬盘......等)我使用foreach语句来创建XML文件(并且它可以工作)但是,我不知道如何创建等效结构来创建和填充存储CPU信息的多维度$ post处理器。我已经尝试了以下代码,但我被卡住了(这是行不通的):
$processor = Get-WmiObject Win32_Processor
$postprocessor = @()
foreach ($item in $processor){
$itemarr = @()
$itemarr += 'Name="'+$item.Name+'"'
$itemarr += 'AddressWidth="'+$item.AddressWidth+'"'
$itemarr += 'NumberOfCores="'+$item.NumberOfCores+'"'
$itemarr += 'NumberOfLogicalProcessors="'+$item.NumberOfLogicalProcessors+'"'
$itemarr += 'L2CacheSize="'+$item.L2CacheSize+'"'
$itemarr += 'L3CacheSize="'+$item.L3CacheSize+'"'
$postprocessor.Add($item.DeviceID+'='+$itemarr)
# write-host $itemarr
Remove-Variable itemarr
}
$postParams = $postprocessor
$sending = Invoke-WebRequest -Uri http://localhost:8080/wmi/test.php -Method POST -Body $postParams
事实上我只想存储这样的信息:
$postParam[]
$postProcessors[]
->Processor1[]
->Name = value
...
->L3Cachesize = value
->Processor2[]
->Name = value
...
->L3Cachesize = value
postMemories[...]
postHardDrives[...]
etc
也许我没有找到解决我问题的先前答案,如果是事先请原谅我,我会很高兴看到你发送给我的很多链接。 最好的
答案 0 :(得分:0)
您可能需要的是字典而不是数组数组。
$processor = Get-WmiObject Win32_Processor
$postprocessor = @{}
foreach ($item in $processor){
$itemHash = @{
Name = $item.Name
AddressWidth = $item.AddressWidth
NumberOfCores = $item.NumberOfCores
NumberOfLogicalProcessors = $item.NumberOfLogicalProcessors
L2CacheSize = $item.L2CacheSize
L3CacheSize = $item.L3CacheSize
}
$postprocessor.Add($item.DeviceID, $itemHash)
}
$postParams = $postprocessor
这是我在输出中看到的。
PS C:\> $postprocessor
Name Value
---- -----
CPU0 {Name, NumberOfCores, AddressWidth, NumberOfLogicalProcessors...}
PS C:\> $postprocessor["cpu0"]
Name Value
---- -----
Name Intel(R) Core(TM) i7-3630QM CPU @ 2.40GHz
NumberOfCores 4
AddressWidth 64
NumberOfLogicalProcessors 8
L2CacheSize 1024
L3CacheSize 6144
PS C:\> ConvertTo-Json -InputObject $postprocessor
{
"CPU0": {
"Name": "Intel(R) Core(TM) i7-3630QM CPU @ 2.40GHz",
"NumberOfCores": 4,
"AddressWidth": 64,
"NumberOfLogicalProcessors": 8,
"L2CacheSize": 1024,
"L3CacheSize": 6144
}
}