適用対象: ✔️ Windows VM ✔️ フレキシブル スケール セット
重要
マネージド実行コマンドは現在、Azure CLI、PowerShell、API で使用できます。 ロードマップ上には、ポータル機能が置かれています。
実行コマンド機能では、仮想マシン (VM) エージェントを使用して Azure Windows VM 内でスクリプトが実行されます。 これらのスクリプトは、マシンやアプリケーションの一般的な管理に使用できます。 これらを使用すれば、VM のアクセスおよびネットワークの問題を迅速に診断して修正し、VM を良好な状態に戻すことができます。
更新されたマネージド実行コマンドでは、同じ VM エージェント チャネルを使用してスクリプトを実行し、元のアクション指向実行コマンドに対して次の機能強化を実現します。
- ARM デプロイ テンプレートを介して更新された実行コマンドをサポート
- 複数のスクリプトの並列実行
- スクリプトの順次実行
- ユーザーが指定したスクリプトのタイムアウト
- 実行時間が長い (時間または日単位) のスクリプトをサポート
- 安全な方法でシークレット (パラメーター、パスワード) を渡す
前提条件
サポートされている Windows オペレーティング システム
| OS バージョン | x64 | ARM64 |
|---|---|---|
| ウィンドウズ10 | サポートされています | サポートされています |
| ウィンドウズ11 | サポートされています | サポートされています |
| Windows Server 2016 | サポートされています | サポートされています |
| Windows Server 2016 Core | サポートされています | サポートされています |
| Windows Server 2019 | サポートされています | サポートされています |
| Windows Server 2019 Core | サポートされています | サポートされています |
| Windows Server 2022 | サポートされています | サポートされています |
| Windows Server 2022 Core | サポートされています | サポートされています |
| Windows Server 2022 Azure Edition | サポートされています | サポートされています |
| Windows Server 2025 | サポートされています | サポートされています |
| Windows Server 2025 Core | サポートされています | サポートされています |
| Windows Server 2025 Azure Edition | サポートされています | サポートされています |
使用可能なコマンド
| CommandID | 説明 | 詳細情報 |
|---|---|---|
| RunPowerShellScript | PowerShell スクリプトを実行します | |
| IPConfig | TCP/IP にバインドされた各アダプターの IP アドレス、サブネット マスク、および既定のゲートウェイの詳細情報を表示します。 使用方法については、「スクリプトの実行」を参照してください。 | readme |
| EnableWindowsUpdate | Windows Update を使用して自動更新を有効にします。 | readme |
| DisableWindowsUpdate | Windows Update を使用して自動更新を無効にします。 | readme |
| EnableAdminAccount | ローカル管理者アカウントが無効になっているかどうかを確認し、有効にするかどうかを確認します。 | readme |
| EnableEMS | トラブルシューティング シナリオで、緊急管理サービス (EMS) を有効にして、シリアル コンソール接続を許可します。 | readme |
| EnableRemotePS | リモート PowerShell を有効にします。 | readme |
| IMDSCertCheck | IMDS の正常性を確認し、IMDS が依存している現在インストールされている証明書を分析します。 不足している場合は、追加の詳細と軽減手順が表示されます。 | readme |
| RDPSettings | レジストリ設定およびドメインのポリシー設定を確認します。 コンピューターがドメインの一部である場合、または設定を既定値に変更する場合は、ポリシー アクションを提案します。 | readme |
| ResetRDPCert | RDP リスナーに関連付けられている SSL 証明書を削除し、RDP リスナーのセキュリティを既定に復元します。 証明書に問題がある場合は、このスクリプトを使用します。 | readme |
| Windows_WindowsActivation_Validation | 現在の Windows ライセンスの状態 (アクティブ化されているかどうか) を確認し、マシンがプロパティアクティブ化されていない場合はアラートが生成されます。 | readme |
| SetRDPPort | リモート デスクトップ接続の既定またはユーザー指定のポート番号を設定します。 ポートへの受信アクセスのファイアウォール規則を有効にします。 | readme |
| DisableNLA | ネットワーク レベル認証 (NLA) を無効にします。 変更を有効にするには、スクリプトの完了後に VM を再起動する必要があります。 スクリプト自体は VM を再起動しません。 このスクリプトを使用すると、RDP 接続がエラー "接続先のリモート コンピューターにはネットワーク レベル認証 (NLA) が必要ですが、NLA を実行するために Windows ドメイン コントローラーに接続できない" というエラーで失敗した場合に、NLA を無効にすることができます。 またはエラー '認証エラーが発生しました。 ローカル セキュリティ機関に接続できません。' NLA は、ドメイン コントローラーの接続の問題が解決されるまで RDP 接続を成功させるために一時的にのみ無効にする必要があるセキュリティ機能です。 | readme |
メモ
上記のコマンド ID は、Windows VM のマネージド実行コマンドに適用できます。 コマンド "Get-AzVMRunCommandDocument -Location {RegionName}" を使用して、すべての commandId を一覧表示できます。
実行コマンドへのアクセスの制限
実行コマンドを一覧表示したり、コマンドの詳細を表示したりするには、サブスクリプション レベルの Microsoft.Compute/locations/runCommands/read アクセス許可が必要です。 組み込みの閲覧者ロール以上のレベルには、このアクセス許可があります。
コマンドの実行には、Microsoft.Compute/virtualMachines/runCommand/write アクセス許可が必要です。
仮想マシンの共同作成者ロール以上のレベルには、このアクセス許可があります。
実行コマンドを使用するには、いずれかの組み込みロールを使用するか、カスタム ロールを作成します。
Azure CLI
次の例では、az vm run-command を使用して、Azure Windows VM 上でシェル スクリプトを実行します。
VM でスクリプトを実行する
このコマンドにより、スクリプトが VM に配信されて実行され、キャプチャされた出力が返されます。
az vm run-command create --name "myRunCommand" --vm-name "myVM" --resource-group "myRG" --script "Write-Host Hello World!"
VM 上にデプロイされているすべての RunCommand リソースを一覧表示する
このコマンドからは、以前にデプロイされた実行コマンドと、それらのプロパティの完全な一覧が返されます。
az vm run-command list --vm-name "myVM" --resource-group "myRG"
実行の状態と結果を取得する
このコマンドは、現在の実行の進行状況 (最新の出力、開始/終了時刻、終了コード、実行の終了状態など) を取得します。
az vm run-command show --name "myRunCommand" --vm-name "myVM" --resource-group "myRG" --expand instanceView
メモ
instanceView の出力およびエラー フィールドは、最後の 4 KB に制限されています。
完全な出力とエラーにアクセスする場合は、-outputBlobUri または -errorBlobUri を使用して実行コマンドを実行するときに、Set-AzVMRunCommand と Set-AzVMssRunCommand パラメーターを使用して、出力およびエラー データをストレージ追加 BLOB に転送するオプションがあります。
VM から RunCommand リソースを削除する
VM に以前にデプロイされた RunCommand リソースを削除します。 スクリプトがまだ実行処理中の場合は、実行が終了されます。
az vm run-command delete --name "myRunCommand" --vm-name "myVM" --resource-group "myRG"
PowerShell
VM でスクリプトを実行する
このコマンドにより、スクリプトが VM に配信されて実行され、キャプチャされた出力が返されます。
Set-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -Location "EastUS" -RunCommandName "RunCommandName" –SourceScript "echo Hello World!"
SourceScriptUri パラメーターを使用して VM でスクリプトを実行する
OutputBlobUri と ErrorBlobUri は省略可能なパラメーターです。
Set-AzVMRunCommand -ResourceGroupName "myRg" `
-VMName "myVM" `
-RunCommandName "RunCommandName" `
-SourceScriptUri “<SAS_URI_of_a_storage_blob_with_read_access_or_public_URI>" `
-OutputBlobUri “<SAS_URI_of_a_storage_append_blob_with_read_add_create_write_access>" `
-ErrorBlobUri “<SAS_URI_of_a_storage_append_blob_with_read_add_create_write_access>”
VM で長期の実行コマンドを実行する
実行時間は、既定のタイムアウトである 90 分より長く続くことがあります。 スクリプトの実行時間が長いと予想される場合は、実行が 100 分間におよぶことがあります (6,0000-seconds -TimeoutInSecond パラメーターのため)。 100 分経過すると、スクリプトの実行が停止します。
Set-AzVMRunCommand -ResourceGroupName MyRG -VMName MyVM -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri> -AsyncExecution -TimeoutInSecond 6000
VM 上にデプロイされているすべての RunCommand リソースを一覧表示する
このコマンドからは、以前にデプロイされた実行コマンドと、それらのプロパティの完全な一覧が返されます。
Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM"
実行の状態と結果を取得する
このコマンドは、現在の実行の進行状況 (最新の出力、開始/終了時刻、終了コード、実行の終了状態など) を取得します。
Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -RunCommandName "RunCommandName" -Expand InstanceView
SourceScriptUri (ストレージ BLOB SAS URL) を使用して VM で実行コマンドを作成または更新する
PowerShell スクリプトを含むストレージ BLOB の SAS URL を使用して、Windows VM で実行コマンドを作成または更新します。
SourceScriptUri には、ストレージ BLOB の完全な SAS URL またはパブリック URL を指定できます。
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>
メモ
SAS URL は、BLOB への読み取りアクセスを提供する必要があります。 SAS URL の有効期限は 24 時間にすることをお勧めします。 SAS URL は、BLOB のオプションを使用して Azure portal で生成するか、または New-AzStorageBlobSASToken を使用して SAS トークンを生成することができます。
New-AzStorageBlobSASToken を使用して SAS トークンを生成する場合、SAS URL は、次のようになります。"ベース BLOB URL" + "?" + "New-AzStorageBlobSASToken からの SAS トークン"
実行コマンドの作成または更新後に VM の実行コマンド インスタンス ビューを取得する
インスタンス ビューを使用して VM の実行コマンドを取得します。 インスタンス ビューには、実行コマンド (成功、失敗など)、終了コード、標準出力、実行コマンドを使用してスクリプトを実行して生成された標準エラーの実行状態が含まれています。 0 以外の ExitCode は、実行に失敗したことを示します。
$x = Get-AzVMRunCommand -ResourceGroupName MyRG -VMName MyVM -RunCommandName MyRunCommand -Expand InstanceView
$x.InstanceView
出力例
ExecutionState : Succeeded
ExecutionMessage :
ExitCode : 0
Output :
output : uid=0(root) gid=0(root) groups=0(root)
HelloWorld
Error :
StartTime : 10/27/2022 9:10:52 PM
EndTime : 10/27/2022 9:10:55 PM
Statuses :
InstanceView.ExecutionState: ユーザーの実行コマンド スクリプトの状態。 スクリプトが成功したかどうかを確認するには、この状態を参照します。
ProvisioningState: 一般的な拡張機能のプロビジョニングのエンド ツー エンドの状態 (拡張機能プラットフォームが実行コマンド スクリプトをトリガーできたかどうか)。
ScriptLocalPath (ローカル スクリプト ファイル) を使用して VM で実行コマンドを作成または更新する
コマンドレットが実行されるクライアント コンピューター上にあるローカル スクリプト ファイルを使用して、VM で実行コマンドを作成または更新します。
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1"
SourceScript (スクリプト テキスト) を使用して VM で実行コマンドを作成または更新する
スクリプト コンテンツを -SourceScript パラメーターに直接渡す VM で実行コマンドを作成または更新します。 複数のコマンドを区切るには、; を使います
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVML -RunCommandName MyRunCommand2 -Location EastUS2EUAP -SourceScript "id; echo HelloWorld"
SourceCommandId を使用して VM で実行コマンドを作成または更新する
既存の commandId を使用して、VM で Run Command を作成または更新します。 使用可能な commandId は、Get-AzVMRunCommandDocument を使用して取得できます。
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceCommandId DisableWindowsUpdate
OutputBlobUri、ErrorBlobUri を使用して VM で実行コマンドを作成または更新し、標準出力と標準エラー メッセージを出力およびエラー追加 BLOB にストリーミングする
VM で実行コマンドを作成または更新し、標準出力と標準エラー メッセージを出力およびエラー追加 BLOB にストリーミングします。
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVML -RunCommandName MyRunCommand3 -Location EastUS2EUAP -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1" -OutputBlobUri <OutPutBlobUrI> -ErrorBlobUri "ErrorBlobUri
メモ
出力およびエラー BLOB は AppendBlob 型である必要があり、SAS URL は BLOB への読み取り、追加、作成、書き込みアクセスを提供する必要があります。 SAS URL の有効期限は 24 時間にすることをお勧めします。 出力またはエラー BLOB が存在しない場合は、AppendBlob 型の BLOB が作成されます。 SAS URL は、BLOB のオプションを使用して Azure portal で生成するか、または New-AzStorageBlobSASToken を使用して SAS トークンを生成することができます。
RunAsUser および RunAsPassword パラメーターを使用して別のユーザーとして VM で実行コマンドを作成または更新する
RunAsUser および RunAsPassword パラメーターを使用して、別のユーザーとして VM で実行コマンドを作成または更新します。 RunAs が正常に機能させるには、VM の管理者に問い合わせて、VM にユーザーが追加されていること、ユーザーが実行コマンドによってアクセスされるリソース (ディレクトリ、ファイル、ネットワークなど) にアクセスできること、また、Windows VM の場合は、VM で "セカンダリ ログオン" サービスが実行されていることを確認してください。
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1" -RunAsUser myusername -RunAsPassword mypassword
SourceScriptUri (ストレージ BLOB SAS URL) を用いて、仮想マシン スケール セット リソースに対する実行コマンドを作成または更新する
PowerShell スクリプトを含むストレージ BLOB の SAS URL を使用して、Windows Virtual Machine Scale Sets リソースで実行コマンドを作成または更新します。
Set-AzVmssVMRunCommand -ResourceGroupName MyRG0 -VMScaleSetName MyVMSS -InstanceId 0 -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>
メモ
SAS URL は、BLOB への読み取りアクセスを提供する必要があります。 SAS URL の有効期限は 24 時間にすることをお勧めします。 SAS URL は、BLOB のオプションを使用して Azure portal で生成するか、または New-AzStorageBlobSASToken を使用して SAS トークンを生成することができます。
New-AzStorageBlobSASToken を使用して SAS トークンを生成する場合、SAS URL 形式は次のようになります。ベース BLOB URL + "?" + New-AzStorageBlobSASToken からの SAS トークン。
Parameter および ProtectedParameter パラメーター (スクリプト化するパブリック パラメーターと保護されたパラメーター) を使用して VM インスタンスで実行コマンドを作成または更新する
パスワード、キーなどの機密性の高い入力をスクリプトに渡すには、ProtectedParameter を使用します。
$PublicParametersArray = @([Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='publicParam1';value='publicParam1value'},
>> [Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='publicParam2';value='publicParam2value'})
$ProtectedParametersArray = @([Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='secret1';value='secret1value'},
>> [Microsoft.Azure.PowerShell.Cmdlets.Compute.Models.Api20210701.IRunCommandInputParameter]@{name='secret2';value='secret2value'})
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri> -Parameter $PublicParametersArray -ProtectedParameter $ProtectedParametersArray
Windows: Parameter と ProtectedParameter は引数としてスクリプトに渡され、次のように実行されます:
myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2valueLinux: 名前付きパラメーターとその値は、.sh スクリプト内でアクセスできる環境構成に設定されます。 Nameless 引数の場合は、空の文字列を name 入力に渡します。 Nameless 引数はスクリプトに渡され、次のように実行されます
myscript.sh publicParam1value publicParam2value secret1value secret2value
VM から RunCommand リソースを削除する
VM に以前にデプロイされた RunCommand リソースを削除します。 スクリプトがまだ実行処理中の場合は、実行が終了されます。
Remove-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -RunCommandName "RunCommandName"
REST API
新しい実行コマンドをデプロイするには、VM 上で PUT を直接実行し、実行コマンド インスタンスに一意の名前を指定します。
PUT /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands/<runCommandName>?api-version=2023-03-01
{
"___location": "<___location>",
"properties": {
"source": {
"script": "Write-Host Hello World!",
"scriptUri": "<SAS URI of a storage blob with read access or public URI>",
"commandId": "<Id>"
},
"parameters": [
{
"name": "param1",
"value": "value1"
},
{
"name": "param2",
"value": "value2"
}
],
"protectedParameters": [
{
"name": "secret1",
"value": "value1"
},
{
"name": "secret2",
"value": "value2"
}
],
"runAsUser": "userName",
"runAsPassword": "userPassword",
"timeoutInSeconds": 3600,
"treatFailureAsDeploymentFailure": true,
"outputBlobUri": "< SAS URI of a storage append blob with read, add, create, write access>",
"errorBlobUri": "< SAS URI of a storage append blob with read, add, create, write access >"
}
}
メモ
- 入力ソースとして、インライン スクリプト、スクリプト URI、または組み込みのスクリプト コマンド ID を指定できます。 スクリプト URI は、読み取りアクセス権を持つストレージ BLOB SAS URI またはパブリック URI のいずれかです。
- 1 回のコマンド実行でサポートされるソース入力は 1 種類だけです。
- API バージョン 2023-03-01 以降では、 プロパティ
treatFailureAsDeploymentFailureを true に設定することで、スクリプトにエラーが発生したときにデプロイが失敗させることができます。 false に設定すると、ProvisioningState は、実行コマンドが拡張機能プラットフォームによって実行されたかどうかのみを反映します。 スクリプトが失敗した場合、スクリプトが失敗したかどうかは示されません。 - 実行コマンドでは、outputBlobUri パラメーターと errorBlobUri パラメーターを使用したストレージ BLOB への出力とエラーの書き込みがサポートされています。これは、大きなスクリプト出力の格納に使用できます。 読み取り、追加、作成、書き込みアクセス権を持つストレージ追加 BLOB の SAS URI を使用します。 BLOB は AppendBlob 型である必要があります。 そうでない場合、スクリプト出力またはエラー BLOB の書き込みが失敗します。 BLOB が既に存在する場合は上書きされます。 存在しない場合は作成されます。
VM 上で実行中の、実行コマンドのインスタンスを一覧表示する
GET /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands?api-version=2023-03-01
特定の実行コマンドのデプロイについて出力の詳細を取得する
GET /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands/<runCommandName>?$expand=instanceView&api-version=2023-03-01
特定の実行コマンドのデプロイを削除する
実行コマンドのインスタンスを削除することもできます。
DELETE /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands/<runCommandName>?api-version=2023-03-01
順序付けられたシーケンスでスクリプトをデプロイする
スクリプトを順番にデプロイするには、デプロイ テンプレートを使用して、シーケンシャル スクリプト間に dependsOn リレーションシップを指定します。
{
"type": "Microsoft.Compute/virtualMachines/runCommands",
"name": "secondRunCommand",
"apiVersion": "2019-12-01",
"___location": "[parameters('___location')]",
"dependsOn": <full resourceID of the previous other Run Command>,
"properties": {
"source": {
"script": "Write-Host Hello World!"
},
"timeoutInSeconds": 60
}
}
複数の実行コマンドを順番に実行する
デプロイ テンプレートを使用して複数の RunCommand リソースをデプロイする場合、既定では、それらは VM 上で同時に実行されます。 スクリプト同士に依存関係があり、実行の優先順序が設定されている場合は、dependsOn プロパティを使用してそれらを順番に実行することができます。
この例では、firstRunCommand が実行されてから、secondRunCommand が実行されます。
{
"$schema":"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion":"1.0.0.0",
"resources":[
{
"type":"Microsoft.Compute/virtualMachines/runCommands",
"name":"[concat(parameters('vmName'),'/firstRunCommand')]",
"apiVersion":"2023-03-01",
"___location":"[parameters('___location')]",
"dependsOn":[
"[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'))]"
],
"properties":{
"source":{
"script":"Write-Host First: Hello World!"
},
"parameters":[
{
"name":"param1",
"value":"value1"
},
{
"name":"param2",
"value":"value2"
}
],
"timeoutInSeconds":20
}
},
{
"type":"Microsoft.Compute/virtualMachines/runCommands",
"name":"[concat(parameters('vmName'),'/secondRunCommand')]",
"apiVersion":"2019-12-01",
"___location":"[parameters('___location')]",
"dependsOn":[
"[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'),'runcommands/firstRunCommand')]"
],
"properties":{
"source":{
"scriptUri":"http://github.com/myscript.ps1"
},
"timeoutInSeconds":60
}
}
]
}
次のステップ
VM 内でスクリプトやコマンドをリモートで実行するその他の方法については、「Windows VM でスクリプトを実行する」を参照してください。