실행 명령 작업을 사용하여 Windows VM에서 스크립트 실행

실행 명령 기능은 VM(가상 머신) 에이전트를 사용하여 Azure Windows VM 내에서 PowerShell 스크립트를 실행합니다. 이러한 스크립트는 일반 머신 또는 애플리케이션 관리에 사용할 수 있습니다. 이를 통해 VM 액세스 및 네트워크 문제를 신속하게 진단 및 수정하고 VM을 정상 상태로 되돌릴 수 있습니다.

이점

여러 가지 방법으로 가상 머신에 액세스할 수 있습니다. 명령 실행은 VM 에이전트를 사용하여 원격으로 가상 머신에서 스크립트를 실행할 수 있습니다. Windows VM용 Azure Portal, REST API 또는 PowerShell을 통해 실행 명령을 사용합니다.

이 기능은 가상 머신 내에서 스크립트를 실행하려는 모든 시나리오에서 유용합니다. 네트워크 또는 관리 사용자 구성이 잘못되어 RDP 또는 SSH 포트가 열려 있지 않은 가상 머신의 문제를 해결 및 수정하는 유일한 방법 중 하나입니다.

필수 조건

Windows OS 지원

Windows OS x64
Windows 10 지원됨
Windows 11 지원됨
Windows Server 2008 SP2 지원됨
Windows Server 2008 R2 지원됨
Windows Server 2012 지원됨
Windows Server 2012 R2 지원됨
Windows Server 2016 지원됨
Windows Server 2016 Core 지원됨
Windows Server 2019 지원됨
Windows Server 2019 Core 지원됨
Windows Server 2022 지원됨
Windows Server 2022 Core 지원됨

제한 사항

다음 제한은 실행 명령을 사용할 때 적용됩니다.

  • 출력은 마지막 4096바이트로 제한됩니다.
  • 스크립트를 실행하는 최소 시간은 약 20초입니다.
  • 스크립트는 Windows에서 시스템으로 실행됩니다.
  • 한 번에 하나의 스크립트를 실행할 수 있습니다.
  • 정보를 요청하는 스크립트(대화형 모드)는 지원되지 않습니다.
  • 실행 중인 스크립트는 취소할 수 없습니다.
  • 스크립트를 실행할 수 있는 최대 시간은 90분입니다. 그 후에는 시간이 초과됩니다.
  • 스크립트의 결과를 반환하려면 VM에서의 아웃바운드 연결이 필요합니다.
  • VM 에이전트를 중지하거나 업데이트하는 스크립트를 실행하는 것은 권장하지 않습니다. 그로 인해 확장이 전환 상태로 유지되어 시간 제한이 발생할 수 있습니다.

참고 항목

제대로 작동하려면 실행 명령이 Azure 공용 IP 주소에 연결(포트 443)되어야 합니다. 확장이 이러한 엔드포인트에 대해 액세스 권한이 없는 경우 스크립트는 성공적으로 실행되지만 결과를 반환하지는 않습니다. 가상 머신에서 트래픽을 차단하는 경우 AzureCloud 태그를 사용하여 Azure 공용 IP 주소로 트래픽을 허용하도록 서비스 태그를 사용할 수 있습니다.

VM 에이전트 상태가 준비되지 않은 경우 명령 실행 기능이 작동하지 않습니다. Azure Portal의 VM 속성에서 에이전트 상태를 확인합니다.

사용 가능한 명령

이 표에서는 Windows VM에 대해 사용할 수 있는 명령 목록을 보여줍니다. RunPowerShellScript 명령을 사용하여 원하는 모든 사용자 지정 스크립트를 실행할 수 있습니다. Azure CLI 또는 PowerShell을 사용하여 명령을 실행하는 경우 --command-id 또는 -CommandId 매개 변수에 대해 제공하는 값은 다음 목록 값 중 하나여야 합니다. 사용할 수 있는 명령이 아닌 값을 지정하면 다음과 같은 오류가 표시됩니다.

The entity was not found in this Azure location

이름 설명
RunPowerShellScript PowerShell 스크립트 실행
DisableNLA 네트워크 수준 인증을 사용하지 않도록 설정
DisableWindowsUpdate Windows 업데이트 자동 업데이트를 사용하지 않도록 설정
EnableAdminAccount 로컬 관리자 계정이 비활성화됐는지 확인하여 그렇다면 활성화합니다.
EnableEMS EnableS EMS
EnableRemotePS 원격 PowerShell을 사용하도록 설정하려면 컴퓨터를 구성합니다.
EnableWindowsUpdate Windows 업데이트 자동 업데이트를 사용하도록 설정
IPConfig TCP/IP에 바인딩된 각 어댑터의 IP 주소, 서브넷 마스크 및 기본 게이트웨이에 대한 자세한 정보를 표시합니다.
RDPSettings 레지스트리 설정 및 도메인 정책 설정을 확인합니다. 머신이 도메인의 일부이거나 설정을 기본값으로 수정하는 경우 정책 작업을 제안합니다.
ResetRDPCert RDP 수신기에 연결된 TLS/SSL 인증서를 제거하고 RDP 수신기 보안을 기본값으로 복원합니다. 인증서에 문제가 있는 경우 이 스크립트를 사용합니다.
SetRDPPort 원격 데스크톱 연결에 대한 기본 또는 사용자 지정 포트 번호를 설정합니다. 포트에 인바운드 액세스를 위한 방화벽 규칙을 사용하도록 설정합니다.

Azure CLI

다음 예제는 az vm run-command 명령을 사용하여 Azure Windows VM에서 셸 스크립트를 실행합니다.

# script.ps1
#   param(
#       [string]$arg1,
#       [string]$arg2
#   )
#   Write-Host This is a sample script with parameters $arg1 and $arg2

az vm run-command invoke  --command-id RunPowerShellScript --name win-vm -g my-resource-group \
    --scripts @script.ps1 --parameters "arg1=somefoo" "arg2=somebar"

Azure Portal

Azure Portal의 VM으로 이동하여 왼쪽 메뉴의 작업 아래에서 실행 명령을 선택합니다. VM에서 실행에 사용할 수 있는 명령 목록이 표시됩니다.

List of commands

실행할 명령을 선택하세요. 명령 중 일부에는 선택 또는 필수 입력 매개 변수가 있을 수 있습니다. 이러한 명령의 경우 매개 변수는 입력 값을 제공하기 위한 텍스트 필드로 표시됩니다. 각 명령의 경우 스크립트 보기를 확장하여 실행되는 스크립트를 볼 수 있습니다. RunPowerShellScript는 사용자 고유의 사용자 지정 스크립트를 제공할 수 있으므로 다른 명령과 다릅니다.

참고 항목

기본 제공된 명령은 편집할 수 없습니다.

명령을 선택한 후 실행을 선택하여 스크립트를 실행합니다. 스크립트가 완료되면 출력 창에 출력 및 오류가 반환됩니다. 다음 스크린샷은 RDPSettings 명령을 실행하는 작업의 예제 출력을 보여줍니다.

Run command script output

PowerShell

다음 예제에서는 Invoke-AzVMRunCommand cmdlet을 사용하여 Azure VM에서 PowerShell 스크립트를 실행합니다. cmdlet에서는 -ScriptPath 매개 변수에서 참조되는 스크립트가 cmdlet이 실행되는 위치의 로컬이어야 합니다.

Invoke-AzVMRunCommand -ResourceGroupName '<myResourceGroup>' -Name '<myVMName>' -CommandId 'RunPowerShellScript' -ScriptPath '<pathToScript>' -Parameter @{"arg1" = "var1";"arg2" = "var2"}

참고 항목

매개 변수 값은 문자열 형식일 수 있으며 스크립트는 필요한 경우 다른 형식으로 변환해야 합니다.

명령 실행에 대한 액세스 제한

실행 명령을 나열하거나 명령의 세부 정보를 표시하려면 구독 수준에서 Microsoft.Compute/locations/runCommands/read 권한이 필요합니다. 기본 제공 Reader 역할 및 상위 수준에 이 권한이 있습니다.

명령을 실행하려면 Microsoft.Compute/virtualMachines/runCommands/write 권한이 필요합니다. Virtual Machine 기여자 역할 및 상위 수준에 이 권한이 있습니다.

기본 제공 역할 중 하나를 사용하거나 사용자 지정 역할을 생성하여 실행 명령을 사용할 수 있습니다.

작업 실행 명령 Windows 문제 해결

Windows 환경의 작업 실행 명령 문제를 해결할 때는 일반적으로 C:\WindowsAzure\Logs\Plugins\Microsoft.CPlat.Core.RunCommandWindows\<version>\RunCommandExtension.log 디렉터리에 있는 RunCommandExtension 로그 파일을 참조하세요.

알려진 문제

명령에 예약된 문자가 포함된 경우 작업 실행 명령 확장이 Windows 환경에서 실행되지 않을 수 있습니다. 예시:

아래 PowerShell 스크립트와 같은 명령의 매개 변수에 & 기호가 전달되면 실패할 수 있습니다.

$paramm='abc&jj'
Invoke-AzVMRunCommand -ResourceGroupName AzureCloudService1 -Name test -CommandId 'RunPowerShellScript' -ScriptPath C:\data\228332902\PostAppConfig.ps1 -Parameter @{"Prefix" = $paramm}

^ 문자를 사용하여 인수에서 &을(를) 이스케이프(예: $paramm='abc^&jj')합니다.

실행할 명령이 경로에 "\n"을 포함하는 경우에도 실행 명령 확장이 실행되지 않을 수 있습니다. 이 확장은 새 줄로 처리됩니다. 예를 들어 C:\Windows\notepad.exe은(는) 파일 경로에 \n을(를) 포함합니다. 경로에서 \n을(를) \N(으)로 바꾸는 것이 좋습니다.

작업 실행 명령 제거

작업 실행 명령 Windows 확장을 제거해야 하는 경우 Azure PowerShell 및 CLI에 대한 아래 단계를 참조하세요.

다음 제거 예제에서 rgnamevmname을 관련 리소스 그룹 이름 및 가상 머신 이름으로 바꿉니다.

 Invoke-AzVMRunCommand -ResourceGroupName 'rgname' -VMName 'vmname' -CommandId 'RemoveRunCommandWindowsExtension'
az vm run-command invoke  --command-id RemoveRunCommandWindowsExtension --name vmname -g rgname

참고 항목

실행 명령을 다시 적용하면 확장이 자동으로 설치됩니다. 확장 제거 명령을 사용하여 확장과 관련된 문제를 해결할 수 있습니다.

다음 단계

VM에서 스크립트 및 명령을 원격으로 실행하는 다른 방법에 대해 알아보려면 Windows VM에서 스크립트 실행을 참조하세요.