標籤:
【TechTarget中國原創】 作為一名系統管理員,最常見的任務之一就是學會管理Windows服務,這是保證Windows伺服器和用戶端正常啟動並執行重要內容。 許多作業系統和應用程式都依賴於這些服務。 Microsoft Management Console視窗是我們非常熟悉的一款Windows服務,通過該服務,管理員可以在本地或者遠端電腦上操控服務。但是,一時間還不能改變幾十台甚至幾百台機器。 此時,PowerShell就派上用場了。 PowerShell應用幾個本地Cmdlet來管理Windows服務。 Get-Command * Service* -Module Microsoft.PowerShell.Management 圖1. 幾個本地Cmdlets管理員可以使用該命令管理Windows服務 這些Cmdlets可以在任何一個服務上執行許多命令。 Get-Service是一種非常常見的Cmdlets。最基礎的層面,無需任何參數,Get-Service便可以在本機電腦上顯示所有服務,但是,大多數管理員需要通過遠端電腦來查詢服務。使用ComputerName參數便可以滿足以上需求。 Get-Service –ComputerName CLIENT1 圖2. 沒有使用任何參數,Get-Service Cmdlets在一台本機電腦上顯示了一些服務內容 使用Get-Service可以顯示出遠程用戶端上所有服務內容。 如何處理服務裝置 如果你想要查看多個電腦上的服務怎麼辦?也許,你曾將收到過許多一系列文本形式的電腦名稱,這些電腦名稱通過以下幾種途徑得到的:Active Directory、一些商務應用程式、客戶管理系統以及定製資料庫。PowerShell中有一款叫做Get-Content 的Cmdlet,通過使用Foreach迴圈方法,它可以讀取每一個電腦名稱。這樣,我們運行Get- Service就可以擷取到這些電腦名稱了。 Get-Content C:\Computers.txt | foreach {Get-Service –ComputerName $_} 使用PowerShell更改電腦服務 讓我們一起對這些服務進行一些深入研究,並做出一些更改。通常的做法是,如果運行出錯或者應用發生變化,那麼就需要重新啟動服務。例如,我們曾重啟過列表中所陳列的電腦上Application Layer Gateway(簡稱ALG)服務。指定用於尋找的特定服務,然後,將該服務引入 Restart-Service中,實現這種操作問題不大。 Get-Content C:\Computers.txt | foreach {Get-Service –ComputerName $_ -Name ALG | Restart-Service } 如果服務出現停止啟動並執行情況,Restart-Service將會自動重啟該服務。 Set-Service Cmdlet進一步掌控Windows服務 Set-Service是另外一種Cmdlet,對Windows服務許多屬性進行了更改,例如,服務啟動模式的配置方式。我們可以這樣定義,當作業系統啟動時,無論服務是否啟動都可以手動啟動或者禁用。Set-Service中有一個StartupType參數,可以更改其屬性。 下面的這段命令語句設定了ALG服務的啟動類型,使其無法在電腦C盤.txt檔案中運行。 Get-Content C:\Computers.txt | foreach {Get-Service –ComputerName $_ -Name ALG | Set-Service –StartupType Disabled } 合并PowerShell和WMI擷取更多功能 如下有幾個錯誤的服務命令,這些命令既沒有提供足夠的資訊,也沒有成功的修改目標屬性。我們可以使用 Windows Management Instrumentation (簡稱WMI)解決以上問題。WMI中包含Win32_Service,可以通過使用Get-CimInstance或者Get-WmiObject實現叫用作業。 Get-CimInstance –ComputerName client1 –ClassName Win32_Service 圖3. 集合使用PowerShell和WMI Win32_Service可以擷取到電腦上更多關於Windows服務的資訊 當管理員想要通過WMI查詢服務時,使用帶星號標記的Property參數,就可以擷取到更多關於服務的資訊了。 Get-CimInstance –ComputerName CLIENT1 –ClassName Win32_Service –Property * 圖4. Win32_Service中的Property參數可以提供更多關於Windows服務的細節資訊 深入細節 要想更深入研究錯誤的服務命令,你可以參考WMI服務執行個體對象。 Get-WmiObject –ComputerName CLIENT1 –Class Win32_Service | Get-Member –MemberType Method 圖5. WMI服務執行個體對象使用的測試方法 利用調用技術,可以在服務物件中執行以上這些方法。 Get-WmiObject –ComputerName CLIENT1 –Class Win32_Service –Filter "Name=‘ALG‘" | foreach {$_.StopService()} 通過以上的例子可以看出來,我通過使用Filter參數就可以將ALG服務單獨選擇出來。我將該服務串連到ForEach-Object中,並調用StopService,反過來,可以停止服務運行。
TechTarget中國原創內容,原文連結: http://www.searchsv.com.cn/showcontent_92334.htm
© TechTarget中國:http://www.techtarget.com.cn
如何使用PowerShell管理Windows服務