在PowerShell中获取System.Object []输出



我编写了此快速脚本以检索有关一堆服务器的信息。当我在Windows 7(PS V2)主机上运行时,我会得到所有正确的结果。但是,当我在Server 2008 R2(PS V2)上运行时,我将获得以下所有查询的 System.Object [] 。我还有其他一些查询,但它们都很好,只是这些问题,我遇到了这个问题。怎么了?

$ArrComputers = "localhost"
$OutputLog = ".output.csv" 
$NotRespondingLog = ".notresponding.txt" 
$ErrorActionPreference = "Stop" 
Clear-Host
$data = ForEach ($Computer in $ArrComputers)  {
try{
    $ipAdd          = (Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName .)| select ipaddress
    $MacAdd         = (Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName .)| Select MacAddress
    $DefGateway     = (Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName .)| Select DefaultIPGateway   
    $DNSServ        = (Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName .)| Select DNSServerSearchOrder 
    $CPUname        = (Get-WmiObject –class Win32_processor -ComputerName .)| Select name
    $processorinfo = (Get-WmiObject –class Win32_processor -ComputerName .)| Select NumberOfCores
    $processorinfo2 = (Get-WmiObject –class Win32_processor -ComputerName .)| Select NumberOfLogicalProcessors
$memory = Get-WMIObject -class Win32_PhysicalMemory -ComputerName $Computer |
Measure-Object -Property capacity -Sum |
select @{N="r"; E={[math]::round(($_.Sum / 1GB),2)}}

}catch{
    $Computer | Out-File -FilePath $NotRespondingLog -Append -Encoding UTF8
    continue    
}
$props = @{

'IPAddress'      = $ipAdd
'MacAddress'     = $MacAdd
'DefaultIPGateway'= $DefGateway
'DNSServerSearchOrder' = $DNSServ
'cpuName'        = $CPUname
'Cores'          = $processorinfo
'logicalcores'   = $processorinfo2
' Memory'         =  $memory

} 
New-object -type PSCustomObject -Property $Props
} 
$Data | export-csv -notypeinformation $outputlog 

因此,您面临的问题:PowerShell将$ data返回为key = value = value或Hashtable格式,但作为对象。因此,当您插入与CSV相同的时,它将其返回为对象。因此,您可以做的是您可以将数据转换为JSON格式,并且可以插入相同的数据。否则,您可以使用arraylist并在此处插入所有值。在这种情况下,它将接受键值对映射。

希望它有帮助

我已从选择查询中删除了标题,并使用循环中创建的自定义对象创建了一个数组列表,它将从服务器中添加每个详细信息,并将附加在数组列表中分别地。我希望这可以帮助你。

$ArrComputers = "localhost"
$OutputLog = ".output.csv" 
$NotRespondingLog = ".notresponding.txt" 
$ErrorActionPreference = "Stop" 
Clear-Host
$Global:arraylist= New-Object System.Collections.ArrayList
$data = ForEach ($Computer in $ArrComputers)  {
try{
    $ipAdd          = (Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName $Computer)| select ipaddress
    $MacAdd         = (Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName $Computer)| Select MacAddress
    $DefGateway     = (Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName $Computer)| Select DefaultIPGateway   
    $DNSServ        = (Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName $Computer)| Select DNSServerSearchOrder 
    $CPUname        = (Get-WmiObject –class Win32_processor -ComputerName $Computer)| Select name
    $processorinfo = (Get-WmiObject –class Win32_processor -ComputerName $Computer)| Select NumberOfCores
    $processorinfo2 = (Get-WmiObject –class Win32_processor -ComputerName $Computer)| Select NumberOfLogicalProcessors
$memory = Get-WMIObject -class Win32_PhysicalMemory -ComputerName $Computer |
Measure-Object -Property capacity -Sum |
select @{N="r"; E={[math]::round(($_.Sum / 1GB),2)}}
$props =[PSCustomObject]@{

'IPAddress'      = $ipAdd.ipaddress[0]
'MacAddress'     = $MacAdd.MacAddress
'DefaultIPGateway'= $DefGateway.DefaultIPGateway[0]
'DNSServerSearchOrder' = $DNSServ.DNSServerSearchOrder[0]
'cpuName'        = $CPUname.name
'Cores'          = $processorinfo.NumberOfCores
'logicalcores'   = $processorinfo2.NumberOfLogicalProcessors
' Memory'         =  $memory.r

}
$arraylist.Add($props)
}catch{
    $Computer | Out-File -FilePath $NotRespondingLog -Append -Encoding UTF8
    continue    
}

} 
$arraylist | Export-Csv -NoTypeInformation $OutputLog -Force

最新更新