尝试从powershell脚本捕获IP,而不是获取System.String []

时间:2014-07-08 15:39:08

标签: powershell csv

我尝试使用此脚本将机器的IP地址,MAC地址和DefaultIPGateway信息从Win32_NetworkAdapterConfiguration对象提取到名为NetworkAdapterConfiguration.csv的导出CSV文件中:

$StrComputer = $env:computername
$NetAdConfig = gwmi Win32_NetworkAdapterConfiguration -Comp $StrComputer
$NetAdConfig | Select-Object IPAddress,MACAddress,DefaultIPGateway | Export-Csv -Path C:\CSVFolder\NetworkAdapterConfiguration.csv -Encoding ascii -NoTypeInformation

当我查看此CSV时,我得到" System.String []"应显示IP和DefaultIPGateway值的位置。我假设这些信息被表示为数组,这就是我看到System.String []视图的原因,但我对Powershell的经验不多。非常感谢任何帮助,建议和参考。

2 个答案:

答案 0 :(得分:2)

IPAddress和DefaultIPGateway属性是数组。如果您确定您的计算机只有一个IP地址和默认网关,则可以执行以下操作:

$computer = $ENV:COMPUTERNAME
get-wmiobject Win32_NetworkAdapterConfiguration -filter "IPEnabled=TRUE" -computername $computer | foreach-object {
  new-object PSObject -property @{
    "Computer" = $computer
    "MACAddress" = $_.MACAddress
    "IPAddress" = $_.IPAddress[0]
    "DefaultIPGateway" = $_.DefaultIPGateway[0]
  } | select-object Computer,MACAddress,IPAddress,DefaultIPGateway
}

以下是使用Select-Object的另一种方式:

$computer = $ENV:COMPUTERNAME
get-wmiobject Win32_NetworkAdapterConfiguration -filter "IPEnabled=TRUE" -computername $computer | foreach-object {
    $_ | select-object `
      @{Name="ComputerName";     Expression={$_.__SERVER}},
      @{Name="MACAddress";       Expression={$_.MACAddress}},
      @{Name="IPAddress";        Expression={$_.IPAddress[0]}},
      @{Name="DefaultIPGateway"; Expression={$_.DefaultIPGateway[0]}}
}

答案 1 :(得分:1)

我有一个名为Convert-OutputForCSV的函数可以帮助删除你看到的字符串[]问题。您可以执行类似这样的操作,将数组扩展为更易读的属性。

$StrComputer = $env:computername
$NetAdConfig = gwmi Win32_NetworkAdapterConfiguration -Comp $StrComputer
$NetAdConfig | Select-Object IPAddress,MACAddress,DefaultIPGateway |
Convert-OutputForCSV | 
Export-Csv -Path C:\CSVFolder\NetworkAdapterConfiguration.csv -Encoding ascii -NoTypeInformation