## 為什麼選擇 PowerShell 因特殊需求需要開發由 Windows 發動 ssh 至各 Linux 執行各種 cmd,並獲得結果,最好的方式是使用 PowerShell 設定各 Linux 資訊並一鍵完成。 ## 什麼是 PowerShell PowerShell 是跨平台的工作自動化解決方案,由命令列殼層、指令碼語言,以及組態管理架構所組成。 PowerShell 會在 Windows、Linux 和 macOS 上執行。 ## 解決思路 1. 需要填入各 Linux 相關資訊 2. 需要良好的擴充方案 3. 需要依照各設備不同做出區別 4. 需要一鍵完成 5. 可以在各個位置執行,且結果相同 ## 資料夾結構 workspace └ cmd └ cmd01.txt └ cmd01.txt └ output └ YYYY-MM-DD └ main.ps1 └ putty.exe ### main.ps1 ``` # 將 putty 包入此資料夾中,方便任何位置都能執行 $puttyPath = ".\putty.exe" # 為執行資料夾位置 $workspace = "." # 建立當下的 output 資料夾並以日期資料夾做區分 # Create output directory $date = & Get-Date -Format "yyyy-MM-dd" new-item -itemtype directory -force -path "$workspace\output\$date" # 主機資訊: # hostname - 主機名稱 # ipAddr - 主機位置 # username - 用戶名稱 # password - 用戶密碼 # cmdType - 欲執行的 Linux cmd 檔案 # Server list $server = @{ hostname = "Server01"; ipAddr = "192.168.0.100"; username = ""; password = ""; cmdType = "cmd01" }, @{ hostname = "Server02"; ipAddr = "192.168.0.101"; username = ""; password = ""; cmdType = "cmd02" } # 使用 putty 做 ssh 後執行 Linux 指令,再將 session log 存於 output 中 # Do cmd foreach ( $node in $server ) { $hostname = $node.hostname $ipAddr = $node.ipAddr $cmdType = $node.cmdType & $puttyPath -ssh $username@$ipAddr -pw $password -m "$workspace\cmd\$cmdType.txt" -sessionlog "$workspace\output\$date\$hostname.log" # 同時對多台 server 做 ssh 可能會造成某些網路塞車或其他問題 # 所以讓各 server 的 ssh 間隔 2 秒 Start-Sleep -s 2 } ``` ### cmd01.txt ``` echo "This is Server01" ``` ### cmd02.txt ``` echo "This is Server02" ``` ## 執行方式 開啟資料夾後對 main.ps1 點右鍵,點擊 `用 PowerShell 執行` 就能在 output 裡看到 Server01.log 和 Server02.log,內容就是 cmd01.txt 與 cmd02.txt 的執行結果。 ## 最終結果 此思路完成填入各 server 的資訊與做出區別,且能擴充各 server 所需的 cmd,在不同的資料夾中都能執行,且點右鍵執行後會自動完成。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up