Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: ✔️ Виртуальные машины Windows ✔️ Гибкие масштабируемые наборы
Функция команды запуска использует агент виртуальной машины для выполнения скриптов в виртуальной машине Windows Azure. Эти сценарии можно использовать для общего управления компьютерами или приложениями. Они могут помочь вам быстро диагностировать и исправлять проблемы доступа к виртуальной машине и сети, а также восстановить работоспособность виртуальной машины.
Обновленная управляемая функция "Выполнение команд" использует один и тот же канал агента виртуальных машин для выполнения скриптов и предоставляет следующие усовершенствования в рамках данной функции, ориентированной на исходное действие:
- поддержка обновленной функции "Выполнение команд" с помощью шаблона развертывания ARM;
- параллельное выполнение нескольких скриптов;
- последовательное выполнение скриптов;
- Время ожидания скрипта, заданного пользователем
- Поддержка скриптов, выполняющихся в течение длительных периодов (часов/дней);
- безопасная передача секретов (параметров и паролей).
Внимание
Managed Run Command в настоящее время доступна в Azure CLI, PowerShell и API.
Предварительные условия
Поддерживаемые операционные системы Windows
| Версия ОС | x64 | ARM64 |
|---|---|---|
| Windows 10 | Поддерживается | Поддерживается |
| Windows 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 | Поддерживается | Поддерживается |
| Windows Server 2025 г. | Поддерживается | Поддерживается |
| Windows Server 2025 Core | Поддерживается | Поддерживается |
| Windows Server 2025 Azure Edition | Поддерживается | Поддерживается |
Доступные команды
| CommandID | Описание | Дополнительные сведения |
|---|---|---|
| RunPowerShellScript | Выполняет скрипт PowerShell. | |
| DisableNLA | Отключает проверку подлинности на уровне сети (NLA). Чтобы изменения вступили в силу, необходимо перезапустить виртуальную машину после завершения скрипта. Сам скрипт не перезапускает виртуальную машину. | readme |
| DisableWindowsUpdate | Отключите автоматическое обновление с помощью Центра обновления Windows. | readme |
| EnableAdminAccount | Проверяет, отключена ли учетная запись локального администратора и включена ли она. | readme |
| EnableEMS | Включите службы аварийного управления (EMS), чтобы разрешить последовательное подключение консоли в сценариях устранения неполадок. | readme |
| EnableRemotePS | Активируйте удаленную оболочку PowerShell. | readme |
| EnableWindowsUpdate | Включение автоматических обновлений с помощью Центра обновления Windows. | readme |
| IMDSCertCheck | Проверяет работоспособность IMDS, а затем анализирует установленные в настоящее время сертификаты, от которых зависит IMDS. Если отсутствуют, отображаются дополнительные сведения и шаги по устранению рисков. | readme |
| IPConfig | Подробные сведения о IP-адресе, маске подсети и шлюзе по умолчанию для каждого адаптера, привязанного к TCP/IP. Сведения об использовании см. в разделе "Запуск сценариев" | readme |
| RDPSettings | Проверяет параметры реестра и параметры политики домена. Предлагает действия политики, если компьютер является частью домена или изменяет параметры на значения по умолчанию. | readme |
| ResetRDPCert | Удаляет SSL-сертификат, привязанный к прослушивателю RDP, и восстанавливает безопасность прослушивателя RDP по умолчанию. Используйте этот сценарий при появлении проблем с сертификатом. | readme |
| SetRDPPort | Задает номер порта по умолчанию или пользователя для подключений к удаленному рабочему столу. Включает правило брандмауэра для входящего доступа к порту. | readme |
| Активация и проверка Windows | Проверяет текущее состояние лицензии Windows (активировано или нет) и создается оповещение, если компьютер не активируется. | readme |
| WindowsGhostedNicValidationScript | Этот скрипт сканирует реестр Windows в поисках сетевых адаптеров на шинах PCI и VMBUS, сравнивает их с активными сетевыми адаптерами и определяет устаревшие сетевые адаптеры. Полезно для устранения проблем с сетью или очистки старых сетевых адаптеров. | readme |
| ОценкаВалидацииОбновленияWindows | Этот скрипт предназначен для оценки готовности компьютера Windows (клиента или сервера) к обновлению ос на месте с особыми рекомендациями для виртуальных машин Azure. Она оценивает версию ОС, поддерживаемые пути обновления, дисковое пространство системы и функции безопасности Azure, такие как доверенный запуск, безопасная загрузка и vTPM. | readme |
Примечание.
Приведенные выше идентификаторы команд применимы к управляемым командам запуска для виртуальных машин Windows. Вы можете перечислить все командные идентификаторы с помощью команды "Get-AzVMRunCommandDocument -Location {RegionName}".
Ограничение доступа к команде запуска
Для получения списка выполняемых команд или отображения сведений о команде требуется разрешение Microsoft.Compute/locations/runCommands/read на уровне подписки. Это разрешение имеется у встроенной роли Читатель и более высоких уровней.
Для выполнения команды требуется разрешение Microsoft.Compute/virtualMachines/runCommand/write. Это разрешение имеется у роли Участник виртуальной машины и более высоких уровней.
Можно использовать одну из встроенных ролей или создать пользовательскую роль для использования функции выполнения команд.
Использование команд выполнения
Выполнение скрипта с виртуальной машиной
Эта команда предоставляет скрипт виртуальной машине, выполняет его и возвращает захваченные выходные данные.
Set-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -Location "EastUS" -RunCommandName "RunCommandName" –SourceScript "echo Hello World!"
Выполнение скрипта на виртуальной машине с использованием параметра SourceScriptUri
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>”
Выполнение длительной команды запуска на виртуальной машине
Время выполнения должно превышать время ожидания по умолчанию, равное 90 минутам. Он должен выполняться в течение 100 минут (см. параметр TimeoutInSecond на 6,000 секунд), если ожидается, что скрипт будет выполняться так долго. Через 100 минут выполнение скрипта должно остановиться.
Set-AzVMRunCommand -ResourceGroupName MyRG -VMName MyVM -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri> -AsyncExecution -TimeoutInSecond 6000
Вывод списка всех развернутых ресурсов RunCommand на виртуальной машине
Эта команда возвращает полный список ранее развернутых команд выполнения вместе со своими свойствами.
Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM"
Получение состояния выполнения и результатов
Эта команда извлекает текущий ход выполнения, включая последние выходные данные, время начала и окончания, код выхода и состояние терминала выполнения.
Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -RunCommandName "RunCommandName" -Expand InstanceView
Создание или обновление команды запуска на виртуальной машине с помощью SourceScriptUri (URL-адрес SAS BLOB-объекта хранилища)
Создайте или обновите команду запуска на виртуальной машине Windows, используя SAS URL блоба хранилища, содержащего скрипт PowerShell.
SourceScriptUri может быть полным URL-адресом SAS или общедоступным URL-адресом BLOB-объекта хранилища.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>
Примечание.
URL SAS должен предоставлять доступ для чтения к объекту BLOB. Для URL-адреса SAS предлагается срок действия 24 часа. URL-адреса SAS можно создать на портале Azure с помощью параметров BLOB или маркера SAS.New-AzStorageBlobSASToken При создании токена SAS с помощью New-AzStorageBlobSASToken, ваш URL-адрес SAS = "базовый URL-адрес Blob" + "?" + "токен SAS из New-AzStorageBlobSASToken"
Получение представления экземпляра команд запуска для виртуальной машины после создания или обновления команды выполнения
Получите команду выполнения для виртуальной машины с просмотром экземпляра. Представление экземпляра содержит состояние выполнения команды Run Command (успешное выполнение, ошибка и т. д.), код выхода, стандартный вывод и стандартную ошибку, созданные при выполнении скрипта. Ненулевой 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: состояние полной подготовки общего расширения от начала до конца (завершила ли платформа расширений выполнение сценария команды запуска или нет).
Создание или обновление команды run на виртуальной машине с помощью ScriptLocalPath (локальный файл скрипта)
Создайте или обновите команду запуска на виртуальной машине с помощью локального файла скрипта, который находится на клиентском компьютере, где выполняется командлет.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1"
Создание или обновление команды запуска на виртуальной машине с помощью SourceScript (текст скрипта)
Создайте или обновите команду запуска на виртуальной машине, передавая содержимое скрипта непосредственно параметру -SourceScript. Использование ; для разделения нескольких команд
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVML -RunCommandName MyRunCommand2 -Location EastUS2EUAP -SourceScript "id; echo HelloWorld"
Создание или обновление команды run на виртуальной машине с помощью SourceCommandId
Создайте или обновите команду run на виртуальной машине с помощью предварительного идентификатора commandId. Доступные командные идентификаторы можно получить с помощью Get-AzVMRunCommandDocument.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceCommandId DisableWindowsUpdate
Создание или обновление команды выполнения на виртуальной машине с помощью OutputBlobUri, ErrorBlobUri для потоковой передачи стандартных выходных данных и стандартных сообщений об ошибках для вывода и добавления больших двоичных объектов
Создайте или обновите команду run на виртуальной машине и потоковую передачу стандартных выходных данных и стандартных сообщений об ошибках для вывода и добавления больших двоичных объектов.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVML -RunCommandName MyRunCommand3 -Location EastUS2EUAP -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1" -OutputBlobUri <OutPutBlobUrI> -ErrorBlobUri "ErrorBlobUri
Примечание.
Выходные и ошибочные блобы должны быть типа AppendBlob, а URL-адреса SAS должны предоставлять доступ для чтения, добавления, создания и записи в блобы. Для URL-адреса SAS предлагается срок действия 24 часа. Если blob-объект для вывода или ошибок не существует, создается blob-объект типа AppendBlob. URL-адреса SAS можно создать на портале Azure, используя параметры объекта BLOB или маркер SAS.New-AzStorageBlobSASToken
Создание или обновление команды run на виртуальной машине в качестве другого пользователя с помощью параметров RunAsUser и RunAsPassword
Создайте или обновите команду выполнения на ВМ в качестве другого пользователя с помощью параметров RunAsUser и RunAsPassword. Чтобы RunAs функционировал должным образом, обратитесь к администратору виртуальной машины и убедитесь, что пользователь добавлен на виртуальной машине, имеет доступ к ресурсам, к которым обращается команда Run (каталоги, файлы, сеть и так далее), а в случае с виртуальной машиной Windows служба "Вторичный вход" запущена на виртуальной машине.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1" -RunAsUser myusername -RunAsPassword mypassword
Создавайте или обновляйте команду Run в ресурсе наборов масштабируемых виртуальных машин с помощью SourceScriptUri (URL-адрес SAS для BLOB-объекта хранилища)
Создайте или обновите команду выполнения на ресурсе масштабируемых наборов виртуальных машин Windows, используя SAS URL-адрес большого двоичного объекта хранилища, содержащего скрипт PowerShell.
Set-AzVmssVMRunCommand -ResourceGroupName MyRG0 -VMScaleSetName MyVMSS -InstanceId 0 -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>
Примечание.
URL SAS должен предоставлять доступ для чтения к объекту BLOB. Срок действия 24 часов предлагается для URL-адреса SAS. URL-адреса SAS можно создать на портале Azure с помощью параметров объектов Blob или токена SAS.New-AzStorageBlobSASToken Если вы создаете токен SAS с помощью New-AzStorageBlobSASToken, формат URL-адреса SAS: базовый URL-адрес объекта Blob + "?" + токен SAS из New-AzStorageBlobSASToken.
Создайте или обновите команду Run в экземпляре виртуальной машины с использованием параметров Parameter и ProtectedParameter (публичные и защищенные параметры для сценария).
Используйте 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: Параметры и ProtectedParameters передаются скрипту в виде аргументов и запускаются следующим образом -
myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2valueLinux: именованные параметры и его значения задаются в конфигурации среды, которая должна быть доступна в скрипте .sh. Для аргументов без имен передайте пустую строку для ввода имени. Безымянные аргументы передаются в скрипт и выполняются следующим образом:
myscript.sh publicParam1value publicParam2value secret1value secret2value
Удаление ресурса RunCommand из виртуальной машины
Удалите ресурс RunCommand, ранее развернутый на виртуальной машине. Если скрипт всё ещё выполняется, выполнение прекращается.
Remove-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -RunCommandName "RunCommandName"
Последовательное выполнение нескольких команд 'Выполнить'
По умолчанию при развертывании нескольких ресурсов RunCommand с помощью шаблона развертывания они будут выполняться одновременно на виртуальной машине. Если существует зависимость от скриптов и имеется предпочтительный порядок выполнения, можно использовать свойство dependsOn, чтобы они выполнялись последовательно.
В этом примере secondRunCommand будет выполняться после firstRunCommand.
{
"$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
}
}
]
}
Следующие шаги
Сведения о других способах удаленного выполнения сценариев и команд на виртуальной машине см. в разделе Выполнение сценариев в виртуальных машинах Windows.