2017-03-17 142 views
0
$test = @(gwmi win32_networkadapterconfiguration | select macaddress) 
$test | ForEach-Object { 

Write-Host $_.macaddress 
$mac = $_.macaddress -replace ":", "" 
$mac.Trim() 
If (Test-Path "x:\$Mac") { $computer = $mac } 

$Logfile = "x:\$Computer\$Computer.Log" 
$File = "x:\$computer\$computer.ini" 
$computer 
$CompName = Get-Content $File | Select-Object -index 0 
} 

因此,上述脚本即使存在,也不会找到$文件。在X:\ 64006A849B90 \ 64006A849B90.ini是存在的,但我得到这个在文件路径中使用MAC地址 - 找不到文件?

错误:获取内容:找不到路径“X:\ 64006A849B90 \ 64006A849B90.ini”,因为它不存在。

任何人都知道为什么我不能使用这个 - 我知道它与$ mac值有关,并确保它的一个字符串,但我已经试过$ mac.ToString()[String] $ mac并修剪它,它会没有看到路径 - 任何想法?谢谢

奇怪的是价值正在拾起,因此MAC地址是在路径,但它不会找到路径,如果这是有道理的。

+0

所以如果你运行这个,你会在结果中看到文件? 'Get-ChildItem“X:\ 64006A849B90”' – Matt

+0

嗨马特如果我运行此Get-ChildItem“X:\ $计算机”我得到的X:\的内容不是x:\ 64006A849B90如果我运行gci x:\ 64006A849B90它工作,但我的价值必须是一个变量 - 它的东西与这个$电脑= $ mac - 但我不能工作了 – LDStewart

+0

所以'$电脑'为空然后。这是根据这个“测试路径”x:\ $ Mac“'的结果设置的。如果在if中运行该_not_会发生什么情况,但正如我输入它那样。它会返回错误吗?我怀疑它是这样的,这就是为什么'$ computer'为空。这就是说,我不知道你为改变变量名称而烦恼。为什么不直接继续使用'$ mac'? – Matt

回答

2

我想你可能有其他问题,但假设你的文件被命名并存在的地方,你期望唯一的问题是你将不得不处理的潜在的空值。

你有没有没有MAC地址的适配器?我现在有3个。使用你的代码,它会尝试处理这些。如果你不知道那些我可以看到这是一个问题。易于修复的小代码更新

# Get the populated macs from all network adapters 
$macs = Get-WmiObject win32_networkadapterconfiguration | Select-Object -ExpandProperty macaddress 

ForEach($mac in $macs){ 
    $mac = $mac.replace(":","") 
    $macFile = "x:\$mac\$mac.ini" 
    if(Test-Path $macFile){ 
     # The ini file exists 
     $computer = Get-Content $macFile | Select-Object -Index 0 
    } else { 
     # Cant find the file 
    } 

    $computer 
} 

这可以进一步简化,但我不想一次做太多。

通过使用Select-Object -ExpandProperty macaddress我们仍然会得到空值,但它们被管道丢弃,所以$macs将只包含实际MAC的字符串。

整个$computer = $mac应该已经工作,但它是多余的,所以我从你的代码中删除了逻辑。