我有一个关于语句和变量内代码块的简单问题。我的脚本收集用户输入并创建一个可以在以后的powershell语句中使用的字符串。Powershell - 用变量替换codeblock
$filter = @()
While ($filter[-1] -ne "end") {
$filter += read-host 'Type the name of an OU you want to filter or type "end" to start the script'
if ($filter[-1] -eq "end") {
break
}
$strFilter += "`$_`.DistinguishedName -notlike `"*" + $filter[-1] + "*`" "
$strFilter += "-and "
}
$strFilter = $strFilter.SubString(0,$strFilter.length-5)
基本上用户将键入然而,许多单词,这些单词将被追加到字符串"$_.DistinguishedName -notlike "*<WORD>*""
与-and
一起扔,直到进入最后一个字。
这部分工作正常,它使用这个生成的字符串来收集似乎没有工作的信息;我有一种感觉,这是非常简单的,我只是想念。
例如:
$computers = get-adcomputer -Filter 'ObjectClass -eq "Computer"' -properties "OperatingSystem","CanonicalName","Description"
$filteredComputers = $computers | where-object { $strFilter }
$ filteredComputers返回相同的结果$电脑这使我相信,我的字符串变量在哪里对象的语句没有做任何事情。
感谢任何帮助,谢谢。
'($ strFilter | Where {$ dn-like $ _})。Count -eq 0'似乎将所有内容标记为false,例如即使它不属于任何域控制器OU,输入字符串“域控制器”仍将返回false。它不是真的,因为有0比赛?也许我误解了一些东西? – smierdziel
这意味着它正在匹配'$ strFilter'中的某个过滤项。'$ strFilter'的内容是什么?也许你在那里有一个过滤条件不应该 - 也许是'**'? –
我不相信'**'正在匹配,如果你在第一个while循环期间按下输入,将实例集合到数组中,那么会出现'**',我通常会检查这个试图过滤我的结果。当我复制粘贴上面的例子时,foo不会被返回。 – smierdziel