因為CI/CD的需要,故開始研究了PowerShell…
設定目標主機
啟用遠端服務
Enable-PSRemoting
啟用Windows遠端層,跳出的訊息"Y"過去就好
winrm quickconfig
設定呼叫端主機
設定 TrustedHosts,"*"按照自己的需求可以更改為IP或是HostName
set-item wsman:\localhost\Client\TrustedHosts -value *
準備放在目標主機的執行檔
簡單準備了一個 echo,以及可以接受一個傳入參數
準備呼叫端主機的執行檔
傳入三個參數,方別是遠端的帳號、密碼、IP(或HostName)
<
$account = $args[0]
$password = $args[1]
$serverName = $args[2]
<
$pw = convertto-securestring -AsPlainText -Force -String $password
<
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $account,$pw
<
$session = New-PSSession -ComputerName $serverName -Credential $cred
<
$filepath='C:\tools\remote.ps1'
<
Invoke-Command -Session $session -scriptblock {& $args[0] $args[1]} -ArgumentList $filepath,"test"
執行
從呼叫端執行
./test.ps1 pstest testaccount password
理論上就能拿到執行結果了
若出現了類似下面的錯誤,有可能是上面的設定未完整,或是目標主機的 Port 5985 未接受連入
New-PSSession : [10.10.xx.xx] 連線到遠端伺服器 10.10.xx.xx 失敗,傳回下列錯誤
訊息: WinRM 用戶端無法處理該要求。若驗證配置與 Kerberos 不同,或是用戶端電腦沒
有加入網域, 則必須使用 HTTPS 傳輸,或是將目標電腦新增到 TrustedHosts 組態設定
中。 請使用 winrm.cmd 來設定 TrustedHosts。請注意,可能不會驗證在 TrustedHosts
清單中的電腦。 您可以執行下列命令,以取得相關的詳細資訊: winrm help config。 如
需詳細資訊,請參閱 about_Remote_Troubleshooting 說明主題。
先前完全沒接觸過PowerShell,整個過程真是新鮮又有趣(才怪)
筆記一下半個下午的踩雷過程
設定目標主機
啟用遠端服務
啟用Windows遠端層,跳出的訊息"Y"過去就好
設定呼叫端主機
設定 TrustedHosts,"*"按照自己的需求可以更改為IP或是HostName
set-item wsman:\localhost\Client\TrustedHosts -value *
準備放在目標主機的執行檔
簡單準備了一個 echo,以及可以接受一個傳入參數
準備呼叫端主機的執行檔
傳入三個參數,方別是遠端的帳號、密碼、IP(或HostName)
<# 取得傳入參數 #> $account = $args[0] $password = $args[1] $serverName = $args[2] <# 將明碼轉為 SecureString(有安全疑慮,建議改用其他方式處理密碼) #> $pw = convertto-securestring -AsPlainText -Force -String $password <# 建立憑證 #> $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $account,$pw <# 連線遠端的session #> $session = New-PSSession -ComputerName $serverName -Credential $cred <# 遠端要執行的執行檔路徑 #> $filepath='C:\tools\remote.ps1' <# 執行遠端主機的執行檔,並且傳入一個參數"test" #> Invoke-Command -Session $session -scriptblock {& $args[0] $args[1]} -ArgumentList $filepath,"test"
執行
從呼叫端執行
理論上就能拿到執行結果了
若出現了類似下面的錯誤,有可能是上面的設定未完整,或是目標主機的 Port 5985 未接受連入
先前完全沒接觸過PowerShell,整個過程真是新鮮又有趣(才怪)
筆記一下半個下午的踩雷過程