2016-08-19 62 views
0

我在一個管理幾百臺服務器的團隊工作。我們每個人對大約100臺服務器承擔主要責任。我是團隊中的新成員,因此我在Outlook中制定了一個「MyServers」規則,它會發出特殊的聲音,並將電子郵件移動到文件夾「MyServers」中,當電子郵件以其中一個服務器名稱主題或身體。服務器來來往往,負責人偶爾會改變。我可以使用GUI來修改列表,但我想要做的是使用PowerShell根據來自我們的表上的SQL查詢的數據集來修改服務器列表,這些數據集屬於哪個列表。 (也可以在爲別人掩蓋時有所幫助使用PowerShell修改Outlook規則中的數組文本條件?

PowerShell - Managing an Outlook Mailbox with PowerShell, By Joe Leibowitz, March 2013這在理論上是可能的。該文章和帖子Hey, Scripting Guy! How Can I Tell Which Outlook Rules I Have Created? December 15, 2009 by ScriptingGuy1已經教會了我如何將Outlook文件讀入PowerShell來讀取和寫入。 Multiple Actions for one Outlook rule in Powershell後也有幫助。

我可以找到幾個創建規則的例子,主要圍繞電子郵件地址。正如我做了更多的研究(下圖),似乎我想修改'TextRuleCondition.Text',但我沒有找到任何示例代碼來讀取或修改單個現有規則的規則條件。

  1. Specifying Rule Conditions
  2. TextRuleCondition Object (Outlook)
  3. TextRuleCondition.Text Property (Outlook)

最優:我想轉到 「MyServers」 的規則,改變陣列,從它是一個新的數組從SQL表中獲取列表後,我將使用PowerShell進行構建。

##source https://blogs.technet.microsoft.com/heyscriptingguy/2009/12/15/hey-scripting-guy-how-can-i-tell-which-outlook-rules-i-have-created/ 
## Gets outlook rules on PC 
#Requires -version 2.0 
Add-Type -AssemblyName microsoft.office.interop.outlook 
$olFolders = 「Microsoft.Office.Interop.Outlook.OlDefaultFolders」 -as [type] 
$outlook = New-Object -ComObject outlook.application 
$namespace = $Outlook.GetNameSpace(「mapi」) 
$folder = $namespace.getDefaultFolder($olFolders::olFolderInbox) 
$rules = $outlook.session.DefaultStore.<Some code here gets TextRuleCondition.Text for just MyServers> 
$rules ## this displays the current value 
##More code inserts the array that I built earlier (not actually built, yet as I don't know what it should look like) 
$rules.Save() ## this saves the changes. 

到目前爲止我發現的一切都以編程方式從PowerShell創建了一個新的規則。沒有任何內容表明它是否或者不可能修改現有的規則。我的計劃「B」將讀取現有的「MyServers」規則,修改數組,並用新的規則覆蓋舊規則。這是有問題的,因爲它限制了選項,只能以編程方式創建一些條件和操作。

+0

您是否考慮過探索EWS託管API?我沒有示例代碼,但我已經使用它(在PowerShell中)非常成功地處理郵箱中的規則。 https://msdn.microsoft.com/en-us/library/office/dn481313%28v=exchg.150%29.aspx?f=255&MSPPError=-2147217396#bk_UpdateRulesEWSMA –

+0

@ChrisDent,沒有,現在看着它。首先想到的是我不確定我能從SQL中獲取數據,用PowerShell我應該能夠使用SQL獲取數據並將其操作到數組中,並將其保存到一個命令的Outlook中。 –

+0

無法以與Microsoft.Office.Interop.Outlook不同的方式從SQL中獲取EWS。無論你的命令或腳本能做什麼,建議只是爲改變規則提供一個潛在的更好的界面。 –

回答

1
#setup 
Add-Type -AssemblyName microsoft.office.interop.outlook 
$olFolders = 「Microsoft.Office.Interop.Outlook.OlDefaultFolders」 -as [type] 
$outlook = New-Object -ComObject outlook.application 
$namespace = $Outlook.GetNameSpace(「mapi」) 

#get all of the rules 
$rules = $outlook.Session.DefaultStore.GetRules() 

#get just the rule I care about 
$myRule = $rules | ? { $_.Name -eq 'My Awesome Rule' } 

#build my new array of text conditions 
$textValues = @('ServerA', 'NewServerB') 

#replace the existing value on my rule (this is assuming you are using BodyOrSubject, you can substitute Body, Subject, etc) 
$myRule.Conditions.BodyOrSubject.Text = $textValues 

#save all the rules 
$rules.save() 
+0

測試成功,謝謝。只修改一條規則的標準,該規則在更新後按預期工作。 –