遠程操做

在linux中遠程執行操做咱們會用到ssh,在windows中遠程操做須要依賴一個服務「WinRM」,只須要在接收遠程命令的機器上配置WinRM服務便可(默認是開啓的)。html


 要使用遠程操做以前,首先確認WinRM服務是否開啓linux

若WinRM服務時關閉狀態,必須使用管理員身份運行命令行工具,才能夠執行如下操做windows

以上都是查看或開啓本機的遠程服務,若要查看被遠程的主機是否開啓遠程操做服務,應使用「Test-WSMan」命令緩存

 還差最後一步,也是很重要的一步,在被遠程機器上和遠程機上添加信任後纔可執行遠程操做,記住使用管理員權限纔可生效,當執行第一條命令時,會彈出一個對話框,選擇「YES」,第一題命令的做用是在本機添加運行任何機器遠程操做,第二個命令重啓WinRM遠程服務,從新讀取配置後纔會生效。服務器

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

以上準備工做算是作完了,接下來先遠程鏈接到一臺服務器,而後作一些簡單的操做,與ssh相似。ssh

 

 1、通常操做

PS C:> Enter-PSSession -ComputerName hostname -Credential username

  hostname是要鏈接的服務器名稱,username是登陸服務器的用戶名。工具

  此時會彈出一個對話框,輸入密碼後便可登陸成功,控制檯會變成如下內容,表面已經鏈接到了遠程服務器,此時就能夠操做遠程服務器了。學習

[hostname]: PS C:\Users\username\Documents>           #可以使用exit退出當前遠程鏈接

  使用上面的方法存在一些問題,那就是須要交互輸入密碼,若要將遠程操做寫入腳本,實現起來就會很是的困難,接下來介紹一種免交互的方法。spa

  首先須要建立遠程鏈接的認證信息命令行

$username = "\Administrator"
$password = "123456"
$pw = ConvertTo-SecureString -AsPlainText $Password -Force
$cred = New-Object System.Management.Automation.PSCredential -ArgumentList $username,$pw

  此時$cred就是鏈接遠程服務器的認證,接下使用「Invoke-Command」命令便可實現遠程操做,-ScriptBlock後面跟的就是要在遠程服務器執行的命令。

Invoke-Command -ComputerName hostname -ScriptBlock{ ls c:\} -Credential $cred

  若須要執行腳本,能夠用下-FilePath參數,須要注意的是a.ps1(做用是建立c:\a\b目錄)在本機的當前目錄下,並不是是遠程機器上的。

PS C:\> Invoke-Command -ComputerName hostname -FilePath .\a.ps1 -Credential $cred


    Directory: C:\a


Mode                LastWriteTime         Length Name                                         PSComputerName                              
----                -------------         ------ ----                                         --------------                              
d-----       12/11/2018   6:24 PM                b                                            hostname                                
  Invoke-Command執行的命令中含有本地變量
PS C:\> $a = "a"

PS C:\> $b = ".txt"

PS C:\> Invoke-Command -ComputerName hostname -ScriptBlock{ param($a,$b) echo "1" > c:\a\$a$b} -ArgumentList $a,$b -Credential $Cred

  上面的命令做用是:在遠程主機上「c:\a」目錄下將「1」覆蓋到a.txt文件中。

   批量操做多臺服務器,(前提條件是天天服務器的用戶名密碼一致)

$username = "\Administrator"
$password = "123456"
$pw = ConvertTo-SecureString -AsPlainText $Password -Force
$cred = New-Object System.Management.Automation.PSCredential -ArgumentList $username,$pw

  如今遠程操做其餘服務器

Invoke-Command -ComputerName db1 -ScriptBlock{ ls c:\ } -Credential $cred
Invoke-Command -ComputerName db2 -ScriptBlock{ ls c:\ } -Credential $cred
Invoke-Command -ComputerName db3 -ScriptBlock{ ls c:\ } -Credential $cred

  都可以執行成功,不帶-Credential $cred認證參數,照樣能夠執行成功,我估計的緣由是Invoke-Command執行成功後,將Credential的認證信息緩存到了某個地方,這是再次執行時就去找上次使用的認證去鏈接,只是估計!。

Invoke-Command -ComputerName db4 -ScriptBlock{ ls c:\ } 
Invoke-Command -ComputerName db5 -ScriptBlock{ ls c:\ } 

 

 2、遠程拷貝文件

  將本機c:\a文件拷貝到目標主機查下c:\b,參數-Recurse是遞歸拷貝,針對目錄拷貝使用,單個文件不須要。

$Session = new-PSSession -ComputerName hostname
Copy-Item -Path c:\a -Destination C:\b -ToSession $Session -Recurse

  將目標主機上的某個文件拷貝到本地,使用的參數是 FromSession

$Session = new-PSSession -ComputerName hostname
Copy-Item -Path c:\a -Destination C:\b -FromSession $Session -Recurse

 

  3、遠程後臺執行任務

   有些時候,咱們須要並行執行某些任務來提升執行的效率,在本地有Start-job命令能夠實現,Invoke-Command命令一樣提供了這樣的功能,那就是使用-AsJob參數,能夠將須要遠程執行的命令放在遠程機的後臺執行。

 Invoke-Command -ComputerName "hostname" -AsJob { sleep 100 }  -Credential $Cred

  這條命令就能夠在遠程機上後臺執行一個「sleep 100」的命令。可是執行這條命令實際須要的時間要比100s長。

以上從三個方面學習了invoke-command命令,遠程執行、遠程拷貝文件、遠程後臺執行任務,學會以上3個用法常規操做就不會存在什麼問題了。

 

 

參考:https://www.cnblogs.com/sparkdev/p/7200004.html

相關文章
相關標籤/搜索