1

因此,我正在编写一个 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 运行它,尽管我认为这无关紧要

4

1 回答 1

3

似乎文档所说的内容-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 )
}
于 2014-05-23T17:19:02.317 回答