適用対象: ✔️ Windows VM ✔️ フレキシブル スケール セット
実行コマンド機能では、仮想マシン (VM) エージェントを使用して Azure Windows VM 内でスクリプトが実行されます。 これらのスクリプトは、マシンやアプリケーションの一般的な管理に使用できます。 これらを使用すれば、VM のアクセスおよびネットワークの問題を迅速に診断して修正し、VM を良好な状態に戻すことができます。
更新されたマネージド実行コマンドでは、同じ VM エージェント チャネルを使用してスクリプトを実行し、元のアクション指向実行コマンドに対して次の機能強化を実現します。
- ARM デプロイ テンプレートを介して更新された実行コマンドをサポート
- 複数のスクリプトの並列実行
- スクリプトの順次実行
- ユーザーが指定したスクリプトのタイムアウト
- 実行時間が長い (時間または日単位) のスクリプトをサポート
- 安全な方法でシークレット (パラメーター、パスワード) を渡す
重要
マネージド実行コマンドは現在、Azure CLI、PowerShell、API で使用できます。
前提条件
サポートされている 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 スクリプトを実行します | |
| DisableNLA | ネットワーク レベル認証 (NLA) を無効にします。 変更を有効にするには、スクリプトの完了後に VM を再起動する必要があります。 スクリプト自体は VM を再起動しません。 | readme |
| DisableWindowsUpdate | Windows Update を使用して自動更新を無効にします。 | readme |
| EnableAdminAccount | ローカル管理者アカウントが無効になっているかどうかを確認し、有効にするかどうかを確認します。 | readme |
| EnableEMS | トラブルシューティング シナリオで、緊急管理サービス (EMS) を有効にして、シリアル コンソール接続を許可します。 | readme |
| EnableRemotePS | リモート PowerShell を有効にします。 | readme |
| EnableWindowsUpdate | Windows Update を使用して自動更新を有効にします。 | readme |
| IMDSCertCheck | IMDS の正常性を確認し、IMDS が依存している現在インストールされている証明書を分析します。 不足している場合は、追加の詳細と軽減手順が表示されます。 | readme |
| IPConfig | TCP/IP にバインドされた各アダプターの IP アドレス、サブネット マスク、および既定のゲートウェイの詳細情報を表示します。 使用方法については、「スクリプトの実行」を参照してください。 | readme |
| RDPSettings | レジストリ設定およびドメインのポリシー設定を確認します。 コンピューターがドメインの一部である場合、または設定を既定値に変更する場合は、ポリシー アクションを提案します。 | readme |
| ResetRDPCert | RDP リスナーに関連付けられている SSL 証明書を削除し、RDP リスナーのセキュリティを既定に復元します。 証明書に問題がある場合は、このスクリプトを使用します。 | readme |
| SetRDPPort | リモート デスクトップ接続の既定またはユーザー指定のポート番号を設定します。 ポートへの受信アクセスのファイアウォール規則を有効にします。 | readme |
| ウィンドウズ アクティベーション バリデーション | 現在の Windows ライセンスの状態 (アクティブ化されているかどうか) を確認し、マシンがプロパティアクティブ化されていない場合はアラートが生成されます。 | readme |
| WindowsGhostedNicValidationScript | このスクリプトは、PCI および VMBUS バス上のネットワーク アダプターについて Windows レジストリをスキャンし、それらを現在アクティブなネットワーク アダプターと比較して、ゴースト化された NIC を識別します。 ネットワークの問題のトラブルシューティングや古い NIC のクリーンアップに役立ちます。 | readme |
| Windowsアップグレード評価検証 | このスクリプトは、インプレース OS アップグレードの Windows マシン (クライアントまたはサーバー) の準備状況を評価するために設計されており、Azure Virtual Machines に関する特別な考慮事項があります。 これは、OS のバージョン、サポートされているアップグレード パス、システム ディスク領域、および信頼された起動、セキュア ブート、vTPM などの Azure セキュリティ機能を評価します。 | readme |
メモ
上記のコマンド ID は、Windows VM のマネージド実行コマンドに適用できます。 コマンド "Get-AzVMRunCommandDocument -Location {RegionName}" を使用して、すべての commandId を一覧表示できます。
実行コマンドへのアクセスの制限
実行コマンドを一覧表示したり、コマンドの詳細を表示したりするには、サブスクリプション レベルの Microsoft.Compute/locations/runCommands/read アクセス許可が必要です。 組み込みの閲覧者ロール以上のレベルには、このアクセス許可があります。
コマンドの実行には、Microsoft.Compute/virtualMachines/runCommand/write アクセス許可が必要です。
仮想マシンの共同作成者ロール以上のレベルには、このアクセス許可があります。
実行コマンドを使用するには、いずれかの組み込みロールを使用するか、カスタム ロールを作成します。
実行コマンドの使用
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"
複数の実行コマンドを順番に実行する
デプロイ テンプレートを使用して複数の 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 でスクリプトを実行する」を参照してください。