於在多部電腦上設定節流功能的 Windows PowerShell 指令碼
此範例示範針對陣列中的多部電腦使用 Windows PowerShell 指令碼來設定服務節流預設值的必要步驟。您可以輕鬆修改此範例,來變更任何其他 AppFabric 可存取的設定。
維護有多部電腦的伺服器陣列時,分別連線到每部電腦,然後變更單一設定,過程既冗長又乏味。當陣列中有許多電腦,或必須經常變更設定時,此問題就會變得特別嚴重。隨著 Microsoft AppFabric 1.1 for Windows Server 持續性與監控功能的導入,您可以輕鬆地直接從資料庫擷取有關陣列內作用中電腦的資訊,然後使用該資訊在那些電腦上執行 Windows PowerShell 命令。
此範例顯示如何擷取陣列電腦的陣列資訊,以及如何在陣列內的所有作用中電腦上執行 Windows PowerShell Cmdlet。
此範例可搭配任何應用程式使用。我們建議通用 AppFabric 範例應用程式,它專為搭配 AppFabric 範例使用而建立。若要尋找此應用程式,請瀏覽至 [<samples>\SampleApplication\OrderApplication] 資料夾,其中 <samples> 是您安裝 AppFabric 範例的路徑。
注意
提供的範例僅適用於教學用途。請勿將範例用於生產環境,因為這些範例並未在生產環境中測試。Microsoft 不對這些範例提供技術支援。
必要條件
此範例可以在單一電腦上執行,以及在符合下列必要條件的多部電腦上執行。若要在單一電腦上執行此範例,您可以略過多部電腦的參考。
您必須在即將執行此範例的所有電腦上安裝 AppFabric,而且所有電腦必須針對持續性和/或監控功能使用通用資料庫。
為執行此範例所提供的指令碼,在要執行範例的電腦上,您需要擁有系統管理權限。根據您想要做的修改,您可能需要所有其他電腦的系統管理權限。
所有參與的電腦都必須加入單一網域,而且都必須安裝 Windows 遠端管理 (WinRM) 2.0。您可以在 WinRM 2.0 下載 (https://go.microsoft.com/fwlink/?LinkId=194424) (可能為英文網頁) 為舊版平台下載 WinRM 2.0 CTP3。您可以修改此範例,以在非網域環境中執行。關於「可否在單一電腦 (不在網域中) 上測試遠端處理功能?」,請參閱下列位址的<關於 Windows PowerShell 遠端處理功能的 FAQ>:about_Remote_FAQ (https://go.microsoft.com/fwlink/?LinkId=194425) (可能為英文網頁)。
必須針對 Windows PowerShell 啟用遠端執行功能。符合前兩項必要條件之後,您可以執行 Enable-PSRemoting -force 來啟用遠端處理功能。若要深入了解 Windows PowerShell 遠端處理功能,請輸入 help about_remote。
範例中的所有電腦都必須位於陣列內 (也就是說,必須在所有電腦上安裝相同的應用程式與服務)。此外,這些電腦必須至少向通用資料庫儲存一次持續性資料或報告一次監控資料。
SQL 用戶端連接性與 Windows PowerShell 的 SQL Server 嵌入式管理單元必須安裝在將執行此範例的主機上。
範例檔案
Get-ASActiveMachine.ps1 指令碼 (位於 Code 資料夾)
Readme 文件
設定並執行此範例
以系統管理員身分執行 Windows PowerShell 主機 (像是 Windows PowerShell 2.0 隨附的主控台)。如果您並未以內建帳戶 "Administrator" 的身分執行,執行主機時,請務必選取 [以系統管理員身分執行]。
注意
為執行此範例,您必須允許在電腦上執行未簽署的指令碼。下列步驟示範如何執行。
在主機中,執行此命令:Set-ExecutionPolicy Unrestricted。這樣可讓您執行未簽署的範例指令碼。完成使用範例之後,請務必還原此設定。如果您正在生產環境中評估執行類似指令碼,建議您改為簽署指令碼。您可以在 about_Signing (https://go.microsoft.com/fwlink/?LinkID=194426) (可能為英文網頁) 閱讀更多關於簽署指令碼的資訊。
移除此範例
- 若要移除此範例,請使用下列命令將執行原則還原為其先前等級或 Windows PowerShell 預設值:Set-ExecutionPolicy Default.
示範
此範例分成兩個部分。第一部分說明如何在一組電腦上執行任何 Cmdlet (以及特別是 AppFabric Cmdlet)。第二部分是指令碼 Cmdlet,用來取得陣列內作用中電腦的清單。之後,範例會顯示如何使用上述兩個部分。
遠端設定
若符合上述所有必要條件,就能輕鬆在遠端電腦上執行 Cmdlet。要使用的 Cmdlet 稱為 Invoke-Command,它接受兩個參數 (第一個參數是要在其上執行此 Cmdlet 的所有電腦的清單,另一個參數是要在那些電腦上執行的指令碼)。
重要
透過執行此範例的步驟,您可以在您選擇執行範例的電腦上,變更所有服務的預設「最大同時呼叫數目」值。這在生產環境中會有負面影響,可能會使得您的伺服器容易遭受拒絕服務 (DoS) 攻擊或拒絕合法呼叫者存取。您應該先備份系統,然後為您的環境選取適當的值,才在生產環境中執行下列步驟。如果您不確定 MaxConcurrentCalls 應該使用的值,請連絡軟體架構設計人員,或參閱 WCF 產品文件:MaxConcurrentCalls 屬性 (https://go.microsoft.com/fwlink/?LinkId=194427) (可能為英文網頁)。
例如,假設您想執行下列 AppFabric 命令:
Set-ASAppServiceThrottling -root -MaxConcurrentCalls 200
如果要在含有兩部電腦 (稱為 “Dublin001” 與 “Dublin002”) 的集合中執行命令,請輸入如下的命令:
Invoke-Command -ComputerName Dublin001,Dublin002 -ScriptBlock {Import-Module ApplicationServer; Set-ASAppServiceThrottling -root -MaxConcurrentCalls 200}
請注意,在指令碼區塊定義 (大括號之間的文字) 中,第一個命令是 Import-Module ApplicationServer。這樣可確保利用 Invoke-Command 建立的遠端環境擁有所有必要的 AppFabric Cmdlet。
作用中電腦的資料庫查詢
若要在陣列內的所有電腦上執行上述命令,您必須保有所有電腦的清單,然後用來當成引數提供給上述範例中的 ComputerName 參數。或者,您可以使用此範例中提供的指令碼 Cmdlet。
此指令碼 Cmdlet 稱為 Get-ASActiveMachine。它使用 Windows PowerShell 的 SQL Server 嵌入式管理單元,從 AppFabric 監控資料擷取作用中電腦,然後使用內建的 AppFabric Cmdlet 從持續性資料取得作用中電腦的清單。最後它會結合兩個結果集,然後將結果傳回給呼叫者。
若要安裝此 Cmdlet,請在任一 Windows PowerShell 主機 (像是 Windows PowerShell 2.0 隨附的主控台) 執行下列命令:
Import-Module <samples>\Samples\Management\MultiMachineConfiguration\Code\Get-ASActiveMachine.ps1
其中 <samples> 是您安裝 AppFabric 範例的路徑。
之後,您可以執行下列 Cmdlet 以傳回陣列內所有作用中電腦的清單:
Get-ASActiveMachine
注意
若 SQL server 並非在本機電腦上安裝為預設執行個體,或 AppFabric 監控資料庫的名稱不是 “ApplicationServerMonitoring”,請參閱下方所列 Cmdlet 接受的所有參數清單與參數使用方式。
傳回的清單看起來應該像這樣:
Dublin001
Dublin002
若要利用此 Cmdlet 結合多部電腦組態,請執行下列命令:
Invoke-Command -ComputerName (Get-ASActiveMachine) -ScriptBlock {Import-Module ApplicationServer; Set-ASAppServiceThrottling -root -MaxConcurrentCalls 200}
Get-ASActiveMachine 參數
-Server |
必要參數。使用 SQL Server Express 時,將此參數設定為 “<伺服器名稱>\SQLExpress”。使用 SQL Server Enterprise 時,將此參數設定為 “<伺服器名稱>”。 |
-Database |
必要參數。指定監控資料庫的字串。 |
-SiteName |
可省略的參數。字串篩選參數,會讓 Cmdlet 只傳回指定網站的作用中電腦。 |
-VirtualPath |
可省略的參數。字串篩選參數,會讓 Cmdlet 只傳回虛擬路徑的作用中電腦。此字串可與 -SiteName 參數搭配使用,來指定 Cmdlet 應該只傳回正在為特定服務執行負載平衡的電腦。 |
-ActiveSince |
可省略的參數。日期時間物件,可用來只篩選出特定期間內已儲存持續性資料或已報告監控資料的電腦。例如,若要傳回過去 24 小時的資料,請使用:Get-ASActiveMachine –ActiveSince (Get-Date).AddHours(-24). |
-ApplicationObject |
可省略的參數。Microsoft.ApplicationServer.Management.Data.ApplicationInfo 物件,可用來只篩選出已針對特定應用程式儲存持續性資料或報告監控資料的電腦。最適合用於管道處理功能案例,例如,Get-ASApplication –SiteName ‘Default Web Site’ –VirtualPath \OnboardingWorkflow | Get-ASActiveMachine。 |
其他資源
如需遠端執行 Windows PowerShell 指令碼的詳細資訊,請參閱 about_Remote (https://go.microsoft.com/fwlink/?LinkId=194428) (可能為英文網頁) 或在 Windows PowerShell 主機中輸入 help about_remote。
2012-03-05