2017-08-21 15 views
1

ローカルマシンのMACアドレスとの文字列比較を使用して、txtファイル$pclisteからコンピュータ名を抽出しようとしました。テキストファイルが含まれています:MACアドレス文字列の比較に失敗しました

 
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) 
    } 
} 

私のテストVMのMACアドレスは00:15:5D:FF:0B:38ですが、ループ内の文字列の比較は偽のまま。

私は既にMACを文字列変数に入れました。これはGet-WmiObjectを使って抽出しました。これはうまくいきます。 また、抽出したmacadressを[string]$macadressを使って文字列に変換しようとしました。

私はそれが-matchを失敗させる原因となる何らかの種類のデータ型/オブジェクト型問題だと考えます。

+3

'$ macadresse'はおそらく配列です。ですから、 '-match'ではなく' -in'/'-contains'を使うか、配列をループする必要があります。 – BenH

+1

あなたは明らかにホスト名とMACアドレスの行を読んでいるので、それらを分割したいので、MACアドレスだけで変数を取得します(そうでなければ '-contains' /' -in'は動作しません): '$ホスト名、$ string = $ pcname [$ i] -split '\ s +' ' –

答えて

0

は次のように変更しよう:

$string = $pcnamen[$i] -split " " 
if ($macadresse -contains $string[1]) { 

あなたはこのようなあなたのコードを簡素化することができますでの値としてキーとPC名としてMACを入れて、ハッシュテーブルについて

$pcnamen = import-csv $pcliste -Delimiter ' ' -Header Computer, Mac 

Get-WmiObject Win32_NetworkAdapterConfiguration | %{ 
$Mac=$_.macaddress 
$pcnamen | where Mac -eq $Mac 
} 
+0

簡素化していただきありがとうございます。 – user3212714

1

何。

$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} 
} 
関連する問題