Köra skript på den virtuella Windows-datorn med hjälp av hanterade Kör kommando
Gäller för: ✔️ Flexibla skalningsuppsättningar för virtuella Windows-datorer ✔️
Viktigt!
Kommandot Hanterad körning är för närvarande tillgängligt i Azure CLI, PowerShell och API för tillfället. Portalfunktioner kommer snart att vara tillgängliga.
Funktionen Kör kommando använder den virtuella datoragenten (VM) för att köra skript i en virtuell Azure Windows-dator. Du kan använda de här skripten till allmän hantering av datorer eller program. De kan hjälpa dig att snabbt diagnostisera och åtgärda problem med åtkomst till virtuella datorer och nätverk och få tillbaka den virtuella datorn till ett bra tillstånd.
Det uppdaterade hanterade körningskommandot använder samma VM-agentkanal för att köra skript och ger följande förbättringar jämfört med det ursprungliga åtgärdsorienterade körningskommandot:
- Stöd för uppdaterade Kör kommando via ARM-distributionsmall
- Parallellkörning av flera skript
- Sekventiell körning av skript
- Användarangiven skripttidsgräns
- Stöd för långvariga skript (timmar/dagar)
- Skicka hemligheter (parametrar, lösenord) på ett säkert sätt
Förutsättningar
Windows OS stöds
Windows OS | x64 |
---|---|
Windows 10 | Stöds |
Windows 11 | Stöds |
Windows Server 2008 SP2 | Stöds |
Windows Server 2008 R2 | Stöds |
Windows Server 2012 | Stöds |
Windows Server 2012 R2 | Stöds |
Windows Server 2016 | Stöds |
Windows Server 2016 Core | Stöds |
Windows Server 2019 | Stöds |
Windows Server 2019 Core | Stöds |
Windows Server 2022 | Stöds |
Windows Server 2022 Core | Stöds |
Begränsa åtkomst till Run Command
För att visa körningskommandona eller visa information om ett kommando krävs behörigheten Microsoft.Compute/locations/runCommands/read
på prenumerationsnivå. Den inbyggda rollen Läsare och högre nivåer har den här behörigheten.
Om du kör ett kommando krävs behörigheten Microsoft.Compute/virtualMachines/runCommand/write
. Rollen Virtuell datordeltagare och högre nivåer har den här behörigheten.
Du kan använda någon av de inbyggda rollerna eller skapa en anpassad roll för att använda Kör kommando.
Azure CLI
I följande exempel används az vm run-command för att köra shell-skript på en virtuell Azure Windows-dator.
Köra ett skript med den virtuella datorn
Det här kommandot levererar skriptet till den virtuella datorn, kör det och returnerar de insamlade utdata.
az vm run-command create --name "myRunCommand" --vm-name "myVM" --resource-group "myRG" --script "Write-Host Hello World!"
Visa en lista över alla distribuerade RunCommand-resurser på en virtuell dator
Det här kommandot returnerar en fullständig lista över tidigare distribuerade Körningskommandon tillsammans med deras egenskaper.
az vm run-command list --vm-name "myVM" --resource-group "myRG"
Hämta körningsstatus och resultat
Det här kommandot hämtar aktuell körningsstatus, inklusive senaste utdata, start-/sluttid, slutkod och terminaltillstånd för körningen.
az vm run-command show --name "myRunCommand" --vm-name "myVM" --resource-group "myRG" --expand instanceView
Kommentar
Utdata- och felfälten i instanceView
är begränsade till de senaste 4 KB.
Om du vill komma åt fullständiga utdata och fel har du möjlighet att vidarebefordra utdata och feldata till lagrings-tilläggsblobar med hjälp av -outputBlobUri
och parametrar när du kör Kör kommando med eller Set-AzVMRunCommand
Set-AzVMssRunCommand
-errorBlobUri
.
Ta bort RunCommand-resurs från den virtuella datorn
Ta bort Den RunCommand-resurs som tidigare distribuerats på den virtuella datorn. Om skriptkörningen fortfarande pågår avslutas körningen.
az vm run-command delete --name "myRunCommand" --vm-name "myVM" --resource-group "myRG"
PowerShell
Köra ett skript med den virtuella datorn
Det här kommandot levererar skriptet till den virtuella datorn, kör det och returnerar de insamlade utdata.
Set-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -Location "EastUS" -RunCommandName "RunCommandName" –SourceScript "echo Hello World!"
Köra ett skript på den virtuella datorn med hjälp av SourceScriptUri-parametern
OutputBlobUri
och ErrorBlobUri
är valfria parametrar.
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>”
Visa en lista över alla distribuerade RunCommand-resurser på en virtuell dator
Det här kommandot returnerar en fullständig lista över tidigare distribuerade Körningskommandon tillsammans med deras egenskaper.
Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM"
Hämta körningsstatus och resultat
Det här kommandot hämtar aktuell körningsstatus, inklusive senaste utdata, start-/sluttid, slutkod och terminaltillstånd för körningen.
Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -RunCommandName "RunCommandName" -Expand InstanceView
Skapa eller uppdatera körkommandot på en virtuell dator med Hjälp av SourceScriptUri (SAS-URL för lagringsblob)
Skapa eller uppdatera körkommandot på en virtuell Windows-dator med hjälp av en SAS-URL för en lagringsblob som innehåller ett PowerShell-skript. SourceScriptUri
kan vara en lagringsblobs fullständiga SAS-URL eller offentliga URL.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>
Kommentar
SAS-URL:en måste ge läsbehörighet till bloben. En förfallotid på 24 timmar föreslås för SAS-URL: en. SAS-URL:er kan genereras på Azure-portalen med hjälp av blobalternativen eller SAS-token med .New-AzStorageBlobSASToken
Om du genererar SAS-token med , New-AzStorageBlobSASToken
din SAS-URL = "basblob-URL" + "?" + "SAS-token från New-AzStorageBlobSASToken
"
Hämta en körningskommandoinstansvy för en virtuell dator när du har skapat eller uppdaterat körningskommandot
Hämta ett körningskommando för virtuell dator med instansvyn. Instansvyn innehåller körningstillståndet för körningskommandot (Lyckades, Misslyckades osv.), slutkod, standardutdata och standardfel som genereras genom att köra skriptet med körkommandot. En exitcode som inte är noll anger en misslyckad körning.
$x = Get-AzVMRunCommand -ResourceGroupName MyRG -VMName MyVM -RunCommandName MyRunCommand -Expand InstanceView
$x.InstanceView
Exempel på utdata
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
: Status för användarens körkommandoskript. Se det här tillståndet för att veta om skriptet lyckades eller inte.
ProvisioningState
: Status för den allmänna tilläggsetablering från slutpunkt till slutpunkt (oavsett om tilläggsplattformen kunde utlösa Kör kommandoskript eller inte).
Skapa eller uppdatera körkommandot på en virtuell dator med hjälp av ScriptLocalPath (lokal skriptfil)
Skapa eller uppdatera körkommandot på en virtuell dator med hjälp av en lokal skriptfil som finns på klientdatorn där cmdleten körs.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1"
Skapa eller uppdatera körkommandot på en virtuell dator med Hjälp av SourceScript (skripttext)
Skapa eller uppdatera körkommandot på en virtuell dator som skickar skriptinnehållet direkt till parametern -SourceScript. Använd ;
för att separera flera kommandon
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVML -RunCommandName MyRunCommand2 -Location EastUS2EUAP -SourceScript "id; echo HelloWorld"
Skapa eller uppdatera körkommandot på en virtuell dator med SourceCommandId
Skapa eller uppdatera körkommandot på en virtuell dator med hjälp av befintligt commandId. Tillgängliga commandIds kan hämtas med hjälp av Get-AzVMRunCommandDocument.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceCommandId DisableWindowsUpdate
Skapa eller uppdatera körkommandot på en virtuell dator med OutputBlobUri, ErrorBlobUri för att strömma standardutdata och standardfelmeddelanden till utdata och fel Lägg till blobar
Skapa eller uppdatera Kör kommando på en virtuell dator och strömma standardutdata och standardfelmeddelanden till utdata och fel Lägg till blobar.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVML -RunCommandName MyRunCommand3 -Location EastUS2EUAP -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1" -OutputBlobUri <OutPutBlobUrI> -ErrorBlobUri "ErrorBlobUri
Kommentar
Utdata- och felblobbar måste vara typen AppendBlob och deras SAS-URL:er måste tillhandahålla läs-, tilläggs-, skapa- och skrivåtkomst till bloben. En förfallotid på 24 timmar föreslås för SAS-URL: en. Om det inte finns någon utdata- eller felblob skapas en blob av typen AppendBlob. SAS-URL:er kan genereras på Azure-portalen med hjälp av blobalternativen eller SAS-token från att använda New-AzStorageBlobSASToken
.
Skapa eller uppdatera körkommandot på en virtuell dator som en annan användare med hjälp av Parametrarna RunAsUser och RunAsPassword
Skapa eller uppdatera Kör kommando på en virtuell dator som en annan användare med hjälp av RunAsUser
och RunAsPassword
parametrar. För att RunAs ska fungera korrekt kontaktar du administratören för den virtuella datorn och kontrollerar att användaren har lagts till på den virtuella datorn, att användaren har åtkomst till resurser som används av körkommandot (kataloger, filer, nätverk osv.) och i händelse av virtuell Windows-dator körs tjänsten "Sekundär inloggning" på den virtuella datorn.
Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1" -RunAsUser myusername -RunAsPassword mypassword
Skapa eller uppdatera Kör-kommandot på en vm-skalningsuppsättningsresurs med hjälp av SourceScriptUri (SAS-URL för lagringsblob)
Skapa eller uppdatera Kör-kommandot på en Resurs för Skalningsuppsättningar för virtuella Windows-datorer med hjälp av en SAS-URL för en lagringsblob som innehåller ett PowerShell-skript.
Set-AzVmssVMRunCommand -ResourceGroupName MyRG0 -VMScaleSetName MyVMSS -InstanceId 0 -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>
Kommentar
SAS-URL:en måste ge läsbehörighet till bloben. En förfallotid på 24 timmar föreslås för SAS-URL: en. SAS-URL:er kan genereras på Azure-portalen med blobalternativ eller SAS-token med .New-AzStorageBlobSASToken
Om du genererar SAS-token med är New-AzStorageBlobSASToken
SAS-URL-formatet: basblob-URL + "?" + SAS-token från New-AzStorageBlobSASToken
.
Skapa eller uppdatera körkommandot på en virtuell datorinstans med parametrarna Parameter och ProtectedParameter (offentliga och skyddade parametrar till skript)
Använd ProtectedParameter för att skicka känsliga indata till skript, till exempel lösenord, nycklar osv.
$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: Parametrar och ProtectedParameters skickas till skriptet när argument skickas till skriptet och körs så här –
myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2value
Linux: Namngivna parametrar och dess värden är inställda på miljökonfiguration, som ska vara tillgängliga i .sh skriptet. För Namnlösa argument skickar du en tom sträng för att namnge indata. Namnlösa argument skickas till skriptet och körs så här -
myscript.sh publicParam1value publicParam2value secret1value secret2value
Ta bort RunCommand-resurs från den virtuella datorn
Ta bort Den RunCommand-resurs som tidigare distribuerats på den virtuella datorn. Om skriptkörningen fortfarande pågår avslutas körningen.
Remove-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -RunCommandName "RunCommandName"
REST-API
Om du vill distribuera ett nytt Körningskommando kör du en PUT på den virtuella datorn direkt och anger ett unikt namn för körkommandoinstansen.
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 >"
}
}
Kommentar
- Du kan ange ett infogat skript, en skript-URI eller ett inbyggt skriptkommando-ID som indatakälla. Skript-URI är antingen SAS-URI för lagringsblob med läsåtkomst eller offentlig URI.
- Endast en typ av källindata stöds för en kommandokörning.
- Från och med API-version 2023-03-01 kan du ställa in egenskapen
treatFailureAsDeploymentFailure
på sant , vilket gör att distributionen misslyckas när det uppstår ett fel i skriptet. Om värdet är falskt återspeglar ProvisioningState endast om körningskommandot kördes eller inte av tilläggsplattformen. Det skulle inte ange om skriptet misslyckades vid skriptfel. - Kör kommando har stöd för att skriva utdata och fel till Lagringsblobbar med hjälp av outputBlobUri- och errorBlobUri-parametrar, som kan användas för att lagra stora skriptutdata. Använd SAS-URI för en lagringstilläggsblob med läs-, tilläggs-, skapa- och skrivåtkomst. Blobben ska vara av typen AppendBlob. Annars skulle det inte gå att skriva skriptutdata eller felblob. Bloben skrivs över om den redan finns. Den skapas om den inte finns.
Visa en lista över körningsinstanser av körkommandot på en virtuell dator
GET /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands?api-version=2023-03-01
Hämta utdatainformation för en specifik körningskommandodistribution
GET /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands/<runCommandName>?$expand=instanceView&api-version=2023-03-01
Ta bort en specifik körningskommandodistribution
Du kan också ta bort instansen av Kör kommando.
DELETE /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands/<runCommandName>?api-version=2023-03-01
Distribuera skript i en ordnad sekvens
Om du vill distribuera skript sekventiellt använder du en distributionsmall och anger en dependsOn
relation mellan sekventiella skript.
{
"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
}
}
Köra flera körningskommandon sekventiellt
Om du distribuerar flera RunCommand-resurser med hjälp av distributionsmallen körs de som standard samtidigt på den virtuella datorn. Om du har ett beroende av skripten och en önskad körningsordning kan du använda dependsOn
egenskapen för att få dem att köras sekventiellt.
I det här exemplet körs secondRunCommand efter 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
}
}
]
}
Nästa steg
Mer information om andra sätt att fjärrköra skript och kommandon på den virtuella datorn finns i Köra skript på den virtuella Windows-datorn.