您好,登錄后才能下訂單哦!
Windows 遠(yuǎn)程管理 (WinRM) 是 WS-Management 協(xié)議的 Microsoft 實(shí)現(xiàn)。該協(xié)議是基于簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議 (SOAP) 的、防火墻友好的標(biāo)準(zhǔn)協(xié)議,使來(lái)自不同供應(yīng)商的硬件和操作系統(tǒng)能夠互操作。WS-Management 協(xié)議由硬件和軟件制造商群體開(kāi)發(fā),作為一種公共標(biāo)準(zhǔn),可用于與實(shí)現(xiàn)該協(xié)議的任何計(jì)算機(jī)設(shè)備遠(yuǎn)程交換管理數(shù)據(jù)。
使用PowerShell對(duì)服務(wù)器遠(yuǎn)程管理,要在遠(yuǎn)程服務(wù)器上啟用WinRM。
一、知識(shí)儲(chǔ)備:
1、WinRM相關(guān)操作
開(kāi)啟WinRM服務(wù):
Enable-PSRemoting –Force
阻止本地計(jì)算機(jī)接收遠(yuǎn)程命令(不會(huì)停止WinRM服務(wù)):
Disable-psremoting –Force
查看WinRM服務(wù)監(jiān)聽(tīng)信息:
winrm enumerate winrm/config/Listener
WinRM2.0默認(rèn)端口5985(HTTP端口)或5986(HTTPS端口)。
刪除WinRM HTTP偵聽(tīng):
winrm delete winrm/config/listener?Address=*+Transport=HTTP
重新建立HTTP偵聽(tīng):
winrm create winrm/config/listener?Address=*+Transport=HTTP
WinRM服務(wù)更改監(jiān)聽(tīng)端口:
set-item -force wsman:\localhost\listener\listener*\port 5985
查看WinRM的配置:
winrm get winrm/config
查看端口監(jiān)聽(tīng)狀態(tài):
netstat -nao | findstr "5985"
2、PowerShell腳本保存憑據(jù)方法
使用Get-Credential命令來(lái)交互式輸入憑據(jù)(用戶名+密碼),可以先將憑據(jù)保存到一個(gè)變量中,如:
$cred = get-credential
$cred的對(duì)象類型名稱為:System.Management.Automation.PSCredential,其中的Password和UserName都是其屬性,所以可以新建一個(gè)該類型的對(duì)象。在此處需要注意的是Password類型為SecureString,UserName類型為String,所以需要將明文的Password轉(zhuǎn)換為安全字符串,可以使用ConvertTo-SecureString命令。
非交互式保存憑據(jù)代碼示例:
$account = "administrator" $password = '123456' $secpwd = convertto-securestring $password -asplaintext -force $cred = new-object System.Management.Automation.PSCredential -argumentlist $account,$secpwd
3、Invoke-Command
Invoke-Command在本地和遠(yuǎn)程計(jì)算機(jī)上運(yùn)行命令,并從命令返回所有輸出,包括錯(cuò)誤。使用一個(gè)Invoke-Command命令,可以在多臺(tái)計(jì)算機(jī)上運(yùn)行命令。部分參數(shù)介紹:
-Port <int>
指定遠(yuǎn)程計(jì)算機(jī)上用于此命令的網(wǎng)絡(luò)端口。用于WinRM默認(rèn)監(jiān)聽(tīng)端口被更改的情況下,指定新的端口。
-ComputerName <string[]>
指定運(yùn)行此命令的計(jì)算機(jī)。默認(rèn)值為本地計(jì)算機(jī)。
使用 ComputerName 參數(shù)時(shí),Windows PowerShell 會(huì)創(chuàng)建一個(gè)臨時(shí)連接,此連接僅用于運(yùn)行指定的命令,之后將關(guān)閉。如果需要持續(xù)性連接,請(qǐng)使用 Session 參數(shù)。
在一個(gè)逗號(hào)分隔列表中鍵入一臺(tái)或多臺(tái)計(jì)算機(jī)的 NETBIOS 名稱、IP 地址或完全限定的域名。要指定本地計(jì)算機(jī),請(qǐng)鍵入計(jì)算機(jī)名稱、“l(fā)ocalhost”或句點(diǎn) (.)。
若要在 ComputerName 參數(shù)的值中使用 IP 地址,命令必須包括 Credential 參數(shù)。另外,必須為計(jì)算機(jī)配置 HTTPS 傳輸,或者必須在本地計(jì)算機(jī)上的 WinRM TrustedHosts 列表中包含遠(yuǎn)程計(jì)算機(jī)的 IP 地址。
-Session <PSSession[]>
在指定的 Windows PowerShell 會(huì)話 (PSSession) 中運(yùn)行此命令。
通過(guò)創(chuàng)建 PSSession,Windows PowerShell 可以建立與遠(yuǎn)程計(jì)算機(jī)的持續(xù)性連接。
-Credential <PSCredential>
指定有權(quán)執(zhí)行此操作的用戶帳戶。默認(rèn)值為當(dāng)前用戶。
-command/-ScriptBlock <scriptblock>
指定要運(yùn)行的命令。用大括號(hào) ({ }) 括起命令以形成腳本塊。
-FilePath <string>
在一臺(tái)或多臺(tái)遠(yuǎn)程計(jì)算機(jī)上運(yùn)行指定的本地腳本。
-AsJob
在遠(yuǎn)程計(jì)算機(jī)上將命令作為后臺(tái)作業(yè)運(yùn)行。使用此參數(shù)可運(yùn)行需要較長(zhǎng)時(shí)間才能完成的命令。
使用 AsJob 時(shí),此命令返回代表作業(yè)的對(duì)象,然后顯示命令提示符。要管理作業(yè),請(qǐng)使用 Job cmdlet。要獲取作業(yè)結(jié)果,請(qǐng)使用 Receive-Job。
-ThrottleLimit <int>
指定為運(yùn)行此命令可建立的并發(fā)連接的最大數(shù)目。如果省略此參數(shù)或輸入 0 值,則使用默認(rèn)值 32。
4、PSSession
PSSession即Windows PowerShell會(huì)話。當(dāng)你需要與遠(yuǎn)程計(jì)算機(jī)的持續(xù)連接時(shí),則使用PSSession。PSSession相關(guān)命令:
Enter-PSSession
啟動(dòng)與遠(yuǎn)程計(jì)算機(jī)間的交互式會(huì)話。
New-PSSession
創(chuàng)建PSSession,并返回一個(gè)表示PSSession的對(duì)象。你可以將對(duì)象保存在變量中。
Get-PSSession
獲取當(dāng)前會(huì)話中創(chuàng)建的PSSession。Get-PSSession返回與New-PSSession返回的對(duì)象相同類型的對(duì)象。
Remove-PSSession
刪除 PSSession 并釋放其正在使用的資源。
5、將計(jì)算機(jī)名稱添加到TrustedHosts列表
若要將所有計(jì)算機(jī)添加到受信任主機(jī)列表,請(qǐng)使用以下命令 :
set-item wsman:localhost\client\trustedhosts -Force -value *
還可以使用通配符 (*) 將特定域中的所有計(jì)算機(jī)添加到受信任主機(jī)列表。
例如,以下命令將Fabrikam域中的所有計(jì)算機(jī)添加到受信任主機(jī)列表。
set-item wsman:localhost\client\trustedhosts *.fabrikam.com
若要將特定計(jì)算機(jī)的 IP 地址添加到受信任主機(jī)列表,請(qǐng)使用以下命令格式(IP支持通配符*):
set-item wsman:\localhost\Client\TrustedHosts -value "<IP Address>[,<IP Address>]"
若要查看受信任主機(jī)列表,請(qǐng)使用以下命令:
get-item wsman:\localhost\Client\TrustedHosts
二、遠(yuǎn)程操作常見(jiàn)場(chǎng)景
場(chǎng)景一:遠(yuǎn)程交互式會(huì)話
這個(gè)場(chǎng)景一般用于手動(dòng)進(jìn)行遠(yuǎn)程操作,輸入命令,查看結(jié)果。方法很簡(jiǎn)單。進(jìn)入交互式會(huì)話的命令是Enter-PSSession,退出時(shí)鍵入Exit-PSSession或者exit都可以。遠(yuǎn)程交互式操作期間,輸入的命令在遠(yuǎn)程計(jì)算機(jī)上運(yùn)行,就像直接在遠(yuǎn)程計(jì)算機(jī)上輸入并執(zhí)行這些命令一樣。期間所定義的變量和命令的執(zhí)行結(jié)果在退出交互式會(huì)話之后不再可用。
場(chǎng)景一例子: # 用戶輸入憑據(jù)(用戶名+密碼) $cred=get-Credential # 建立遠(yuǎn)程交互式會(huì)話 Enter-PSSession -computername 192.168.21.1 -Credential $cred
場(chǎng)景二:腳本塊、腳本文件的一次性執(zhí)行
這種場(chǎng)景,是在本地計(jì)算機(jī)與遠(yuǎn)程計(jì)算機(jī)上建立一個(gè)臨時(shí)會(huì)話。將腳本塊或者腳本文件的內(nèi)容發(fā)送到遠(yuǎn)程計(jì)算機(jī)執(zhí)行,并將結(jié)果發(fā)回本地計(jì)算機(jī)。這種方法執(zhí)行效率很高,是PowerShell推薦的執(zhí)行遠(yuǎn)程命令的方法。除非需要在會(huì)話中共享數(shù)據(jù),否則建議使用該方法。
場(chǎng)景二例子、 # 用戶輸入憑據(jù)(用戶名+密碼) $cred=get-Credential # 遠(yuǎn)程執(zhí)行命令 invoke-command -computername 192.168.21.1 -Credential $cred -command {dir C:/} invoke-command -computername 192.168.21.1 -Credential $cred -ScriptBlock {dir c:\} # 遠(yuǎn)程執(zhí)行腳本 echo "dir c:\" > dirDriveC.ps1 invoke-command -computername 192.168.21.1 -Credential $cred -FilePath .\dirDriveC.ps1
場(chǎng)景二例子(多個(gè)遠(yuǎn)程主機(jī))、 # 用戶輸入憑據(jù)(用戶名+密碼) $cred=get-Credential # 對(duì)多個(gè)遠(yuǎn)程主機(jī)批量執(zhí)行命令 invoke-command -computername 192.168.21.1,192.168.21.4,192.168.21.7 -Credential $cred -ScriptBlock {dir c:\} # 設(shè)置并發(fā)連接數(shù)設(shè)置為1的情況 invoke-command -computername 192.168.21.1,192.168.21.4,192.168.21.7 -Credential $cred -ThrottleLimit 1 -ScriptBlock {dir c:\}
場(chǎng)景三:腳本塊、腳本文件在命名會(huì)話中執(zhí)行
1、定義會(huì)話: 請(qǐng)使用new-pssession命令定義會(huì)話,如$session1 = new-pssession -computername server1。(如果必要請(qǐng)使用Credential參數(shù)。)
2、在會(huì)話中遠(yuǎn)程執(zhí)行腳本(或者腳本文件): 請(qǐng)使用Invoke-Command命令執(zhí)行遠(yuǎn)程腳本,如Invoke-Command -Session $session1 -ScriptBlock {dir c:\}或者Invoke-Command -Session $session1 -FilePath .\dirDriveC.ps1
3、獲得結(jié)果: 可以將執(zhí)行結(jié)果賦于變量,如$sub = Invoke-Command -Session $session1 -ScriptBlock {dir c:\}或者$sub = Invoke-Command -Session $session1 -FilePath .\dirDriveC.ps1
后續(xù)命令可參照步驟2或者3繼續(xù)執(zhí)行,所有執(zhí)行的命令就好像在同一個(gè)上下文中執(zhí)行一樣。
場(chǎng)景三例子、 # 用戶輸入憑據(jù)(用戶名+密碼) $cred=get-Credential # 創(chuàng)建PSSession,并賦值給變量 $session1 = new-pssession -computername 192.168.21.1 -Credential $cred # 遠(yuǎn)程執(zhí)行命令(持續(xù)性) Invoke-Command -Session $session1 -ScriptBlock {$a="hello world"} Invoke-Command -Session $session1 -ScriptBlock {$a}
場(chǎng)景三例子(多個(gè)遠(yuǎn)程主機(jī))、 # 用戶輸入憑據(jù)(用戶名+密碼) $cred=get-Credential # 對(duì)多個(gè)遠(yuǎn)程主機(jī)創(chuàng)建PSSession,并賦值給變量 $session_many = new-pssession -computername 192.168.21.1,192.168.21.4,192.168.21.7 -Credential $cred # 對(duì)多個(gè)遠(yuǎn)程主機(jī)批量執(zhí)行命令 Invoke-Command -Session $session_many -ThrottleLimit 1 -ScriptBlock {dir c:\}
場(chǎng)景三例子(腳本方式)、 $account = "administrator" $password = '123456' # 把密碼轉(zhuǎn)換為SecureString $secpwd = convertto-securestring $password -asplaintext -force # 新建PSCredential對(duì)象 $cred = new-object System.Management.Automation.PSCredential -argumentlist $account,$secpwd # 遠(yuǎn)程主機(jī)列表賦值給變量 [string[]]$computername="192.168.21.1","192.168.21.4","192.168.21.7" # 創(chuàng)建PSSession $session_many = new-pssession -computername $computername -Credential $cred # 批量遠(yuǎn)程執(zhí)行命令 Invoke-Command -Session $session_many -ThrottleLimit 1 -ScriptBlock {dir c:\}
參考資料:
https://technet.microsoft.com/zh-cn/library/dd347578.aspx
https://technet.microsoft.com/zh-cn/library/hh847839.aspx
https://technet.microsoft.com/zh-cn/library/dd347642.aspx
http://www.cnblogs.com/ceachy/archive/2013/02/20/PowerShell_Remoting.html
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。