次の方法で共有


アクション実行コマンドを使用して、Windows VM でスクリプトを実行する

実行コマンド機能は、仮想マシン (VM) エージェントを使用して Azure Windows VM 内で PowerShell スクリプトを実行します。 これらのスクリプトは、マシンやアプリケーションの一般的な管理に使用できます。 これらを使用すれば、VM のアクセスおよびネットワークの問題を迅速に診断して修正し、VM を良好な状態に戻すことができます。

メリット

仮想マシンには複数の方法でアクセスできます。 実行コマンドは、VM エージェントを使用して、仮想マシン上でスクリプトをリモートで実行できます。 実行コマンドは、Azure portal、REST API、または Windows VM 用の PowerShell から使用します。

この機能は、仮想マシン内でスクリプトを実行するすべてのシナリオで役立ちます。 これは、ネットワークまたは管理ユーザーの構成が正しくないために RDP または SSH ポートが開かれていない仮想マシンをトラブルシューティングして修正する、限られた方法の 1 つです。

前提条件

サポートされている Windows オペレーティング システム

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 サポートされています

制限

実行コマンドを使用するときには、次の制限が適用されます。

  • 出力は最後の 4,096 バイトに制限されます。
  • スクリプトを実行するための最小時間は約 20 秒です。
  • スクリプトは Windows 上で System として実行されます。
  • 一度に実行できるスクリプトは 1 つです。
  • 情報の入力を求めるスクリプト (対話モード) はサポートされていません。
  • スクリプトの実行を取り消すことはできません。
  • スクリプトを実行できる最大時間は 90 分です。 それを過ぎると、タイムアウトになります。
  • スクリプトの結果を返すために、VM からの送信接続が必要
  • VM エージェントの停止または更新の原因となるスクリプトを実行することはお勧めしません。 これにより、拡張が遷移状態になり、タイムアウトになります。

Note

正常に機能するには、実行コマンドに Azure のパブリック IP アドレスへの接続 (ポート 443) が必要です。 この拡張機能にこれらのエンドポイントへのアクセス権がない場合、スクリプトが正常に実行されても結果が返されないことがあります。 仮想マシン上のトラフィックをブロックしている場合、サービス タグを使用し、AzureCloud タグを使用して Azure パブリック IP アドレスへのトラフィックを許可できます。

VM エージェントが NOT READY (準備中) 状態の場合、実行コマンド機能は動作しません。 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 Update の自動更新を無効にします
EnableAdminAccount ローカル管理者アカウントが無効になっているかどうかを確認し、無効になっている場合は有効にします。
EnableEMS EMS を有効にします
EnableRemotePS コンピューターを構成してリモート PowerShell を有効にします。
EnableWindowsUpdate Windows Update の自動更新を有効にします
IPConfig TCP/IP にバインドされているアダプターごとに、IP アドレス、サブネット マスク、およびデフォルト ゲートウェイの詳細な情報を表示します。
RDPSettings レジストリ設定およびドメインのポリシー設定を確認します。 マシンがドメインの一部である場合はポリシー アクションを提案します。または、設定を既定値に変更します。
ResetRDPCert RDP リスナーに関連付けられている TLS または SSL 証明書を削除し、RDP リスナーのセキュリティを既定値に戻します。 証明書に問題がある場合は、このスクリプトを使用します。
SetRDPPort リモート デスクトップ接続用の既定またはユーザー指定のポート番号を設定します。 ポートへの受信アクセスに対するファイアウォール規則を有効にします。

Azure CLI

Note

どのモダリティを実行に使用するかによっては、一部のエスケープが必要になる場合があります。 たとえば、PowerShell セッションでコマンドを実行する場合、スクリプト ファイルへのパスには引用符が必要になります。

次の例は、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 上で実行できるコマンドの一覧が表示されます。

コマンドの一覧

実行するコマンドを選択します。 一部のコマンドには、省略可能または必須の入力パラメーターがある場合があります。 そうしたコマンドの場合、パラメーターは、入力値を指定するためのテキスト フィールドとして表示されます。 コマンドごとに、 [スクリプトの表示] を展開することによって、実行されるスクリプトを表示できます。 RunPowerShellScript は他のコマンドと異なり、独自のカスタム スクリプトを指定することができます。

Note

組み込みコマンドは編集できません。

コマンドを選択した後、 [実行] を選択してスクリプトを実行します。 スクリプトが完了すると、出力ウィンドウに出力およびエラー (発生した場合) が返されます。 次のスクリーン ショットは、RDPSettings コマンドを実行した出力例を示しています。

実行コマンド スクリプトの出力

PowerShell

次の例では、Invoke-AzVMRunCommand コマンドレットを使用して Azure VM 上で PowerShell スクリプトを実行します。 このコマンドレットは、-ScriptPath パラメーターで参照されるスクリプトが、このコマンドレットの実行場所に対してローカルであることを想定しています。

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

注意

パラメーター値は文字列型のみです。必要に応じて他の型に変換する場合は、スクリプトを使用して行います。

実行コマンドへのアクセスの制限

実行コマンドを一覧表示したり、コマンドの詳細を表示したりするには、サブスクリプション レベルの Microsoft.Compute/locations/runCommands/read アクセス許可が必要です。 組み込みの閲覧者ロール以上のレベルには、このアクセス許可があります。

コマンドの実行には、Microsoft.Compute/virtualMachines/runCommands/action アクセス許可が必要です。 仮想マシンの共同作成者ロール以上のレベルには、このアクセス許可があります。

実行コマンドを使用するには、いずれかの組み込みロールを使用するか、カスタム ロールを作成します。

アクション実行コマンド Windows のトラブルシューティング

Windows 環境のアクション実行コマンドのトラブルシューティングを行う場合、詳細については、RunCommandExtension ログ ファイルを参照してください。このファイルは通常、C:\WindowsAzure\Logs\Plugins\Microsoft.CPlat.Core.RunCommandWindows\<version>\RunCommandExtension.log のディレクトリ内にあります。

既知の問題

  • コマンドに予約文字が含まれている場合、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 に置き換えることを検討してください。

  • レジストリ キー HKLM\SOFTWARE\Microsoft\Command Processor\AutoRun にカスタム設定がないことを確認してください (詳細は "こちら" を参照してください)。 これは、RunCommand 拡張機能のインストールまたは有効化フェーズ中にトリガーされ、"XYZ が内部または外部のコマンド、操作可能なプログラム、バッチ ファイルとして認識されません" というようなエラーが発生します。

アクション実行コマンドの削除

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

Note

実行コマンドをもう一度適用すると、拡張機能は自動的にインストールされます。 拡張機能の削除コマンドを使用して、拡張機能に関連する問題のトラブルシューティングを行うことができます。

次のステップ

VM 内でスクリプトやコマンドをリモートで実行するその他の方法については、「Windows VM でスクリプトを実行する」を参照してください。