PowerShell应用之-Get-WmiObject -Class Win32_Service
2011-10-21 07:19
465 查看
开始
引用Windows PowerShell官方的说明,Windows PowerShell 是专为系统管理员设计的新 Windows 命令行 shell。Windows PowerShell 包括交互式提示和脚本环境,两者既可以独立使用也可以组合使用。在我学习PowerShell过程中,发觉学习PowerShell的门槛不高,学起来不费劲,要是有DOTNET或其它编程语言基础,那么感觉就更容易了。因为,PowerShell最基本的功能命令就是cmdlet(command-let),cmdlet标准格式是“动词-名词”,如.Get-Help ,Get-Host,New-Service等。这让人感觉很顺口,不会花太多的时间去记住复杂的命令。下面,从一个实际的例子来描述PowerShell的应用。下面的例子,你将了解到命令:
Get-WmiObject
Format-Table
Where-Objec
前不久,有寫過一篇《通过批处理脚本启动/停止SQL Server服务》,今天寫出一篇通過PowerShell腳本實現相同的功能,而且使用比批處理腳本更為方便。通過PowerShell腳本實現,最大的優點是,針對控制網絡電腦上的SQL Server服務,沒必要通過遠端桌面連線工具,就可以實現。
先製作一個CSV格式文件『SQLSeverList.csv』,描述各個PC的SQL Server服務內容,數據項要求包含:PC ,ServerNr ,SQLServer, Agent ,FullTextSearch
『SQLSeverList.csv』存儲文件內容如下:
通過這個『SQLSeverList.csv』文件列表就可以找到對應的管理SQL Server服務。接下來通過PowerShell腳本,從文件『SQLSeverList.csv』篩選出要啟動的SQL Server服務。再通過PowerShell中的命令 Get-WmiObject -Class Win32_Service 獲取服務對象,然後調用服務對象Win32_Service中的方法StartService() 、 StopService() 啟動或停止服務。
如果是連接遠程PC,可以採用類似命令:
Get-WmiObject -Class Win32_Service –ComputerName <string[]> – Credential <PSCredential>
完整代碼:
演示:
現在要啟動遠程PC的SQL Server實例『VM\SQL2005DE4』,包含『VM\SQL2005DE4』的3個服務:
$User 這裡使用的是與帳戶”HQ\Andy”,而且這個帳戶具有管理電腦VM162的權限功能。
點擊Powershell_ise介面上的三角形執行腳本按鈕。
這裡會彈出一個Windows登錄認證窗口,輸入我們的帳號密碼,點擊確認按鈕繼續。
從狀態欄就會看到正在執行的信息提示,根據實際情況運行時間長短的不同,最後我們會收到是否處理完成的提示:
如果服務已經在運行,我們就看到服務正在運行的信息提示:
小結
PowerShell腳本代碼,看起來是很容易的,而且功能還不錯,它是建立在 .NET (CLR) 和 .NET Framework 上,而且可接受和傳回 .NET 對象。在安裝SQL Server 2008中就附帶有PowerShell 1.0。目前最新版本是PowerShell 2.0.帶有Powershell_ise工具,使用起來更便捷。如果你經常涉及到管理Windows系統或SQL Server 服務器,那麼學習瞭解PowerShell是不錯的選擇。
引用Windows PowerShell官方的说明,Windows PowerShell 是专为系统管理员设计的新 Windows 命令行 shell。Windows PowerShell 包括交互式提示和脚本环境,两者既可以独立使用也可以组合使用。在我学习PowerShell过程中,发觉学习PowerShell的门槛不高,学起来不费劲,要是有DOTNET或其它编程语言基础,那么感觉就更容易了。因为,PowerShell最基本的功能命令就是cmdlet(command-let),cmdlet标准格式是“动词-名词”,如.Get-Help ,Get-Host,New-Service等。这让人感觉很顺口,不会花太多的时间去记住复杂的命令。下面,从一个实际的例子来描述PowerShell的应用。下面的例子,你将了解到命令:
Get-WmiObject
Format-Table
Where-Objec
前不久,有寫過一篇《通过批处理脚本启动/停止SQL Server服务》,今天寫出一篇通過PowerShell腳本實現相同的功能,而且使用比批處理腳本更為方便。通過PowerShell腳本實現,最大的優點是,針對控制網絡電腦上的SQL Server服務,沒必要通過遠端桌面連線工具,就可以實現。
先製作一個CSV格式文件『SQLSeverList.csv』,描述各個PC的SQL Server服務內容,數據項要求包含:PC ,ServerNr ,SQLServer, Agent ,FullTextSearch
『SQLSeverList.csv』存儲文件內容如下:
[code]#SQL Server服務列表,本機使用"."來描述 PC,ServerNr,SQLServer,Agent,FullTextSearch VM162,1,MSSQL$SQL2005DE1,SQLAgent$SQL2005DE1,msftesql$SQL2005DE1 VM162,2,MSSQL$SQL2005DE2,SQLAgent$SQL2005DE2,msftesql$SQL2005DE2 … … PC20,1,MSSQL$SQL01,SQLAgent$SQL01,msftesql$SQL01 PC20,2,MSSQL$SQL02,SQLAgent$SQL02,msftesql$SQL02 … … .,2,MSSQL$SQL2005DE2,SQLAgent$SQL2005DE2,msftesql$SQL2005DE2 .,3,MSSQL$SQL2005DE3,SQLAgent$SQL2005DE3,msftesql$SQL2005DE3 .,4,MSSQL$TEST,SQLAgent$TEST,msftesql$TEST
通過這個『SQLSeverList.csv』文件列表就可以找到對應的管理SQL Server服務。接下來通過PowerShell腳本,從文件『SQLSeverList.csv』篩選出要啟動的SQL Server服務。再通過PowerShell中的命令 Get-WmiObject -Class Win32_Service 獲取服務對象,然後調用服務對象Win32_Service中的方法StartService() 、 StopService() 啟動或停止服務。
如果是連接遠程PC,可以採用類似命令:
Get-WmiObject -Class Win32_Service –ComputerName <string[]> – Credential <PSCredential>
完整代碼:
#===============配置部份=========================== $User='HQ\Andy'; $CsvFile='E:\Stop&StartSQLServer\SQLSeverList.csv' #==============可輸入部份(開始)==================== $PC="VM162" #本機使用"."來描述,非本機使用電腦名稱 $ServerNr=4 #SQL Server實例編號,來源于SQLSeverList.csv文件 $ActionType=0 # 1: 開啟服務 ,0: 停止服務 #==============可輸入部份(結束)==================== <# “===可控制的服務列表: ” Import-Csv -Path $CsvFile | Format-Table -AutoSize -Wrap #> try { $ServiceStr=Import-Csv -Path $CsvFile | Where-Object -FilterScript {($_.PC -eq $PC) -And ($_.ServerNr -eq $ServerNr)} if ($PC -ne ".") #本機 { $Credential_Login=Get-Credential -Credential $User $Service_Agent=Get-WmiObject -Class Win32_Service -ComputerName $PC -Credential $Credential_Login | Where-Object -FilterScript {$_.Name -eq $ServiceStr.Agent} $Service_SQLServer=Get-WmiObject -Class Win32_Service -ComputerName $PC -Credential $Credential_Login | Where-Object -FilterScript {$_.Name -eq $ServiceStr.SQLServer} $Service_FullTextSearch=Get-WmiObject -Class Win32_Service -ComputerName $PC -Credential $Credential_Login | Where-Object -FilterScript {$_.Name -eq $ServiceStr.FullTextSearch} } Else #網絡 { $Service_Agent=Get-WmiObject -Class Win32_Service | Where-Object -FilterScript {$_.Name -eq $ServiceStr.Agent} $Service_SQLServer=Get-WmiObject -Class Win32_Service | Where-Object -FilterScript {$_.Name -eq $ServiceStr.SQLServer} $Service_FullTextSearch=Get-WmiObject -Class Win32_Service | Where-Object -FilterScript {$_.Name -eq $ServiceStr.FullTextSearch} } $Running="Running" $Stopped="Stopped" If ($ActionType -eq 1) #Start Service { if ($Service_SQLServer.State -eq $Running) {$Service_SQLServer.Name +" 正在運行"} Else {$Result=$Service_SQLServer.StartService()} if ($Service_Agent.State -eq $Running) {$Service_Agent.Name +" 正在運行"} Else {$Result=$Service_Agent.StartService()} if ($Service_FullTextSearch.State -eq $Running) {$Service_FullTextSearch.Name +" 正在運行"} Else {$Result=$Service_FullTextSearch.StartService()} } Else #Stop Service { if ($Service_FullTextSearch.State -eq $Stopped) {$Service_FullTextSearch.Name +" 已停止."} Else {$Result=$Service_FullTextSearch.StopService()} if ($Service_Agent.State -eq $Stopped) {$Service_Agent.Name +" 已停止."} Else {$Result=$Service_Agent.StopService()} if ($Service_SQLServer.State -eq $Stopped) {$Service_SQLServer.Name +" 已停止."} Else {$Result=$Service_SQLServer.StopService()} } "命令處理OK!" } Catch { Write-Warning "執行腳本過程發生錯誤" Write-Error $_ #輸出當前錯誤內容 }
演示:
現在要啟動遠程PC的SQL Server實例『VM\SQL2005DE4』,包含『VM\SQL2005DE4』的3個服務:
MSSQL$SQL2005DE4 | SQLAgent$SQL2005DE4 | msftesql$SQL2005DE4 |
$User 這裡使用的是與帳戶”HQ\Andy”,而且這個帳戶具有管理電腦VM162的權限功能。
點擊Powershell_ise介面上的三角形執行腳本按鈕。
這裡會彈出一個Windows登錄認證窗口,輸入我們的帳號密碼,點擊確認按鈕繼續。
從狀態欄就會看到正在執行的信息提示,根據實際情況運行時間長短的不同,最後我們會收到是否處理完成的提示:
如果服務已經在運行,我們就看到服務正在運行的信息提示:
小結
PowerShell腳本代碼,看起來是很容易的,而且功能還不錯,它是建立在 .NET (CLR) 和 .NET Framework 上,而且可接受和傳回 .NET 對象。在安裝SQL Server 2008中就附帶有PowerShell 1.0。目前最新版本是PowerShell 2.0.帶有Powershell_ise工具,使用起來更便捷。如果你經常涉及到管理Windows系統或SQL Server 服務器,那麼學習瞭解PowerShell是不錯的選擇。
相关文章推荐
- WMI--Windows API--IWbemClassObject.Get
- From an inner class, "this" points to the inner object. How do I get a "this" pointer to the enclosing object?
- object_getClassName swift得到类名
- The ServiceClass object does not implement the required method in the following form
- object_getClassName swift得到类名
- GetClass与RegisterClass的应用一例
- Thread.currentThread().getContextClassLoader() 与 ObjectInstance.class.getClassLoader() 的区别
- Silverlight 4 + RIA Services之商业应用系列----7 使用RIA Service Class Library
- 回顾JavaSE(1)-API、Object(hashCode、getClass)
- webservice: Could not initialize Service NoSuchMethodException getPortClassMap()
- 那xxx.class.getName()為什麼能這樣寫?? 看了半天都快搞不清楚到底在程式中的example到底是class ? object ? 還是instance了
- ManagementObject 参数 WMI 一些参数(Win32_NetworkAdapterConfiguration)
- 知也atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException v2 q31无涯 - I
- 关于Object.class.getResourceAsStream方法读取文件的使用
- JAVA中instanceof和getClass的应用
- Java反射学习 getClass()函数应用
- ManagementObject 参数 WMI 一些参数(Win32_NetworkAdapterConfiguration)
- The ServiceClass object does not implement the required method in the following form: OMElement...
- atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException v2 q31
- Object中的getClass()返回的是当前运行的类