一種windows遠程自動化解決方案(一)

一種windows遠程自動化解決方案

今天的主角是powershell

windows有兩種命令行方式,一種是cmd,一種是powershell,cmd也就是我們常用的命令提示符,powershell有著和linux類似的操作命令,如ls、cat、wget等,也有它自己的包管理方式,對標linux,同時也兼容cmd的命令,方便windows、linux運維及開發(fā)人員。

windows10、windows11、windows server 2016及以上系統(tǒng)已標配powershell,其中windows11自帶windows終端(windows terminal), 可以通過此自動打開powershell;windows10可以小娜(win+q)搜索或通過運行程序執(zhí)行powershell運行powershell。

一般,windows之間的遠程都是通過mstsc(遠程桌面連接)操作,是一種界面話的操作,但是這并不能很好的完成一些自動化的操作,下面將基于powershell實現(xiàn)windows的遠程自動化操作。

環(huán)境配置

服務端

服務端是一臺windows10電腦。

管理員身份打開powershell, 通常第一次運行ps腳本,windows禁止了運行腳本的權限,使用以下命令,授予權限,過程中可能會出現(xiàn)一些提示,按提示同意(輸入A)即可。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

依次輸入以下命令,如圖

winrm quickconfig
Get-Service WinRM
Enable-PSRemoting

[圖片上傳失敗...(image-e212b2-1650100048661)]

客戶端

客戶端是一臺windows11的電腦。

同理,如果第一次運行ps腳本,以管理員身份運行以下命令進行授權。

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

服務端配置好之后,可以通過以下命令測試是否可以聯(lián)通遠程環(huán)境,出現(xiàn)以下類似環(huán)境則成功。

[圖片上傳失敗...(image-6c385c-1650100048662)]

依次運行以下命令,信任即將要遠程的主機,像是rdp、ssh遠程時的首次信任一樣,*是信任所有主機,也可以指定ip、域名。

Set-Item WSMan:\localhost\Client\TrustedHosts "*" -Force
# Set-Item WSMan:\localhost\Client\TrustedHosts "192.168.1.10" -Force
Get-ChildItem WSMan::localhost\client

[圖片上傳失敗...(image-15f8b5-1650100048662)]

1 powershell遠程登錄

在powershell里執(zhí)行命令

Enter-PSSession <pcName> -Credential (Get-Credential)

其中,<pcName>可以是主機名、ip地址、域名。

如:

Enter-PSSession 192.168.1.10 -Credential (Get-Credential)

執(zhí)行后,會提示如圖輸入賬號密碼,輸入遠程服務器的用戶名、密碼即可

[圖片上傳失敗...(image-fbf9c7-1650100048662)]

登錄成功后,會有如下界面

[圖片上傳失敗...(image-a192f0-1650100048662)]

執(zhí)行一個python腳本server_python_script1.py,如下圖,可以看到,成功執(zhí)行了一個遠程環(huán)境上的腳本。

from datetime import datetime
now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print('time:',now)

[圖片上傳失敗...(image-270442-1650100048662)]

但執(zhí)行python, node, cmd等交互式命令是不行的, 可能是因為不允許交互式環(huán)境。

2 自動化執(zhí)行腳本

以上的交互式方案,需要我們手動輸入賬號密碼登錄,并且需要手動輸入命令去執(zhí)行,可以像linux的ssh方案一樣,通過命令行去遠程操作windows,可以簡化操作流程。

當然,也有可以通過命令,自動完成登錄,并執(zhí)行命令的方式。

在某文件夾下,新建一個powershell腳本文件login_server.ps1,其中,<pcName>, <userName> <userPwd>是你需要遠程主機的相關信息。

$serverName="<pcName>"
$uerName="<userName>"
$userPwd=ConvertTo-SecureString "<userPwd>" -AsPlainText -Force
$cred=New-Object System.Management.Automation.PSCredential($uerName,$userPwd);
Enter-PSSession -ComputerName $serverName -Credential $cred

然后,右鍵使用powershell運行該文件

[圖片上傳失敗...(image-25f79d-1650100048662)]

或者,在powershell里進入腳本所在當前文件夾下,運行該腳本

.\login_server.ps1

執(zhí)行后,自動進入到遠程環(huán)境,無需輸入賬號密碼。

[圖片上傳失敗...(image-2ff5ea-1650100048662)]

如何可以自動執(zhí)行一個腳本呢?

新建一個我們需要在遠程服務器上執(zhí)行的腳本command.ps1

cd E:\pw_server
md onedir
tree > content.txt
ls

做了一個在服務端E:\pw_server文件夾新建一個文件夾、寫入一個文件的示例腳本。

新建一個登錄并執(zhí)行該命令的腳本文件execute_command.ps1。

$serverName="<pcName>"
$uerName="<userName>"
$userPwd=ConvertTo-SecureString "<userPwd>" -AsPlainText -Force
$cred=New-Object System.Management.Automation.PSCredential($uerName,$userPwd);
#Enter-PSSession -ComputerName $serverName -Credential $cred
invoke-command -computername $serverName -Credential $cred -FilePath .\command.ps1

其中,invoke-command是將本地腳本上傳到遠程環(huán)境并執(zhí)行的關鍵。

執(zhí)行一下execute_command.ps1,可以看到,command.ps1命令在遠程環(huán)境中成功被執(zhí)行。

[圖片上傳失敗...(image-1e7f92-1650100048662)]

總結

windows powershell是一種不錯的能夠實現(xiàn)windows遠程自動化的一種方式。由于powershell命令方式上有一些linux的影子,也能夠兼容大部分cmd命令,所以靈活性很強,可以很好的解決windows遠程上的一些痛點。

參考文獻

[1] https://docs.microsoft.com/zh-cn/previous-versions/technet-magazine/gg981683(v=msdn.10)

[2] https://docs.microsoft.com/zh-cn/powershell/

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容