How to run scripts in your virtual machine with the Run command
The Run command uses a virtual machine agent (VM) to run scripts in an Azure Windows or Linux virtual machine.
Table of contents
Scripts can be embedded in properties or referenced to pre-released library scripts. The original command set was action-oriented. The updated command set, currently in public preview, is management-oriented and allows you to run multiple scripts with fewer restrictions. This article explains the difference between the two sets of run commands and helps you decide which is the right one to use in your scenario.
When to use an action or managed commands
The initial set of commands is action-oriented. You should consider using this set of commands in situations where it needs to be run:
- A small script to get stuff from a virtual machine
- A script to configure a virtual machine
- A single script for diagnostics
Action Commands
Run scripts in your Linux virtual machine using the Run Commands action
The Run Command feature uses a virtual machine agent to run shell scripts
in an Azure Linux virtual machine. You can use these scripts for general machine or application management. They can help you quickly diagnose and resolve virtual machine access and network problems, and restore virtual machines to a good state.
Advantages
- You can access your virtual machine in a number of ways.
- Run Command can run scripts on your virtual machine remotely using VM Agent.
- You use the Run command over the Azure portal, REST API, or Azure CLI for Linux virtual machines.
- This feature is useful in all situations where you want to run a script in a virtual machine.
- This is one of the only ways to
troubleshoot and fix virtual machines whose RDP or SSH ports are not open
due to network configuration or administrative users.
Available commands
Azure CLI
The following example uses the az vm run-command
command to run a shell script on an Azure Linux virtual machine.
az vm run-command invoke -g demoRG -n demoVM --command-id RunShellScript --scripts "apt-get update && apt-get install -y nginx"
Azure Portal
Navigate to a virtual machine in the Azure portal and select Run command
from the left menu under Activities. You will see a list of commands available to run on the virtual machine.
Select a command to run. Some commands may have optional or required input parameters. For these commands, the parameters are presented as text fields for you to provide input values. For each command, you can see the script being executed by expanding Viewscript.
RunShellScript is different from other commands because it allows you to provide your own custom script. After selecting the command, select Run to run the script. When the script completes, it returns the output and any errors to the output window. The following screenshot shows sample results from running the ifconfig
command.
PowerShell
The following example uses the Invoke-AzVMRunCommand
cmdlet to run a PowerShell script on an Azure virtual machine. The cmdlet expects the script referenced in the -ScriptPath parameter to be local to where the cmdlet is executed.
Invoke-AzVMRunCommand -ResourceGroupName 'demoRG' -Name 'demoVM' -CommandId 'RunShellScript' -ScriptPath '<pathToScript>' -Parameter @{"arg1" = "var1";"arg2" = "var2"}
Run scripts in your Windows virtual machine using the Run Commands action
The Run Command feature uses a virtual machine agent (VM) to run PowerShell scripts
in a Windows Azure virtual machine. You can use these scripts for general machine or application management. They can help you quickly diagnose and resolve virtual machine access and network problems, and restore virtual machines to a good state.
Advantages
You can access your virtual machine in a number of ways. Run Command can run scripts on your virtual machine remotely using VM Agent. You use Run Command over the Azure portal, REST API, or PowerShell for Windows virtual machines.
This feature is useful in all situations where you want to run a script in a virtual machine. This is one of the only ways to troubleshoot and repair virtual machines whose RDP or SSH ports are not open
due to network or admin user misconfiguration.
Available commands
Azure CLI
The following example uses the az vm run-command
command to run a shell script on a Windows Azure virtual machine.
# 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 demowinvm -g demoRG \
--scripts @script.ps1 --parameters "arg1=somefoo" "arg2=somebar"
Azure Portal
Navigate to a virtual machine in the Azure portal and select Run command from the left menu under Activities. You will see a list of commands available to run on the virtual machine.
Select a command to run. Some commands may have optional or required input parameters. For these commands, the parameters are presented as text fields for you to provide input values. For each command, you can see the script being executed by expanding Viewscript.
RunPowerShellScript is different from other commands because it allows you to provide your own custom script. After selecting the command, select Run to run the script. When the script completes, it returns the output and any errors to the output window. The following screenshot shows sample results from running the RDPSettings
command.
PowerShell
The following example uses the Invoke-AzVMRunCommand
cmdlet to run a PowerShell script on an Azure virtual machine. The cmdlet expects the script referenced in the -ScriptPath parameter to be local to where the cmdlet is executed.
Invoke-AzVMRunCommand -ResourceGroupName 'demoRG' -Name 'demowinvm' -CommandId 'RunPowerShellScript' -ScriptPath '<pathToScript>' -Parameter @{"arg1" = "var1";"arg2" = "var2"}
Managed Commands
The updated command set, currently in public preview, is management-oriented. Consider using managed run commands if your needs fit the following examples:
- Scripts must run as part of the VM deployment.
- Periodic script execution is required.
- Multiple scripts must be executed sequentially.
- Start the virtual machine by running the installation scripts.
- Publish a custom script to share and reuse.
Run scripts in your Linux virtual machine using managed run commands
The update-managed run command uses the same VM agent channel to run scripts and provides the following improvements over the original action-driven run command:
- runtime is updated through the deployment model deploy ARM
- Parallel execution of multiple scripts
- Sequential execution of scripts
- RunCommand script can be canceled
- User-specified script timeout
- Supports long running scripts (hours/days)
- Pass secrets (parameters, passwords) securely
Sign up to preview
You must register your subscription to use Managed Run Command during public preview. Go to configuring preview features in Azure subscriptions for instructions on registering and using the RunCommandPreview
feature name.
Available commands
Azure CLI
The following examples use the run az vm command
to run shell scripts on an Azure Linux virtual machine.
Executing a script with VM
This command will feed the script to the virtual machine, run it and return the captured output.
az vm run-command create --name "demoRunCommand" --vm-name "demoVM" --resource-group "demoRG" --script "echo Welcome to Cloud!"
List all the RunCommand resources deployed in a virtual machine
This command will return a complete list of previously deployed commands along with their properties.
az vm run-command list --vm-name "demoVM" --resource-group "demoRG"
Get execution status and results
This command retrieves the progress of the current running process, including the last exit, start/end time, exit code, and terminal status of the run.
az vm run-command show --name "demoRunCommand" --vm-name "demoVM" --resource-group "demoRG" --expand instanceView
Remove RunCommand resources from VM
Remove the RunCommand resource that was previously deployed to the VM. If script execution is still in progress, execution will be interrupted.
az vm run-command delete --name "demoRunCommand" --vm-name "demoVM" --resource-group "demoRG"
PowerShell
Run a script with VM
This command will feed the script to the virtual machine, run it and return the captured output.
Set-AzVMRunCommand -ResourceGroupName "demoRG" -VMName "demoVM" -Location "WestUS" -RunCommandName "RunCommandName" –SourceScript "echo Welcome to Cloud!"
List all the RunCommand resources deployed in a virtual machine
This command will return a complete list of previously deployed commands along with their properties.
Get-AzVMRunCommand -ResourceGroupName "demoRG" -VMName "demoVM"
Get execution status and results
This command retrieves the progress of the current running process, including the last exit, start/end time, exit code, and terminal status of the run.
Get-AzVMRunCommand -ResourceGroupName "demoRG" -VMName "demoVM" -RunCommandName "RunCommandName" -Expand instanceView
Remove RunCommand resources from VM
Remove the RunCommand resource that was previously deployed to the VM. If script execution is still in progress, execution will be interrupted.
Remove-AzVMRunCommand -ResourceGroupName "demoRG" -VMName "demoVM" -RunCommandName "RunCommandName"
Run scripts in your Windows virtual machine using managed run commands
Updated managed run command uses the same VM agent channel to run scripts and provides the following improvements over the original action-driven run command:
- Support for executing updated commands via ARM deployment templates
- Parallel execution of multiple scripts
- Sequential execution of scripts
- RunCommand script can be aborted
- User-specified script timeout
- Support for long-running (hours / day) scripts
- Disclose secrets (parameters, passwords) in a secure manner
Sign up to preview
You must register for a subscription to use Managed Run Command during public preview. For registration instructions, go to Set up the preview feature on your Azure subscription and use the feature name RunCommandPreview
.
Available commands
Azure CLI
The following example uses az vm run-command to run a shell script on an Azure Windows VM.
Run the script on the VM
This command sends the script to the VM for execution and returns the captured output.
az vm run-command create --name "demoRunCommand" --vm-name "demoVM" --resource-group "demoRG" --script "echo Welcome to Cloud!"
Lists all RunCommand resources deployed on the VM
This command returns a complete list of previously provided execution commands and their properties.
az vm run-command list --vm-name "demoVM" --resource-group "demoRG"
Get execution status and results
This command gets the current execution progress, such as last output, start / end time, end code, and exit status of the execution.
az vm run-command show --name "demoRunCommand" --vm-name "demoVM" --resource-group "demoRG" --expand instanceView
Remove the RunCommand resource from the VM
Delete the RunCommand resource that was previously deployed on the VM. If the script is still running, it will stop running.
az vm run-command delete --name "demoRunCommand" --vm-name "demoVM" --resource-group "demoRG"
Powershell
Run the script in the VM
This command sends the script to the VM for execution and returns the captured output.
Set-AzVMRunCommand -ResourceGroupName "demoRG" -VMName "demoVM" -Location "WestUS" -RunCommandName "RunCommandName" –SourceScript "echo Welcome to Cloud!"
Lists all RunCommand resources deployed on the VM
This command returns a complete list of previously provided execution commands and their properties.
Get-AzVMRunCommand -ResourceGroupName "demoRG" -VMName "demoVM"
Get execution status and results
This command gets the current execution progress, such as last output, start / end time, end code, and exit status of the execution.
Get-AzVMRunCommand -ResourceGroupName "demoRG" -VMName "demoVM" -RunCommandName "RunCommandName" -Expand instanceView
Remove the RunCommand resource from the VM
Delete the RunCommand resource that was previously deployed on the VM. If the script is still running, it will stop running.
Remove-AzVMRunCommand -ResourceGroupName "demoRG" -VMName "demoVM" -RunCommandName "RunCommandName"
Gratitude for perusing my article till end. I hope you realized something unique today. If you enjoyed this article then please share to your buddies and if you have suggestions or thoughts to share with me then please write in the comment box.