Dela via


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-AzStorageBlobSASTokendin 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-AzStorageBlobSASTokenSAS-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 treatFailureAsDeploymentFailuresant , 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.