PowerShell을 사용하여 가상 머신 자동화 및 관리
PowerShell Direct를 사용하여 네트워크 구성 또는 원격 관리 설정에 상관 없이 Hyper-V 호스트의 Windows 10 또는 Windows Server 2016 가상 머신에서 임의의 PowerShell을 실행할 수 있습니다.
다음과 같은 몇 가지 방법으로 PowerShell Direct를 실행할 수 있습니다.
- Enter-PSSession cmdlet을 사용하여 대화형 세션으로
- Invoke-Command cmdlet을 사용하여 단일 명령 또는 스크립트를 실행하는 단일 사용 섹션으로
- New-PSSession, Copy-Item 및 Remove-PSSession cmdlet을 사용하여 영구 세션으로(빌드 14280 이상)
요구 사항
운영 체제 요구 사항:
- 호스트: Hyper-V를 실행하는 Windows 10, Windows Server 2016 이상.
- 게스트/가상 머신: Windows 10, Windows Server 2016 이상.
이전 가상 컴퓨터를 관리하는 경우 가상 컴퓨터 연결(VMConnect)을 사용하거나 가상 컴퓨터에 대한 가상 네트워크를 구성합니다.
구성 요구 사항:
- 가상 머신은 호스트에서 로컬로 실행되고 있어야합니다.
- 하나 이상의 구성된 사용자 프로필로 가상 머신을 켜고 실행해야 합니다.
- Hyper-V 관리자로 호스트 컴퓨터에 로그인해야 합니다.
- 가상 컴퓨터에 대해 유효한 사용자 자격 증명을 제공해야 합니다.
대화형 PowerShell 세션 만들기 및 종료
가상 머신에서 PowerShell 명령을 실행하는 가장 쉬운 방법은 대화형 세션을 시작하는 것입니다.
세션이 시작되면 입력한 명령이 가상 머신 자체의 PowerShell 세션에 직접 입력한 것처럼 가상 머신에서 실행됩니다.
대화형 세션을 시작하려면
Hyper-V 호스트에서 관리자 권한으로 PowerShell을 엽니다.
다음 명령 중 하나를 실행하여 가상 머신 이름 또는 GUID를 사용하는 대화형 세션을 만듭니다.
Enter-PSSession -VMName <VMName>
Enter-PSSession -VMId <VMId>
메시지가 표시되면 가상 머신에 대한 자격 증명을 제공합니다.
- 가상 머신에서 명령을 실행합니다.
다음과 같이 PowerShell 프롬프트에 대한 접두사로 VMName이 표시됩니다.
[VMName]: PS C:\>
모든 명령 실행은 가상 머신에서 실행됩니다. 테스트하려면 ipconfig
(이)나 hostname
실행하여 이러한 명령이 가상 머신에서 실행되고 있는지 확인할 수 있습니다.
완료되면 다음 명령을 실행하여 세션을 닫습니다.
Exit-PSSession
참고: 세션이 연결되지 않으면 문제 해결에서 잠재적 원인을 확인하세요.
이러한 cmdlet에 대한 자세한 내용은 Enter-PSSession 및 Exit-PSSession을 참조하세요.
Invoke-Command를 사용하여 스크립트 또는 명령 실행
Invoke-Command를 사용하는 PowerShell Direct는 가상 머신에서 하나의 명령이나 하나의 스크립트를 실행해야 하지만 그 후에는 가상 머신과 계속 상호 작용할 필요가 없는 경우에 매우 적합합니다.
단일 명령을 실행하려면
Hyper-V 호스트에서 관리자 권한으로 PowerShell을 엽니다.
다음 명령 중 하나를 실행하여 가상 머신 이름 또는 GUID를 사용하는 세션을 만듭니다.
Invoke-Command -VMName <VMName> -ScriptBlock { command } Invoke-Command -VMId <VMId> -ScriptBlock { command }
메시지가 표시되면 가상 머신에 대한 자격 증명을 제공합니다.
명령이 가상 머신에서 실행되고 콘솔에 출력이 있을 경우 콘솔로 인쇄됩니다. 명령이 실행되는 즉시 연결이 자동으로 닫힙니다.
스크립트를 실행하는 방법은 다음과 같습니다.
Hyper-V 호스트에서 관리자 권한으로 PowerShell을 엽니다.
다음 명령 중 하나를 실행하여 가상 머신 이름 또는 GUID를 사용하는 세션을 만듭니다.
Invoke-Command -VMName <VMName> -FilePath C:\host\script_path\script.ps1 Invoke-Command -VMId <VMId> -FilePath C:\host\script_path\script.ps1
메시지가 표시되면 가상 머신에 대한 자격 증명을 제공합니다.
스크립트는 가상 머신에서 실행됩니다. 명령이 실행되는 즉시 연결이 자동으로 닫힙니다.
이 cmdlet에 대한 자세한 내용은 Invoke-Command를 참조하세요.
New-PSSession 및 Copy-Item을 사용하여 파일 복사
참고: PowerShell Direct는 Windows 빌드 14280 이상에서만 영구 세션을 지원합니다.
영구 PowerShell 세션은 하나 이상의 원격 컴퓨터에서 작업을 조정하는 스크립트를 작성할 때 매우 유용합니다. 만들어진 영구 세션은 삭제할 때까지 백그라운드에 존재합니다. 즉, 자격 증명을 전달하지 않고도 Invoke-Command
또는 Enter-PSSession
을 사용하여 동일한 세션을 반복해서 참조할 수 있습니다.
세션은 동일한 토큰별로 상태를 저장합니다. 영구 세션은 계속 유지되므로 세션에서 만들거나 세션에 전달된 모든 변수가 여러 호출에서 그대로 유지됩니다. 영구 세션 작업에는 많은 도구를 사용할 수 있습니다. 이 예제에서는 New-PSSession 및 Copy-Item을 사용하여 호스트에서 가상 머신으로, 가상 머신에서 호스트로 데이터를 이동합니다.
세션을 만든 다음 파일을 복사하려면
Hyper-V 호스트에서 관리자 권한으로 PowerShell을 엽니다.
다음 명령 중 하나를 실행하여
New-PSSession
(으)로 가상 머신에 대한 영구 PowerShell 세션을 만듭니다.
$s = New-PSSession -VMName <VMName> -Credential (Get-Credential)
$s = New-PSSession -VMId <VMId> -Credential (Get-Credential)
메시지가 표시되면 가상 머신에 대한 자격 증명을 제공합니다.
경고:
14500 이전 빌드에는 버그가 있습니다.-Credential
플래그를 사용하여 자격 증명을 명시적으로 지정하지 않으면 게스트의 서비스가 작동 중단되어 다시 시작해야 합니다. 이 문제가 발생할 경우 여기에서 해결 지침을 사용할 수 있습니다.
- 가상 머신에 파일을 복사합니다.
C:\host_path\data.txt
호스트 컴퓨터에서 가상 머신에 복사하려면 다음을 실행합니다.
Copy-Item -ToSession $s -Path C:\host_path\data.txt -Destination C:\guest_path\
- 가상 머신에서 호스트로 파일을 복사합니다.
C:\guest_path\data.txt
(을)를 가상 머신에서 호스트에 복사하려면 다음을 실행합니다.
Copy-Item -FromSession $s -Path C:\guest_path\data.txt -Destination C:\host_path\
Remove-PSSession
을 사용하여 영구 세션을 중지합니다.
Remove-PSSession $s
문제 해결
PowerShell Direct를 통해 표시되는 작은 집합의 일반적인 오류 메시지가 있습니다. 다음은 가장 일반적인, 몇 가지 원인 및 문제를 진단하기 위한 도구입니다.
-VMName 또는 -VMID 매개 변수가 없습니다.
문제:
Enter-PSSession
, Invoke-Command
또는 New-PSSession
에 -VMName
또는 -VMId
매개 변수가 없습니다.
가능한 원인:
가장 가능성이 높은 문제는 PowerShell Direct가 호스트 운영 체제에서 지원되지 않는다는 것입니다.
다음 명령을 실행하여 Windows 빌드를 확인할 수 있습니다.
[System.Environment]::OSVersion.Version
지원되는 빌드가 실행되고 있는 경우 PowerShell 버전에서 PowerShell Direct를 실행하지 못할 수도 있습니다. PowerShell Direct 및 JEA의 경우 주 버전이 5 이상이어야 합니다.
다음 명령을 실행하여 PowerShell 버전 빌드를 확인할 수 있습니다.
$PSVersionTable.PSVersion
오류: 원격 세션이 종료됐을 수 있습니다.
참고:
호스트 빌드 10240과 12400 사이의 Enter-PSSession에 대해 아래의 모든 오류가 " 원격 세션이 종료되었을 수 있습니다."로 보고되었습니다.
오류 메시지:
Enter-PSSession : An error has occurred which Windows PowerShell cannot handle. A remote session might have ended.
가능한 원인:
- 가상 머신이 존재하지만 실행되고 있지 않습니다.
- 게스트 OS는 PowerShell Direct를 지원하지 않습니다(요구 사항 참조).
- PowerShell은 게스트에서 사용할 수 없습니다.
- 운영 체제가 부팅을 완료하지 않았습니다.
- 운영 체제가 올바르게 부팅할 수 없습니다.
- 일부 부팅 시간 이벤트는 사용자 입력이 필요합니다.
Get-VM cmdlet을 사용하여 호스트에서 실행되고 있는 VM을 확인할 수 있습니다.
오류 메시지:
New-PSSession : An error has occurred which Windows PowerShell cannot handle. A remote session might have ended.
가능한 원인:
- 위에 나열된 원인 중 하나. 모든 원인이
New-PSSession
에 동일하게 적용됩니다. -Credential
을 사용하여 자격 증명을 명시적으로 전달해야 하는 현재 빌드의 버그입니다. 이런 경우 전체 서비스가 게스트 운영 체제에서 중단되므로 다시 시작해야 합니다. Enter-PSSession에서 세션을 계속 사용할 수 있는지 확인할 수 있습니다.
자격 증명 문제를 해결하려면 VMConnect를 사용하여 가상 머신에 로그인하고 PowerShell을 연 후 다음 PowerShell을 사용하여 vmicvmsession 서비스를 다시 시작합니다.
Restart-Service -Name vmicvmsession
오류: 매개 변수 집합을 확인할 수 없습니다.
오류 메시지:
Enter-PSSession : Parameter set cannot be resolved using the specified named parameters.
가능한 원인:
가상 머신에 연결할 때
-RunAsAdministrator
가 지원되지 않습니다.Windows 컨테이너에 연결할 경우에는
-RunAsAdministrator
플래그에서 명시적 자격 증명 없이 관리자 연결을 허용합니다. 가상 컴퓨터는 호스트에 암시적 관리자 액세스 권한을 제공하지 않으므로 자격 증명을 명시적으로 입력해야 합니다.
관리자 자격 증명을 -Credential
매개 변수를 사용하여 가상 머신에 전달하거나 메시지가 표시될 때 수동으로 입력하여 전달할 수 있습니다.
오류: 자격 증명이 잘못되었습니다.
오류 메시지:
Enter-PSSession : The credential is invalid.
가능한 원인:
- 게스트 자격 증명의 유효성을 검사할 수 없습니다.
- 제공된 자격 증명이 잘못되었습니다.
- 게스트에 사용자 계정이 없습니다.(OS가 이전에 부팅되지 않았습니다)
- 관리자 권한으로 연결하는 경우: 관리자가 활성 사용자로 설정되지 않았습니다. 여기를 참조하세요.
오류: 입력 VMName 매개 변수가 가상 머신으로 확인되지 않습니다.
오류 메시지:
Enter-PSSession : The input VMName parameter does not resolve to any virtual machine.
가능한 원인:
- Hyper-V 관리자가 아닙니다.
- 가상 머신이 없습니다.
Get-VM cmdlet을 사용하여 사용 중인 자격 증명에 Hyper-V 관리자 역할이 있는지 확인하고 호스트에서 로컬로 실행 중이고 부팅된 VM을 확인할 수 있습니다.
샘플 및 사용자 가이드
PowerShell Direct는 JEA(Just Enough Administration)를 지원합니다. 사용해 보려면 이 사용자 가이드를 확인하세요.
GitHub에서 샘플을 확인하세요.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기