Powershell - Select-String - quiet不能正常工作



所以我正在编写一个powershell脚本,除其他事项外,检查您是否在Exchange分发组中,并在必要时添加您。

让它变得棘手的一件事是,脚本从一个"不可靠"的来源获取数据。也就是说,我甚至不能保证我有一个用户名来检查。

我需要检查是否为空字符串。我有我的用户名存储在一个变量$tempUserName,这只是一个字符串,并存储在$DefaultMobileDL分布列表的名称。由于其他原因,我不会讲,我不能做if {} else {}语句,我只能做if语句。我知道这很愚蠢。

好的,这是我的代码:

if (-not [string]::IsNullOrEmpty($tempUsername)) { 
    $MembersOfDLDefault = Get-DistributionGroupMember "$DefaultMobileDL" -ResultSize Unlimited |
        Select -Expand sAMAccountName | 
        Select-String -pattern "$tempUsername" -SimpleMatch -Quiet 
}
if ([string]::IsNullOrEmpty($tempUsername)) { $MembersOfDLDefault = $false }
# bug testing...
Write-Host "username: `"$tempUsername`" , MembersOfDLDefault: `"$MembersOfDLDefault`""
if ($MembersOfDLDefault -eq $false) {
  # User is not a member of $DefaultMobileDL, try adding them
  # ... more code here ...
}
if ($MembersOfDLDefault -eq $true) {
  # User is already a member of the $DefaultMobileDL
  # ... again, more code ...
}

该代码块在foreach循环中,并且由于我在每次迭代后传递变量值时遇到问题,因此在代码的最后,我清除了几个变量,但对于此实例,重要的一行是:

Clear-Variable MembersOfDLDefault

现在,如果我正确阅读文档,如果找到项目,Select-String -Quiet应该返回True,如果没有返回False。

然而,这不是我得到的结果。下面是当我运行代码时发生的事情(在这个运行中,我有3个用户名,我碰巧要测试,其中一个(第三个)是一个空字符串):

username: "smithj" , MembersOfDLDefault: ""
username: "doej" , MembersOfDLDefault: "True"
username: "" , MembersOfDLDefault: "False"

可以看到,第一次运行代码时,$MembersOfDLDefault没有被设置为任何值!

我知道我错过了一些愚蠢的东西,但是我盯着这段代码看了太长时间了,需要一些新的人来看看。有什么我遗漏或忽视的吗?

提前感谢。

从技术上讲,我是在Exchange Management Shell中运行这个,而不是直接从Powershell中运行,尽管我认为这应该无关紧要

似乎文档中所说的-quiet和它实际做的是不同的。行为似乎是,当没有匹配时,Select-String -quite将返回$null。要验证这一点,请尝试:

# ~> "xxxHELLOaaa" | Select-String "HELLO" -SimpleMatch -Quiet
True
# ~> "xxxHELLOaaa" | Select-String "HaLLO" -SimpleMatch -Quiet

要么实现不正确,要么文档不正确(我找不到任何确认)。一个简单的解决方法是将结果强制转换为布尔值:

if (-not [string]::IsNullOrEmpty($tempUsername)) { 
    $MembersOfDLDefault = [bool] (Get-DistributionGroupMember "$DefaultMobileDL" -ResultSize Unlimited |
        Select -Expand sAMAccountName | 
        Select-String -pattern "$tempUsername" -SimpleMatch -Quiet )
}

相关内容

  • 没有找到相关文章

最新更新