감사합니다.
Powershell : Invoke-Command 정리(Powershell Ver 6) 본문
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}
'Microsoft > Powershell' 카테고리의 다른 글
Windows Update 자동화하기 - Part 3 (0) | 2018.09.29 |
---|---|
Windows Update 자동화하기 - Part 2 (1) | 2018.09.29 |
Windows Update 자동화하기 - Part 1 (0) | 2018.09.29 |
Powershell : 도메인 가입하기 (0) | 2018.03.22 |
Powershell - WSUS Cleanup powershell (0) | 2018.01.02 |
Powershell - 스케줄러에 파워쉘 스크립트 등록하기 - 변수 사용 (0) | 2017.12.07 |
Powershell - 스케줄러에 파워쉘 스크립트 등록하기 (0) | 2017.12.01 |
Powershell - Event Log Parsing (0) | 2017.11.30 |