Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

감사합니다.

Powershell : Invoke-Command 정리(Powershell Ver 6) 본문

Microsoft/Powershell

Powershell : Invoke-Command 정리(Powershell Ver 6)

springjunny 2018. 1. 12. 17:31

로컬 혹은 원격 컴퓨터에 명령을 실행하기 위해 Powershell에서 지원하는 Invoke-Command

다양한 시나리오에서 사용이 가능하다!


1. 스크립트 실행

PS C:\> Invoke-Command -FilePath c:\scripts\test.ps1 -ComputerName Server01

로컬 컴퓨터에 저장되어 있는 'test.p1'스크립트를 원격 컴퓨터 'Server01'에서 실행할 수 있다.


2. 원격 컴퓨터에서 명령어 실행

PS C:\> Invoke-Command -ComputerName server01 -Credential domain01\user01 -ScriptBlock {Get-Process}

domain01\user01 사용자의 계정으로 'Server01'에서 'Get-Process'의 결과를 확인할 수 있다.


3. 지속적인 연결에서 명령어 실행

PS C:\> $s = New-PSSession -ComputerName Server02 -Credential Domain01\User01 PS C:\> Invoke-Command -Session $s -ScriptBlock {Get-Process}


4. 세션의 데이터를 공유하기

PS C:\> Invoke-Command -ComputerName Server02 -ScriptBlock {$p = Get-Process PowerShell} PS C:\> Invoke-Command -ComputerName Server02 -ScriptBlock {$p.VirtualMemorySize} PS C:\> PS C:\> $s = New-PSSession -ComputerName Server02 PS C:\> Invoke-Command -Session $s -ScriptBlock {$p = Get-Process PowerShell} PS C:\> Invoke-Command -Session $s -ScriptBlock {$p.VirtualMemorySize} 17930240


5. 지역 변수에 저장된 명령어 실행

PS C:\> $command = { Get-EventLog -log "Windows PowerShell" | where {$_.Message -like "*certificate*"} } PS C:\> Invoke-Command -ComputerName S1, S2 -ScriptBlock $command


6. 다수의 컴퓨터에 명령어 실행

PS C:\> Invoke-Command -ComputerName Server01, Server02, TST-0143, localhost -ConfigurationName MySession.PowerShell

-ScriptBlock {Get-EventLog "Windows PowerShell"}


7. 다수의 컴퓨터 버전 가져오기

PS C:\> $version = Invoke-Command -ComputerName (Get-Content Machines.txt) -ScriptBlock {(Get-Host).Version}


8. 백그라운드 작업 실행

PS C:\> $s = New-PSSession -ComputerName Server01, Server02 PS C:\> Invoke-Command -Session $s -ScriptBlock {Get-EventLog system} -AsJob Id Name State HasMoreData Location Command --- ---- ----- ----- ----------- --------------- 1 Job1 Running True Server01,Server02 Get-EventLog system PS C:\> $j = Get-Job PS C:\> $j | Format-List -Property * HasMoreData : True StatusMessage : Location : Server01,Server02 Command : Get-EventLog system JobStateInfo : Running Finished : System.Threading.ManualResetEvent InstanceId : e124bb59-8cb2-498b-a0d2-2e07d4e030ca Id : 1 Name : Job1 ChildJobs : {Job2, Job3} Output : {} Error : {} Progress : {} Verbose : {} Debug : {} Warning : {} StateChanged : PS C:\> $results = $j | Receive-Job


9. 로컬 지역 변수를 전달

PS C:\> $MWFO_Log = "Microsoft-Windows-Forwarding/Operational" PS C:\> Invoke-Command -ComputerName Server01 -ScriptBlock {Get-EventLog -LogName $Using:MWFO_Log -Newest 10}


10. 텍스트 파일에 저장된 컴퓨터에 명령어 실행

S C:\> Invoke-Command -ComputerName (Get-Content Servers.txt) -FilePath C:\Scripts\Sample.ps1 -ArgumentList Process, Service


11. uri 사용하기

PS C:\> $LiveCred = Get-Credential PS C:\> Invoke-Command -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.exchangelabs.com/PowerShell

-Credential $LiveCred -Authentication Basic -ScriptBlock {Set-Mailbox Dan -DisplayName "Dan Park"}



12. 원격 세션에서 파일 공유에 접근하기

PS C:\> Enable-WSManCredSSP -Delegate Server02 PS C:\> Connect-WSMan Server02 PS C:\> Set-Item WSMan:\Server02*\Service\Auth\CredSSP -Value $True PS C:\> $s = New-PSSession Server02 PS C:\> Invoke-Command -Session $s -ScriptBlock {Get-Item \\Net03\Scripts\LogFiles.ps1} -Authentication CredSSP -Credential Domain01\Admin01


13. 많은 원격 컴퓨터에서 스크립트 실행하기

PS C:\> Invoke-Command -ComputerName (Get-Content Servers.txt) -InDisconnectedSession -FilePath \\Scripts\Public\ConfigInventory.ps1

-SessionOption @{OutputBufferingMode="Drop";IdleTimeout=43200000}