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