Computer 이름을 순차적으로 불러와서 처리하기


여러 대의 원격에 위치한 컴퓨터에 접속하여 명령어를 수행하고자 할 때 -ComputerName pc1,pc2,pc3를 사용한다.그런데 이렇게 할 때 pc1,pc2,pc3로 순차적으로 처리되지 않는다.
만약, 컴퓨터 이름을 순처적으로 처리하고자 하면 ForEach-Object를 사용하면 된다.

1. 원격 컴퓨터 이름을 확인하는 일반적인 방법(비순차적 처리)
1) 컴퓨터 이름 직접 입력하기
Invoke-Command -cn “pc1″,”pc2″,”pc3” {hostname}
2) 컴퓨터 이름 목록 파일 불러 오기
Invoke-Command -cn (Get-Content c:\computers.txt) {hostname}

2. 원격 컴퓨터 이름을 순차적으로 가져와서 처리하기
1) 컴퓨터 이름 직접 입력하기
“pc1″,”pc2″,”pc3” | Foreach-Object { Invoke-Command -cn $_ {hostname} }

2) 컴퓨터 이름 목록 파일 불러 오기
Get-Content c:\servers.txt | Foreach-Object { Invoke-Command -cn $_ {hostname} }

다양한 방법으로 PowerShell Script 파일 실행하기


1.로컬 컴퓨터에 저장된 .ps1 파일 실행하기
– PowerShell console에서 파일 경로를 입력하면 된다
c:\lab\script.ps1

– 로컬 컴퓨터에 저장된 .ps1을 원격 서버(server1)에서 실행하도록 하기
Invoke-Command -ComputerName server1 -FilePath c:\lab\script.ps1

2.원격 컴퓨터에 저장된 .ps1 파일 실행하기(Invoke-Expression)
– File Server에 저장된 .ps1 파일 실행하기
Invoke-Expression -Command \\instructor\lab\script.ps1

– Web Server에 저장된 .ps1 파일 실행하기
Invoke-Expression -Command (wget http://instructor/script.ps1).content
(** wget은 Invoke-WebRequest의 Alias이다)

– Domain Controller에 저장된 .ps1 파일 실행하기
Group Policy 설정을 통하여 .ps1 파일을 다운로드하여 자동으로 실행한다

– 원격 컴퓨터(Server1)에 저장된 .ps1 파일을 로컬에서 실행하기
Invoke-Command -ComputerName Server1  -ScriptBlock {c:\Lab\CopyAll.ps1}

3. 예약 작업(Scheduled Tasks)으로 실행한다.
제어판에 있는 예약 작업에서 PowerShell의 실행 파일의 전체 경로를 사용해야 한다.
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -Command c:\lab\script.ps1

4.로컬 컴퓨터에 저장된 .bat 파일 실행하기
batch 파일을 사용하여 사용자가 해당 파일을 더블 클릭으로 실행할 수 있는 장점이 있다. 보안성보다는 편의성을 강조한 것이다(script.bat 파일은 아래와 같이 만든다)
@echo off
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -Command c:\lab\script.ps1

여기서 로컬 컴퓨터에 저장된 파일 뿐 아니라 원격에 있는 파일 서버에 저장된 파일도 실행할 수 있다는것을 기억해둔다. (-Command \\FileServer\myjob\script.ps1 으로 경로를 잡아도 된다)