2013-11-15 40 views
0

我想將所有交換用戶的ProhibitSendReceiveQuota設置爲UNLIMITED。這是我到目前爲止:交換:在對象上設置ProhibitSendReceiveQuota

$mailbox = Get-Mailbox 
foreach($m in $mailbox){ 
    Set-Mailbox -ProhibitSendReceiveQuota -UNLIMITED 
} 

但它是要求身份,當我運行這個。

任何想法?

我也想遍歷當我吃完了,輸出具有ProhibitSendReceiveQuota -gt 1MB

感謝所有用戶。

回答

3

您可以將管道身份malibox直接從獲得的郵箱設置的郵箱:

Get-Mailbox | Set-Mailbox -ProhibitSendReceiveQuota UNLIMITED 
0

的問題是,你不告訴設置郵箱其郵箱進行修改。您正在運行一個的foreach對象環路設置$ M給每個郵箱裏面的命令,但你不使用$ M內循環(這違背了一個的foreach對象循環的目的)。

的底線是-Identity對於設置郵箱命令必需的參數,而你不指定它 - 這就是爲什麼會被提示您。改變你的命令是:

Set-Mailbox $m -ProhibitSendReceiveQuota unlimited 
  • -Identity是隱含的,因爲它是第一個位置參數。
  • 請注意unlimited之前缺少-,這會使PowerShell將其解析爲一個單獨的(而不存在的)參數,而不是-ProhibitSendReceiveQuota的參數。

有許多屬性,可以用來作爲一個參數到-Identity參數。看看這方面的文檔參數,它具有有效身份屬性的列表(也請注意Required? true):

-Identity <MailboxIdParameter> 
    The Identity parameter specifies the mailbox. You can use the following values: 
    * ADObjectID 
    * Alias 
    * Distinguished name (DN) 
    * Domain\Account 
    * GUID 
    * LegacyExchangeDN 
    * SmtpAddress 
    * User principal name (UPN) 

    Required?     true 
    Position?     1 
    Default value 
    Accept pipeline input?  True 
    Accept wildcard characters? false 

然而,這個名單是不完整的。奇怪的是,標識屬性不包括在內,但它肯定是有效的。 名稱顯示名稱也工作。當然,你可以只提供一個郵箱對象作爲標識參數,就像我上面的命令(這是因爲郵箱對象的默認屬性是DisplayName)。

因此,Set-Mailbox $_.Identity [...],Set-Mailbox $_.DistinguishedName [...]等都將工作得很好。如果您正在調用已經縮小到特定郵箱屬性的循環或管道中的cmdlet,這非常有用。

在mjolinor的回答管道工程,因爲你可以在文檔中看到,-Identity參數接受管道輸入,所以在結果集中獲取郵箱的每個對象設置爲-Identity論據。還要注意,對於大型數據集,管道更高效。

說到大數據集,請注意,默認情況下,Get-Mailbox僅返回前1000個結果。所以,除非你有一個小的組織少於1,000個郵箱,你想這樣做:

foreach ($m in (Get-Mailbox -ResultSize unlimited) { 
    Set-Mailbox -ProhibitSendReceiveQuota unlimited 
} 

或管道版本

Get-Mailbox -ResultSize unlimited | Set-Mailbox -ProhibitSendReceiveQuota unlimited 
0

其實,我覺得,如果你想爲你的整個組織做到這一點最佳實踐方法是使用Get-MailboxDatabase | Set-MailboxDatabase -ProhibitSendReceiveQuota命令而不是get-mailbox運行此操作。將限額放在數據庫上會創建一個默認值,然後您可以通過將其設置在郵箱對象上進行覆蓋。我認爲這只是一個最佳實踐方案。這也可能會更快執行。