PowerShell 원 격 작업 수행 방법 절차

Liux 에서 우 리 는 SSH 를 사용 하여 각종 원 격 작업 을 수행 할 수 있 습 니 다.마찬가지 로 windows 플랫폼 에서 우 리 는 PowerShell 로 비슷 한 능력 을 얻 을 수 있 습 니 다.본 고 는 PowerShell 로 원 격 조작 을 수행 하 는 기본 정 보 를 소개 합 니 다.SSH 원 격 조작 을 알 고 싶 은 학생 은'SSH 원 격 임무 수행'를 참고 하면 된다.
기초
MS 는 WS-Management 라 는 프로 토 콜 을 정 의 했 는데 이 프로 토 콜 은 컴퓨터 장치 의 원 격 교환 관리 데이터 에 공개 적 인 기준 을 제공 했다.윈도 플랫폼 에서 MS 는 윈도 원 격 관리 서비스(윈도 원 격 관리 서비스,WinRM 으로 약칭)를 통 해 WS-management 프로 토 콜 을 구현 했다.이것 이 바로 우리 가 PowerShell 을 통 해 원 격 조작 을 수행 할 수 있 는 기초 이다.왜냐하면 PowerShell 은 WinRM 서 비 스 를 통 해 원 격 조작 을 하 는 것 이기 때문이다.
WinRM 서비스 검사
저 희 는 아래 명령 을 통 해 WinRM 서비스의 상 태 를 볼 수 있 습 니 다.

Get-Service WinRM

서버 버 전의 윈도 시스템 은 기본적으로 WinRM 서 비 스 를 시작 하지만 일반 버 전의 시스템 은 기본적으로 이 서 비 스 를 시작 하지 않 았 다.다음은 이 서 비 스 를 올 바른 자세 로 시작 하 는 방법 을 소개 할 것 이다.
시스템 설정 원 격 명령 받 기
SSH 와 유사 한 클 라 이언 트/서버 구 조 는 원 격 명령 을 받 은 호스트 에 WinRM 서 비 스 를 설정 하면 됩 니 다.사실은 WinRM 서비스 에 포트 를 감청 하 라 는 것 입 니 다.SSH daemon 과 같 습 니 다!
PowerShell 을 관리자 권한 으로 시작 하고 다음 명령 을 수행 합 니 다.

Enable-PSRemoting CForce
그리고 WinRM 서 비 스 는 실행 상태 여야 합 니 다.

또는:

방화벽 규칙 에 도 변화 가 생 겼 다.

Enable-PSREmoting 명령 은 WinRM 서 비 스 를 시작 할 뿐만 아니 라 방화벽 규칙 도 설정 해 주 었 습 니 다.
만약 당신 의 컴퓨터 가 이미 도 메 인 에 가입 했다 면,위의 설정 을 하면 됩 니 다.도 메 인 에 가입 하지 않 은 컴퓨터 에 대해 서 는 신뢰 설정 을 한 다음 WinRM 서 비 스 를 다시 시작 해 야 합 니 다.

Set-Item wsman:\localhost\client\trustedhosts *
Restart-Service WinRM
원 격 연결 테스트
PowerShell 은 원 격 호스트 가 원 격 조작 서 비 스 를 열 었 는 지 확인 하 는 명령 도 제공 합 니 다.

Test-WsMan xxx.xxx.xxx.xxx

위의 그림 에서 명령 이 성공 적 으로 되 돌 아 왔 습 니 다.원 격 호스트 에 원 격 접근 을 허용 하 는 서비스 가 설정 되 어 있 음 을 설명 합 니 다.잘못된 메 시 지 를 되 돌려 주면 원 격 호스트 가 원 격 으로 접근 하 는 서 비 스 를 열지 않 았 음 을 설명 합 니 다.
원 격 연결 세 션 만 들 기
이런 방식 은 SSH 의 원 격 연결 과 유사 하 다.SSH 클 라 이언 트 를 사용 하여 서버 에 연결(session)을 만 들 고 여러 가지 작업 을 수행 합 니 다.이것 은 SSH 의 가장 기본 적 인 사용 방식 이 고 PowerShell 도 우리 가 같은 일 을 할 수 있 도록 비슷 한 지원 을 제공 합 니 다.
Enter-PSSession -ComputerName my-svr -Credential nickli

비밀 번 호 를 입력 하면 연결 을 만 들 수 있 습 니 다:

이제 원 격 호스트 에서 작업 을 수행 할 수 있 습 니 다!
원 격 실행 단일 명령
원 격 호스트 와 만 든 session 에서 작업 을 수행 할 수 있 는 것 은 좋 은 시작 입 니 다.그러나 우 리 는 하나의 명령 만 간단하게 실행 하고 심지어 스 크 립 트 에서 이런 명령 을 실행 해 야 할 때 가 많 습 니 다.어떻게 해 야 합 니까?
Invoke-Command 명령 을 통 해-script Block 인 자 를 지정 하여 이 작업 을 수행 할 수 있 습 니 다.

Invoke-Command -ComputerName cd-lsr-svr -ScriptBlock { Get-Service WinRM } -credential nickli
위의 명령 을 실행 하고 사용자 의 비밀 번 호 를 입력 하 십시오:

명령 이 실행 되 었 지만 결함 도 뚜렷 합 니 다.사용자 가 비밀 번 호 를 입력 해 야 하기 때문에 스 크 립 트 에 기록 되 어 자동화 작업 을 할 수 없습니다.
다음 방법 으로 암 호 를 명령 에 쓰 십시오.(이렇게 하면 자동화 할 수 있 습 니 다.)

$Username = 'xxxx'
$Password = 'yyyy'
$pass = ConvertTo-SecureString -AsPlainText $Password -Force
$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$pass
Invoke-Command -ComputerName cd-lsr-svr -ScriptBlock { Get-Service WinRM } -credential $Cred
여러 명령 을 원 격 으로 실행 하 다.
때때로 우 리 는 여러 개의 관련 명령 을 연속 으로 실행 해 야 한다.예 를 들 어 뒤의 명령 은 앞의 명령 의 결 과 를 사용 할 것 이다.이때 위의 방법 을 다시 사용 하면 안 된다.세 션 을 통 해 명령 간 의 관 계 를 처리 해 야 합 니 다:

Invoke-Command -ComputerName myserver -ScriptBlock {$p = Get-Process PowerShell}
Invoke-Command -ComputerName myserver -ScriptBlock {$p.VirtualMemorySize}

$s = New-PSSession -ComputerName myserver
Invoke-Command -Session $s -ScriptBlock {$p = Get-Process PowerShell}
Invoke-Command -Session $s -ScriptBlock {$p.VirtualMemorySize}

두 번 째 명령 을 직접 실행 할 때 두 번 째 명령 의$p 가 값 이 없 기 때문에 결 과 를 얻 을 수 없습니다.마지막 두 줄 의 명령 은 같은 session 을 통 해 실행 되 기 때문에 변 수 를 공유 하고 결 과 를 얻 을 수 있 습 니 다.
원 격 실행 스 크 립 트
원 격 실행 명령 의 동작 을 소개 하고 원 격 실행 스 크 립 트 를 소개 하면 훨씬 쉽다.사실 이것 이 야 말로 자동화 작업 의 핵심 부분 이다.

Invoke-Command -ComputerName cm-12r2 -FilePath .\task.ps1
task.ps1 에 test.txt 파일 을 만 들 고 PowerShell 버 전 정 보 를 이 파일 에 추가 합 니 다.위의 명령 실행:

그리고 원 격 기기 에서 파일 생 성 여 부 를 봅 니 다.

모든 것 이 좋아 보 입 니 다.다만 실제 응용 에서 우리 의 스 크 립 트 는 더욱 복잡 할 뿐 입 니 다!
여러 기계 에서 같은 조작 을 집행 하 다
동시에 여러 대의 호스트 에서 같은 조작 을 하면 효율 을 배로 향상 시 킬 수 있 습 니 다.이것 은 원 격 으로 조작 할 수 있 는 가장 좋 은 방법 입 니 다.

위의 그림 에서 명령 은 두 개의 원 격 호스트 에서 동시에 실 행 됩 니 다.사실은 Computer Name 속성 에 여러 개의 목 표를 지정 하 는 것 입 니 다!
반복:진정한 위력 은 스 크 립 트 파일 을 실행 하 는 것 입 니 다.

이번에 우 리 는 두 개의 원 격 호스트 에서 스 크 립 트 파일 task.ps1 을 동시에 실행 했다.
대상 호스트 가 많 으 면 파일 에 기록 하고 다음 방식 으로 참조 할 수 있 습 니 다.

Invoke-Command -ComputerName (Get-Content Machines.txt)
원 격 파일 복사
드디어 PowerShell 은 5.x 버 전에 서 원 격 복사 파일 을 지원 하기 시 작 했 습 니 다!데모 먼저 보기:

$mySession = new-PSSession -ComputerName xxxxxx
Copy-Item -Path .\task.ps1 -Destination C:\task.ps1 -ToSession $mySession
위의 명령 은 로 컬 현재 디 렉 터 리 의 task.ps1 파일 을 원 격 호스트 xxxxx 의 CD 루트 디 렉 터 리 에 복사 합 니 다.Copy-item 명령 은 하나의 Session 대상 을 매개 변수 로 사 용 했 습 니 다.이 매개 변수의 이름 은 ToSession 입 니 다.파일 전달 방향 은 이 매개 변수 에 의 해 결정 된다 고 추측 할 수 있 습 니 다.ToSession 을 사용 하면 로 컬 파일 을 원 격 호스트 에 전달 합 니 다.FromSession 을 사용 하면 원 격 호스트 의 파일 을 이 컴퓨터 에 전달 합 니 다.
전체 디 렉 터 리 를 어떻게 복사 하 는 지 다시 한 번 봅 시다.

$mySession = new-PSSession -ComputerName xxxxxx
Copy-Item -Path .\PowerShell -Destination C:\PowerShell -ToSession $mySession -Recurse

디 렉 터 리 복사 작업 에 Recurse 인 자 를 추가 해 야 합 니 다.
위의 두 동작 은 각각 하나의 파일 과 하나의 디 렉 터 리 를 원 격 호스트 에 복사 하 는 것 입 니 다.그 다음 에 우 리 는 원 격 호스트 의 파일 이나 폴 더 를 본 컴퓨터 에 복사 해 야 합 니 다.

$mySession = new-PSSession -ComputerName xxxxxx
Copy-Item -Path C:\task.ps1 -Destination F:\temp\task.ps1 -FromSession $mySession
Copy-Item -Path C:\PowerShell -Destination F:\temp -FromSession $mySession -Recurse
여기 서 사용 하 는 매개 변 수 는 FromSession 이 므 로 명령 의 Destination 은 로 컬 경 로 를 지정 합 니 다.로 컬 F:\temp 디 렉 터 리 에 내용 을 복사 한 것 이 아 닌 지 위의 명령 을 실행 하 십시오!
총결산
본 고 는 PowerShell 로 원 격 조작 을 하 는 기초 와 자주 사용 하 는 방법 을 간단하게 소개 했다.전체적으로 말 하면 자주 사용 하 는 조작 과 SSH 는 기본적으로 모두 유사 하 다.원 격 파일 복사 명령 은 PowerShell 의 최신 버 전에 서 만 지원 되 며,사용 시 환경 에서 PowerShell 버 전 을 확인 해 야 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기