在PowerShell中将2个数组与通配符进行比较

时间:2015-10-28 09:05:21

标签: powershell

假设我们有2个.txt文件,如此:

users.txt

user.name1
user.name2
admin.name1
admin.name2

shares.txt

\\someserver\somefolder\user.name1
\\someserver\somefolder\user.name2
\\someserver\someotherfolder\admin.name1
\\someotherserver\somefolder\admin.name2
\\someplaceelse\somefolder\no.name

我想比较这两个数据点,只显示" shares.txt"中的行。匹配" users.txt"中的名称。我想我们需要使用某种wildcardsearch,因为用户名总是包含在uncpath中但不会完全相同,这里是我迄今为止尝试过的一个例子没有成功

$users = Get-Content ".\users.txt"
$shares = Get-Content ".\shares.txt"
foreach ($line in $users)
{
if ("*$line*" -like "$shares")
}
Write-Host "this line matches $line"
}
}

1 个答案:

答案 0 :(得分:1)

foreach ($line in $users)
{
if ($shares -like "*$line*")
{
Write-Host "$($shares | where {$_ -like "*$line*"}) this line matches $line"
}
}

要获取预期信息,必须在搜索中包含循环的当前值。

您的代码中的问题是,类似操作符只允许表达式右侧的通配符。所以匹配必须以相反的方式发生。