PowerShell 遠端執行命令

2021-10-10 19:28:49 字數 4171 閱讀 9084

最近在做一些自動化的測試工作,在**實現的過程中需要遠端啟動/關閉一些服務或者測試機。

我首先想到的是建立乙個website,通過**對一些服務進行操作,但是這樣感覺比較重,而且重啟一些例如iis或者計算機的時候不是很安全。還有一種方式就是執行ssh命令或者bat命令。由於伺服器是windows的,我就考慮是否可以使用powershell來實現。

微軟提供了乙個乙個叫ws-management的協議,可以實現裝置遠端交換資料的方法。本身自帶了乙個叫 (windows remote management service,簡稱 winrm) 的服務。我們可以通過powershell來實現遠端控制。

在host機器上我們首先檢查下winrm服務是否安裝成功:

該服務預設情況下是開啟的,如果沒有開啟可以到services列表裡面進行開啟,或者在powershell裡面開啟:

enable-psremoting –force
這個時候如果你的客戶端和服務端的計算機都在工作域中,那麼這時候的配置基本上是可以使用了。 如果不在域裡面,則還需要做以下額外的操作:

在client端執行以下命令, 將伺服器機器新增到信任列表裡:

set-item wsman:\localhost\client\trustedhosts *

restart-service winrm

測試以下,服務通訊是否成功: 

看到類似上面的資訊,就表示兩個計算機之間的通訊是通暢的。

如果出現以下錯誤:

根據提示去server端執行 winrm quickconfig,然後一路預設即可:

然後我們就可以嘗試使用命令遠端連線計算機了:

enter-pssession -computername 10.112.20.84 -credential administrator
在彈出的登入框中輸入host的密碼就可以登入遠端計算機了:

但是這種方式需要手工輸入密碼,不是很方便,我們只需要將這些使用者名稱密碼引數化就可以實驗指令碼化登入了:

$username = '*********'

$pwd = '********'

$pass = convertto-securestring -asplaintext $pwd -force

$cred = new-object system.management.automation.pscredential -argumentlist $username,$pass

invoke-command -computername 10.112.20.84 -scriptblock -credential $cred

powershell主要採用web services for mangement(ws-man)進行遠端處理,ws-man完全基於http(預設5985)或者https(預設5986)進行工作,這樣保證在需要的情況下,能夠輕易透過防火牆進行作業(因為每種協議都使用唯一的埠進行通訊)。微軟對ws-man的實現是windows remote mangement(winrm)。winrm是乙個基於soap的後台服務。

powershell連線常規遠端主機

1. 在遠端機器上以administrator角色開啟powershell執行以下命令,啟動允許遠端連線

enable-psremoting
2. 在客戶機器 (本地) 執行以下命令,將遠端機器ip位址加入可信主機列表

set-item wsman:\localhost\client\trustedhosts -value
3. 在客戶機器 (本地) 輸入以下命令, 在彈出對話方塊輸入密碼,以互動的方式連線遠端主機

enter-pssession -computername -credential
4. powershell遠端命令的基本使用見官方文件: running remote commands

使用powershell以http方式連線azure虛擬機器

1. 同以上常規連線遠端主機設定

1. 若虛擬機器安全受網路完全組(network security group)管控,設定允許5985入棧

2. 若虛擬機器繫結了負載均衡器(load balancer),為5985埠設定入站nat規則(inbound nat rules), 或者為了隱藏實際埠,為5985埠執行狀況探測(probes)和負載均衡規則(load balancing rules)

使用powershell以https方式連線azure虛擬機器

1. 同以上常規連線遠端主機設定

2. 開啟azure遠端虛擬機器(windows)防火牆設定,設定允許5986入棧

3. 若虛擬機器安全受網路完全組(network security group)管控,設定允許5986入棧

4. 若虛擬機器繫結了負載均衡器(load balancer),為5986埠設定入站nat規則(inbound nat rules),或者為了隱藏實際埠,為5986埠執行狀況探測(probes)和負載均衡規則(load balancing rules)

5. 需使用以下命令連線遠端主機, 詳細引數設定見: enter-pssession

# 設定會話,忽略遠端機器的ssl證書驗證

# 另一種引數形式

enter-pssession -computername -port 5986 -usessl -credential -sessionoption $sessionoption

從powershell 6開始,除了ws-man之外,遠端處理技術還可以基於ssh協議。在最新的windows 10和windows server 2019中,可以使用openssh連線遠端機器,詳細文件參見:powershell remoting over ssh and openssh in windows, 另外,openssh客戶端在最新的windows 10和windows server 2019中已預設安裝,在設定\應用\可選功能列表下可以找到(見下圖), 可以通過上方的新增功能按鈕安裝openssh伺服器。

更多參考:

1. enable powershell remoting on azure rm virtual machines

2. copy files to azure vm using powershell remoting

3. secrets of powershell remoting

3. 遠端管理winrm,enter-pssession (enable-psremoting = set-wsmanquickconfig = winrm quickconfig)

4. powershell 遠端執行任務

5. windows開啟winrm服務 

標籤: powershell

如何遠端執行PowerShell命令

首先,被remote執行powershell的windows必須已經join了domain.其次,該windows的powershell必須開啟對remote command的接受,執行下面的命令來做到 enable psremoting示例如下 好了,可以到另一台機器上去執行命令玩玩看啦.執行en...

Mac OS X 遠端執行osascript命令

上面的命令可以讓每乙個處於登入狀態的電腦自動登入到login name使用者。這樣管理員就可以對每個電腦進行操作了.下面是更加清晰的乙個指令碼版本 然而實際使用中會問題 1.遠端計算機根本不執行上面的操作 這個問題一般是由於被管理的電腦沒有設定為准許執行ui指令碼,所以要開啟它。可以通過兩種方式 a...

Powershell 遠端操作

1.檢視winrm是否開啟 get service winrm 2.enable psremoting force 3.進行信任設定 set item wsman localhost client trustedhosts restart service winrm 4.測試遠端連線 test ws...