溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

windows服務(wù)器遠(yuǎn)程執(zhí)行命令(PowerShell+WinRM)

發(fā)布時(shí)間:2020-06-28 17:36:09 來(lái)源:網(wǎng)絡(luò) 閱讀:21986 作者:張斌_青島 欄目:建站服務(wù)器

    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"

windows服務(wù)器遠(yuǎn)程執(zhí)行命令(PowerShell+WinRM)

2、PowerShell腳本保存憑據(jù)方法

    使用Get-Credential命令來(lái)交互式輸入憑據(jù)(用戶名+密碼),可以先將憑據(jù)保存到一個(gè)變量中,如:

$cred = get-credential

windows服務(wù)器遠(yuǎn)程執(zhí)行命令(PowerShell+WinRM)

    $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

windows服務(wù)器遠(yuǎn)程執(zhí)行命令(PowerShell+WinRM)


二、遠(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


windows服務(wù)器遠(yuǎn)程執(zhí)行命令(PowerShell+WinRM)


場(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

windows服務(wù)器遠(yuǎn)程執(zhí)行命令(PowerShell+WinRM)

場(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}

windows服務(wù)器遠(yuǎn)程執(zhí)行命令(PowerShell+WinRM)

場(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


向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI