そのため、特に、Exchange 配布グループに属しているかどうかを確認し、必要に応じて追加する powershell スクリプトを作成しています。
厄介な問題の 1 つは、スクリプトが「信頼できない」ソースからデータを取得していることです。つまり、チェックするユーザー名さえ持っているとは保証できません。
そのため、空の文字列の場合にチェックする必要があります。ユーザー名$tempUserName
を単なる文字列の変数に格納し、配布リストの名前を に格納してい$DefaultMobileDL
ます。他の理由については触れませんが、ステートメントは実行できませんif {} else {}
。if ステートメントしか実行できません。それは非常に愚かです、私は知っています。
OK、ここに私が持っているものがあります:
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 ループ内にあり、反復ごとに渡される変数値に問題があったため、コードの最後でいくつかの変数をクリアしましたが、この例で重要な 1 行は次のとおりです。
Clear-Variable MembersOfDLDefault
ドキュメントを正しく読んでSelect-String -Quiet
いれば、アイテムが見つかった場合は True を返し、見つからなかった場合は False を返す必要があります。
しかし、それは私が得ている結果ではありません。コードを実行すると、次のようになります (この実行では、たまたまテストしている 3 つのユーザー名があり、そのうちの 1 つ (3 つ目) は空の文字列です)。
username: "smithj" , MembersOfDLDefault: ""
username: "doej" , MembersOfDLDefault: "True"
username: "" , MembersOfDLDefault: "False"
ご覧のとおり、コードを初めて実行したときは$MembersOfDLDefault
何も設定されていません。
何かばかげたことを見逃していることはわかっていますが、このコードを長い間見つめていたので、新しい目で見る必要があります。私が行方不明または見落としている明らかなものはありますか?
前もって感謝します。
技術的には、Powershell から直接ではなく、Exchange 管理シェルからこれを実行していますが、それは問題ではないと思います