Spouštění skriptů ve virtuálním počítači s Windows pomocí spravovaných funkcí Spustit příkaz

Platí pro: ✔️ Flexibilní škálovací sady virtuálních ✔️ počítačů s Windows

Důležité

Příkaz spravovaného spuštění je momentálně k dispozici v Azure CLI, PowerShellu a rozhraní API. Funkce portálu budou brzy k dispozici.

Funkce Spustit příkaz používá agenta virtuálního počítače ke spouštění skriptů na virtuálním počítači Azure s Windows. Tyto skripty můžete použít k obecné správě počítačů nebo aplikací. Můžou vám pomoct rychle diagnostikovat a opravovat problémy s přístupem k virtuálním počítačům a sítí a získat virtuální počítač zpět do dobrého stavu.

Aktualizovaný spravovaný příkaz spustit používá ke spouštění skriptů stejný kanál agenta virtuálního počítače a poskytuje následující vylepšení oproti původnímu příkazu spustit:

  • Podpora aktualizované funkce Spustit příkaz prostřednictvím šablony nasazení ARM
  • Paralelní spouštění více skriptů
  • Sekvenční spouštění skriptů
  • Časový limit skriptu zadaný uživatelem
  • Podpora dlouho běžících skriptů (hodiny/dny)
  • Zabezpečené předávání tajných kódů (parametry, hesla)

Požadavky

Podporováno operačního systému Windows

Operační systém Windows x64
Windows 10 Podporováno
Windows 11 Podporováno
Windows Server 2008 SP2 Podporováno
Windows Server 2008 R2 Podporováno
Windows Server 2012 Podporováno
Windows Server 2012 R2 Podporováno
Windows Server 2016 Podporováno
Windows Server 2016 Core Podporováno
Windows Server 2019 Podporováno
Windows Server 2019 Core Podporováno
Windows Server 2022 Podporováno
Windows Server 2022 Core Podporováno

Omezení přístupu k funkci Spustit příkaz

Výpis příkazů spuštění nebo zobrazení podrobností příkazu vyžaduje Microsoft.Compute/locations/runCommands/read oprávnění na úrovni předplatného. Tato oprávnění mají předdefinovaná role Čtenář a vyšší úrovně.

Spuštění příkazu vyžaduje Microsoft.Compute/virtualMachines/runCommand/write oprávnění. Role Přispěvatel virtuálních počítačů a vyšší úrovně mají toto oprávnění.

Můžete použít některou z předdefinovaných rolí nebo vytvořit vlastní roli pro použití příkazu Spustit.

Azure CLI

Následující příklady používají příkaz az vm run-command ke spuštění skriptu prostředí na virtuálním počítači Azure s Windows.

Spuštění skriptu s virtuálním počítačem

Tento příkaz doručí skript do virtuálního počítače, spustí ho a vrátí zachycený výstup.

az vm run-command create --name "myRunCommand" --vm-name "myVM" --resource-group "myRG" --script "Write-Host Hello World!"

Výpis všech nasazených prostředků RunCommand na virtuálním počítači

Tento příkaz vrátí úplný seznam dříve nasazených příkazů Spustit spolu s jejich vlastnostmi.

az vm run-command list --vm-name "myVM" --resource-group "myRG"

Získání stavu spuštění a výsledků

Tento příkaz načte aktuální průběh provádění, včetně nejnovějšího výstupu, počátečního a koncového času, ukončování kódu a stavu terminálu spuštění.

az vm run-command show --name "myRunCommand" --vm-name "myVM" --resource-group "myRG" --expand instanceView

Poznámka:

Pole výstupu a chyby jsou instanceView omezena na posledních 4 kB. Pokud chcete získat přístup k úplnému výstupu a chybě, máte možnost předávat výstupní a chybová data do doplňovacích objektů blob úložiště pomocí -outputBlobUri a -errorBlobUri parametrů při spouštění příkazu Spustit pomocí Set-AzVMRunCommand nebo Set-AzVMssRunCommand.

Odstranění prostředku RunCommand z virtuálního počítače

Odeberte dříve nasazený prostředek RunCommand na virtuální počítač. Pokud probíhá provádění skriptu, bude provádění ukončeno.

az vm run-command delete --name "myRunCommand" --vm-name "myVM" --resource-group "myRG"

PowerShell

Spuštění skriptu s virtuálním počítačem

Tento příkaz doručí skript do virtuálního počítače, spustí ho a vrátí zachycený výstup.

Set-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -Location "EastUS" -RunCommandName "RunCommandName" –SourceScript "echo Hello World!"

Spuštění skriptu na virtuálním počítači pomocí parametru SourceScriptUri

OutputBlobUri a ErrorBlobUri jsou volitelné parametry.

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>”

Výpis všech nasazených prostředků RunCommand na virtuálním počítači

Tento příkaz vrátí úplný seznam dříve nasazených příkazů Spustit spolu s jejich vlastnostmi.

Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM"

Získání stavu spuštění a výsledků

Tento příkaz načte aktuální průběh provádění, včetně nejnovějšího výstupu, počátečního a koncového času, ukončování kódu a stavu terminálu spuštění.

Get-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -RunCommandName "RunCommandName" -Expand InstanceView

Vytvoření nebo aktualizace příkazu Spustit na virtuálním počítači pomocí identifikátoru SourceScriptUri (adresa URL SAS objektu blob úložiště)

Vytvořte nebo aktualizujte příkaz Spustit na virtuálním počítači s Windows pomocí adresy URL SAS objektu blob úložiště, který obsahuje skript PowerShellu. SourceScriptUri může to být úplná adresa URL SAS objektu blob úložiště nebo veřejná adresa URL.

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>

Poznámka:

Adresa URL SAS musí poskytovat přístup pro čtení k objektu blob. Pro adresu URL SAS se navrhuje doba vypršení platnosti 24 hodin. Adresy URL SAS se dají vygenerovat na webu Azure Portal pomocí možností objektu blob nebo tokenu SAS pomocí New-AzStorageBlobSASToken. Pokud generujete token SAS pomocí New-AzStorageBlobSASToken, vaše adresa URL SAS = "adresa URL základního objektu blob" + "?" + "Token SAS z New-AzStorageBlobSASToken"

Získání zobrazení instance příkazu Spustit pro virtuální počítač po vytvoření nebo aktualizaci příkazu Spustit

Získejte příkaz Spustit pro virtuální počítač se zobrazením instance. Zobrazení instance obsahuje stav spuštění příkazu (úspěšné, neúspěšné atd.), ukončovací kód, standardní výstup a standardní chybu vygenerovanou spuštěním skriptu pomocí příkazu Spustit. Ukončovací kód bez nuly označuje neúspěšné spuštění.

$x = Get-AzVMRunCommand -ResourceGroupName MyRG -VMName MyVM -RunCommandName MyRunCommand -Expand InstanceView
$x.InstanceView

Příklad výstupu

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: Stav skriptu příkazu Spustit uživatele. V tomto stavu zjistíte, jestli byl váš skript úspěšný nebo ne. ProvisioningState: Stav obecného zřizování rozšíření na konci (jestli platforma rozšíření mohla aktivovat skript spustit příkaz, nebo ne).

Vytvoření nebo aktualizace příkazu Spustit na virtuálním počítači pomocí ScriptLocalPath (místní soubor skriptu)

Vytvořte nebo aktualizujte příkaz Spustit na virtuálním počítači pomocí souboru místního skriptu, který je na klientském počítači, kde se spouští rutina.

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1"

Vytvoření nebo aktualizace příkazu Spustit na virtuálním počítači pomocí SourceScriptu (text skriptu)

Vytvořte nebo aktualizujte příkaz Spustit na virtuálním počítači, který předává obsah skriptu přímo do parametru -SourceScript. Slouží ; k oddělení více příkazů.

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVML -RunCommandName MyRunCommand2 -Location EastUS2EUAP -SourceScript "id; echo HelloWorld"

Vytvoření nebo aktualizace příkazu Spustit na virtuálním počítači pomocí SourceCommandId

Vytvořte nebo aktualizujte příkaz Spustit na virtuálním počítači pomocí id existujícího příkazu. Dostupné id příkazů je možné načíst pomocí rutin Get-AzVMRunCommandDocument.

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceCommandId DisableWindowsUpdate

Vytvoření nebo aktualizace příkazu Spustit na virtuálním počítači pomocí outputBlobUri, ErrorBlobUri pro streamování standardního výstupu a standardních chybových zpráv pro výstup a chyby Doplňovací objekty blob

Vytvořte nebo aktualizujte příkaz Spustit na virtuálním počítači a streamovat standardní výstup a standardní chybové zprávy pro výstup a chybu Doplňovací objekty blob.

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVML -RunCommandName MyRunCommand3 -Location EastUS2EUAP -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1" -OutputBlobUri <OutPutBlobUrI> -ErrorBlobUri "ErrorBlobUri

Poznámka:

Výstupní a chybové objekty blob musí být typem AppendBlob a jejich adresy URL SAS musí poskytovat přístup ke čtení, připojení, vytvoření, zápisu do objektu blob. Pro adresu URL SAS se navrhuje doba vypršení platnosti 24 hodin. Pokud výstup nebo chyba objekt blob neexistuje, vytvoří se objekt blob typu AppendBlob. Adresy URL SAS je možné vygenerovat na webu Azure Portal pomocí možností objektu blob nebo tokenu SAS z použití New-AzStorageBlobSASToken.

Vytvoření nebo aktualizace příkazu Spustit na virtuálním počítači jako jiný uživatel pomocí parametrů RunAsUser a RunAsPassword

Vytvořte nebo aktualizujte příkaz Spustit na virtuálním počítači jako jiný uživatel používající RunAsUser a RunAsPassword parametry. Aby účty RunA fungovaly správně, obraťte se na správce virtuálního počítače a ujistěte se, že je na virtuálním počítači přidaný uživatel, má uživatel přístup k prostředkům, ke které přistupuje příkaz Spustit (adresáře, soubory, síť atd.) a v případě virtuálního počítače s Windows je na virtuálním počítači spuštěná služba Sekundární přihlášení.

Set-AzVMRunCommand -ResourceGroupName MyRG0 -VMName MyVMEE -RunCommandName MyRunCommand -Location EastUS2EUAP -ScriptLocalPath "C:\MyScriptsDir\MyScript.ps1" -RunAsUser myusername -RunAsPassword mypassword

Vytvoření nebo aktualizace příkazu Spustit v prostředku škálovací sady virtuálních počítačů pomocí identifikátoru SourceScriptUri (adresa URL SAS objektu blob úložiště)

Vytvořte nebo aktualizujte příkaz Spustit na prostředku Škálovací sady virtuálních počítačů s Windows pomocí adresy URL SAS objektu blob úložiště, který obsahuje skript PowerShellu.

Set-AzVmssVMRunCommand -ResourceGroupName MyRG0 -VMScaleSetName MyVMSS -InstanceId 0 -RunCommandName MyRunCommand -Location EastUS2EUAP -SourceScriptUri <SourceScriptUri>

Poznámka:

Adresa URL SAS musí poskytovat přístup pro čtení k objektu blob. Pro adresu URL SAS se navrhuje doba vypršení platnosti 24 hodin. Adresy URL SAS se dají vygenerovat na webu Azure Portal pomocí možností objektu blob nebo tokenu SAS pomocí New-AzStorageBlobSASToken. Pokud generujete token SAS pomocí New-AzStorageBlobSASToken, formát ADRESY URL SAS je: adresa URL základního objektu blob + "?" + token SAS z New-AzStorageBlobSASToken.

Vytvoření nebo aktualizace příkazu Spustit na instanci virtuálního počítače pomocí parametrů a parametrů ProtectedParameter (veřejné a chráněné parametry pro skript)

Pomocí protectedParameter předejte jakékoli citlivé vstupy do skriptu, jako jsou hesla, klíče atd.

$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: Parametry a protectedParameters se předávají skriptu, protože argumenty se předávají skriptu a spustí se takto: myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2value

  • Linux: Pojmenované parametry a jeho hodnoty jsou nastaveny na konfiguraci prostředí, která by měla být přístupná v rámci skriptu .sh. Pro argumenty bez názvů předejte prázdný řetězec pro zadání názvu. Argumenty bez názvů se předávají skriptu a spustí se takto: myscript.sh publicParam1value publicParam2value secret1value secret2value

Odstranění prostředku RunCommand z virtuálního počítače

Odeberte dříve nasazený prostředek RunCommand na virtuální počítač. Pokud probíhá provádění skriptu, bude provádění ukončeno.

Remove-AzVMRunCommand -ResourceGroupName "myRG" -VMName "myVM" -RunCommandName "RunCommandName"

REST API

Pokud chcete nasadit nový příkaz Spustit, spusťte na virtuálním počítači příkaz PUT přímo a zadejte jedinečný název instance příkazu Run Command.

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 >"  
    }
}

Notes

  • Jako vstupní zdroj můžete zadat vložený skript, identifikátor URI skriptu nebo PŘEDdefinované ID příkazu skriptu. Identifikátor URI skriptu je identifikátor URI SAS objektu blob úložiště s přístupem pro čtení nebo veřejným identifikátorem URI.
  • Pro spuštění jednoho příkazu je podporován pouze jeden typ zdrojového vstupu.
  • Počínaje rozhraním API verze 2023-03-01 můžete nastavit vlastnost treatFailureAsDeploymentFailure na true , což způsobí selhání nasazení v případě selhání skriptu. Pokud je nastavená hodnota false, provisioningState by odrážel pouze to, jestli byl příkaz spuštění spuštěný platformou rozšíření, nebo ne. Nezoznačuje, jestli skript selhal v případě selhání skriptu.
  • Spuštění příkazu podporuje zápis výstupu a chyby do objektů blob úložiště pomocí parametrů outputBlobUri a errorBlobUri, které lze použít k ukládání velkých výstupů skriptu. Použijte identifikátor URI SAS doplňovacího objektu blob úložiště se čtením, přidáním, vytvořením, zápisem. Objekt blob by měl být typu AppendBlob. Zápis výstupu skriptu nebo objektu blob chyby by jinak selhal. Objekt blob se přepíše, pokud už existuje. Pokud neexistuje, vytvoří se.

Výpis spuštěných instancí příkazu Spustit na virtuálním počítači

GET /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands?api-version=2023-03-01

Získání podrobností o výstupu pro konkrétní nasazení příkazu spuštění

GET /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands/<runCommandName>?$expand=instanceView&api-version=2023-03-01

Odstranění konkrétního nasazení příkazu spustit

Můžete také odstranit instanci příkazu Spustit.

DELETE /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<vmName>/runcommands/<runCommandName>?api-version=2023-03-01

Nasazení skriptů v seřazené sekvenci

K postupnému nasazení skriptů použijte šablonu nasazení a určete dependsOn vztah mezi sekvenčními skripty.

{ 
    "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  
    }
} 

Spouštět více příkazů spuštění postupně

Pokud ve výchozím nastavení nasadíte více prostředků RunCommand pomocí šablony nasazení, spustí se na virtuálním počítači současně. Pokud máte závislost na skriptech a upřednostňovaném pořadí provádění, můžete tuto vlastnost použít dependsOn k jejich postupnému spuštění.

V tomto příkladu se druhýRunCommand spustí po 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
         }
      }
   ]
}

Další kroky

Další informace o dalších způsobech vzdáleného spouštění skriptů a příkazů na virtuálním počítači najdete v tématu Spouštění skriptů na virtuálním počítači s Windows.