我正在尝试将只有实时适配器的内容转储到csv文件中,以便以后导入。
问题是使用$ _。下面。
$colNicConfigs = Get-WMIObject Win32_NetworkAdapterConfiguration | where { $_.IPEnabled -eq "TRUE" }
#loop over each adapter
foreach ($objNicConfig in $colNicConfigs)
{
$objnic=Get-WMIObject Win32_NetworkAdapter | where {$_.deviceID -eq "$objNicConfig.Index" }
#$strname=$objnicconfig.description.split(":")[0]
#replace strname above when testing against actual server since no dot1q defined on my wks
$strname="MGMT:Something"
$connid=$_.NetworkConnectionID
$ipaddr=$_.IPAddress(0)
$ipsm=$_.IPSubnet(0)
$dg=$_.DefaultIPGateway
}
# create dictionary entries
$report = @()
$report += New-Object psobject -Property @{Name=$strname;ConnID=$connid;IP=$ipaddr;SM=$ipsm;DG=$dg}
$report | export-csv .\nic.csv
答案 0 :(得分:1)
您最初的问题是在foreach
循环中使用“$ underscore”。如果您想引用$objNicConfig
的属性,您将使用它来代替“$ underscore”。因此,您可以使用$connid=$_.networkConnectionID
$connid=$objNicConfig.networkConnectionID
同样IpAddress and IPSubnet
不是它们属性的方法,因此删除(0)将返回写入信息。如果您的NIC有多个IP,我无法证明这将显示如何,因为我的机器没有,我正在测试。
我看到的其他事情是你需要在那里嵌套另一个foreach
循环以引用两个WMI名称空间......所以类似于:
$colNicConfigs = Get-WMIObject Win32_NetworkAdapterConfiguration | where { $_.IPEnabled -eq "TRUE" }
foreach ($objNicConfig in $colNicConfigs)
{
foreach($objnic in (gwmi win32_networkadapter | where {$_.DeviceID -eq $objNicConfig.Index}))
{
$strName = "MGMT:Something"
$objNicConfig.NetworkConnectionID
$objNicConfig.IpAddress
$objNic.IPSubnet
$objNicConfig.DefaultIPGateway
}
}
以上代码是我用来在计算机的NIC上返回信息的代码。
现在使用“词典条目”部分。您将无法以添加foreach
的方式引用psobject
循环中的变量。您只会捕获foreach
循环代码中找到的最后一个。如果您想先在foreach
循环中收集信息,然后在您的脚本中使用它,我建议您查看hash tables
。