MAC地址字符串比较失败

时间:2017-08-21 15:01:12

标签: string powershell substring

我尝试使用字符串比较从本地计算机的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失败。

2 个答案:

答案 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 
}