Powershell - Select-String -Quiet无法正常工作?

时间:2014-05-23 13:41:04

标签: powershell select-string

所以我正在编写一个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命令行管理程序运行它,而不是直接从Powershell运行它,尽管我认为这不重要

1 个答案:

答案 0 :(得分:3)

这似乎是文档中关于-quiet所说的内容,它实际上是different。行为似乎是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 )
}