Windows-Server-2008-R2

Exchange 2010 Powershell 命令?

  • September 13, 2012
  1. 我想知道是否有人知道 Exchange 2010 的 PowerShell 命令,該命令列出了特定郵箱無權訪問的郵箱和/或使用者。

我們有一個系統帳戶,我們需要授予對大多數(但不是全部)使用者郵箱的完全訪問權限。我們希望每個月執行一個命令,該命令將告訴我們此帳戶對哪些使用者沒有完全權限,因此我們可以在必要時更正該問題並將其導出到 csv。 2. 我想要一個列出使用者以及對每個使用者擁有完全權限的命令。我發現了這一點,但它返回的結果似乎並不完全準確(當我將 csv 與 EMC 進行比較時,EMC 上的一些帳戶會顯示其他 3 個使用者可以訪問他們的郵箱,但 CSV 只報告 1 個使用者)。

Get-Mailbox | Get-MailboxPermission | where {$_.user.tostring() -ne “NT AUTHORITY\SELF” -and $_.IsInherited -eq $false} | Select Identity,User,@{Name=’Access Rights’;Expression={[string]::join(‘, ‘, $_.AccessRights)}} | Export-Csv -NoTypeInformation mailboxpermissions.csv

#1 - 我自己寫了這個(修改過)。它不是一個簡單的單行,因為它在幾個嵌套循環中評估每個郵箱上每個權限條目的值。不幸的是,我想不出一種進一步簡化它的方法(可能是由於我缺乏 powershell 方面的專業知識)。它基本上獲取所有郵箱並將它們儲存在一個變數中,然後它獲取每個郵箱的權限,根據特定條件評估每個權限條目(郵箱上具有 FullAccess 條目的系統使用者)。如果任何權限條目都滿足該條件,它會設置 $ access variable to “True”. After it has gone through all permission entries on the mailbox it takes a look at the $ 訪問變數,如果它仍然是 False 它會將郵箱添加到 csv 文件中(雖然不是真正的 csv,因為文件中每行只有 1 個條目)。

Import-Module C:\Temp\Exchange.psm1
$csv = "C:\Temp\systemuser.csv"
$user = "<system user>"
$mailboxes = Get-Mailbox *
ForEach ($mailbox in $mailboxes) {
   $access = "False"
   $perms = $mailbox | Get-MailboxPermission
   ForEach ($item in $perms) {
       if ($item.User -like $user -and $item.AccessRights -like "*FullAccess*") {
       $access = "True"        
       }
   }
   if ($access -eq "False") {
       ac $csv "$($mailbox)"
   }
}

#2 - 大部分都是我自己寫的,但是很難將 AccessRights 屬性轉換為字元串,以便將其導出到 csv,所以我用Google搜尋並找到了你在問題中的腳本中找到的同一篇文章,它工作正常。我認為 csv 所說的和 EMC 所說的之間的差異是文章中的腳本過濾掉了繼承的權限。我在下面對其進行了修改,以不過濾掉繼承的權限,並在輸出中包含“IsInherited”屬性,這樣您就可以判斷它是否是顯式的。

Get-MailboxPermission * | ? {$_.user -notlike "NT AUTHORITY\SELF"} | Select Identity ,User,@{Name='Access Rights';Expression={[string]::join(', ', $_.AccessRights)}},IsInherited | Export-csv -NoTypeInformation c:\temp\mailboxpermissions.csv

引用自:https://serverfault.com/questions/418300