PowerShell 遠程執行命令


PowerShell 遠程執行命令

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

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

工具

  微軟提供了一個一個叫WS-Management的協議,可以實現設備遠程交換數據的方法。本身自帶了一個叫 (Windows Remote Management service,簡稱 WinRM) 的服務。我們可以通過PowerShell來實現遠程控制。

Host:

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

  

Get-Service WinRM

 

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

  Enable-PSRemoting –Force

 

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

Client:

  在Client端執行以下命令, 將服務器機器添加到信任列表里:

Set-Item wsman:\localhost\client\trustedhosts *
Restart-Service WinRM

 

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

  

Test-WsMan xxx.xxx.xxx.xxx

 

 

 

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

  如果出現以下錯誤:

  

  根據提示去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 { iisreset } -credential $Cred

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM