我尝试使用字符串比较从本地计算机的MAC地址中提取txt文件$pcliste
中的计算机名。文本文件包含:
super-pc 00:15:5D:FF:0B:33 av-client4 00:15:5D:FF:0B:38 temp 00:15:5D:FF:0B:39
我使用以下PowerShell代码:
$macadresse = Get-WmiObject Win32_NetworkAdapterConfiguration | select macaddress
$macadresse = $macadresse.macaddress
$pcnamen = Get-Content -Path $pcliste
$computername = "TEMP-NAME"
for ($i=0; $i -lt $pcnamen.Length; $i++) {
$string = $pcnamen[$i]
if ($string -match $macadresse) {
write "MAC found!"
$index = $pcnamen[$i].IndexOf(" ")
$computername = $pcnamen[$i].substring(0, $index)
}
}
我的测试虚拟机的MAC地址为00:15:5D:FF:0B:38
,但循环中的字符串比较仍为假。
为了进行测试,我已经将MAC放在一个字符串变量中,而不是使用Get-WmiObject
来提取它,这是有效的。
我还尝试使用[string]$macadress
将提取的macadress转换为字符串。
我认为某种数据类型/对象类型问题导致-match
失败。
答案 0 :(得分:1)
如何将MAC作为键和pc名称作为值放在哈希表中。
$MyMACs = Get-WmiObject win32_networkadapterconfiguration|Select -Expand MacAddress
$MyMACs
$PcHash = @{}
ForEach ($Row in (Get-Content '.\pcliste.txt')) {
$PcHash.Add($Row.Split(' ')[1],$Row.Split(' ')[0])
}
ForEach($Mac in $MyMACs){
IF ($PcHash[$Mac]){
"Found {0} for MAC {1}" -f $PcHash[$Mac],$Mac
}
}
或更基本的
$MyMACs = Get-WmiObject win32_networkadapterconfiguration|Select -Expand MacAddress
ForEach($Mac in $MyMACs){
Select-String -Path '.\pcliste.txt' -Pattern $MAC|ForEach-Object{$_.Line}
}
答案 1 :(得分:0)
尝试修改如下:
$string = $pcnamen[$i] -split " "
if ($macadresse -contains $string[1]) {
您可以像这样简化代码:
$pcnamen = import-csv $pcliste -Delimiter ' ' -Header Computer, Mac
Get-WmiObject Win32_NetworkAdapterConfiguration | %{
$Mac=$_.macaddress
$pcnamen | where Mac -eq $Mac
}