Udostępnij za pośrednictwem


Uruchamianie skryptów na maszynie wirtualnej z systemem Windows przy użyciu zarządzanej funkcji Uruchamianie poleceń

Dotyczy: ✔️ Maszyny wirtualne z systemem Windows — elastyczne zestawy skalowania ✔️

Ważne

Polecenie zarządzanego uruchomienia jest obecnie dostępne w interfejsie wiersza polecenia platformy Azure, programie PowerShell i interfejsie API. Funkcje portalu będą wkrótce dostępne.

Funkcja Uruchom polecenie używa agenta maszyny wirtualnej do wykonywania skryptów na maszynie wirtualnej platformy Azure z systemem Windows. Za pomocą tych skryptów można ogólnie zarządzać maszynami lub aplikacjami. Mogą one ułatwić szybkie diagnozowanie i korygowanie problemów z dostępem do maszyny wirtualnej i siecią oraz powrót maszyny wirtualnej do dobrego stanu.

Zaktualizowane polecenie przebiegu zarządzanego używa tego samego kanału agenta maszyny wirtualnej do wykonywania skryptów i zapewnia następujące ulepszenia dotyczące oryginalnej akcji zorientowanej na polecenie Uruchom:

  • Obsługa zaktualizowanej funkcji Uruchamianie polecenia za pośrednictwem szablonu wdrażania usługi ARM
  • Równoległe wykonywanie wielu skryptów
  • Sekwencyjne wykonywanie skryptów
  • Określany przez użytkownika limit czasu skryptu
  • Obsługa długotrwałych skryptów (wykonywanych przez godziny/dni)
  • Przekazywanie wpisów tajnych (parametrów, haseł) w bezpieczny sposób

Wymagania wstępne

Obsługiwana wersja systemu operacyjnego Windows

System operacyjny Windows x64
Windows 10 Obsługiwane
Windows 11 Obsługiwane
Windows Server 2008 SP2 Obsługiwane
Windows Server 2008 R2 Obsługiwane
Windows Server 2012 Obsługiwane
Windows Server 2012 R2 Obsługiwane
Windows Server 2016 Obsługiwane
Windows Server 2016 Core Obsługiwane
Windows Server 2019 Obsługiwane
Windows Server 2019 Core Obsługiwane
Windows Server 2022 Obsługiwane
Windows Server 2022 Core Obsługiwane

Ograniczanie dostępu do uruchamiania polecenia

Wyświetlenie listy poleceń uruchamiania lub wyświetlenie szczegółów polecenia wymaga Microsoft.Compute/locations/runCommands/read uprawnienia na poziomie subskrypcji. Wbudowana rola Czytelnik i wyższe poziomy mają to uprawnienie.

Uruchomienie polecenia wymaga Microsoft.Compute/virtualMachines/runCommand/write uprawnienia. Rola Współautor maszyny wirtualnej i wyższe poziomy mają to uprawnienie.

Możesz użyć jednej z wbudowanych ról lub utworzyć rolę niestandardową, aby użyć polecenia Uruchom.

Interfejs wiersza polecenia platformy Azure

W poniższych przykładach użyto polecenia az vm run-command , aby uruchomić skrypt powłoki na maszynie wirtualnej z systemem Windows platformy Azure.

Wykonywanie skryptu przy użyciu maszyny wirtualnej

To polecenie dostarczy skrypt do maszyny wirtualnej, wykona go i zwróci przechwycone dane wyjściowe.

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

Wyświetlanie listy wszystkich wdrożonych zasobów RunCommand na maszynie wirtualnej

To polecenie zwróci pełną listę wcześniej wdrożonych poleceń uruchamiania wraz z ich właściwościami.

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

Uzyskiwanie stanu wykonania i wyników

To polecenie pobierze bieżący postęp wykonywania, w tym najnowsze dane wyjściowe, godzinę rozpoczęcia/zakończenia, kod zakończenia i stan terminalu wykonania.

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

Uwaga

Pola danych wyjściowych i błędów w programie instanceView są ograniczone do ostatnich 4 KB. Jeśli chcesz uzyskać dostęp do pełnych danych wyjściowych i błędów, możesz przekazać dane wyjściowe i dane błędów do uzupełnialnych obiektów blob magazynu przy użyciu parametrów i -errorBlobUri podczas wykonywania polecenia Uruchom przy użyciu -outputBlobUri polecenia Set-AzVMRunCommand lub Set-AzVMssRunCommand.

Usuń zasób RunCommand z maszyny wirtualnej

Usuń zasób RunCommand wcześniej wdrożony na maszynie wirtualnej. Jeśli wykonywanie skryptu jest nadal w toku, wykonanie zostanie zakończone.

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

PowerShell

Wykonywanie skryptu przy użyciu maszyny wirtualnej

To polecenie dostarczy skrypt do maszyny wirtualnej, wykona go i zwróci przechwycone dane wyjściowe.

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

Wykonywanie skryptu na maszynie wirtualnej przy użyciu parametru SourceScriptUri

OutputBlobUri i ErrorBlobUri są parametrami opcjonalnymi.

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

Wyświetlanie listy wszystkich wdrożonych zasobów RunCommand na maszynie wirtualnej

To polecenie zwróci pełną listę wcześniej wdrożonych poleceń uruchamiania wraz z ich właściwościami.

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

Uzyskiwanie stanu wykonania i wyników

To polecenie pobierze bieżący postęp wykonywania, w tym najnowsze dane wyjściowe, godzinę rozpoczęcia/zakończenia, kod zakończenia i stan terminalu wykonania.

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

Tworzenie lub aktualizowanie polecenia uruchamiania na maszynie wirtualnej przy użyciu identyfikatora SourceScriptUri (adres URL sygnatury dostępu współdzielonego obiektu blob magazynu)

Utwórz lub zaktualizuj polecenie Uruchom na maszynie wirtualnej z systemem Windows przy użyciu adresu URL sygnatury dostępu współdzielonego obiektu blob magazynu zawierającego skrypt programu PowerShell. SourceScriptUri może to być pełny adres URL sygnatury dostępu współdzielonego lub publiczny adres URL obiektu blob magazynu.

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

Uwaga

Adres URL sygnatury dostępu współdzielonego musi zapewnić dostęp do odczytu do obiektu blob. Sugerowany jest czas wygaśnięcia 24 godzin dla adresu URL sygnatury dostępu współdzielonego. Adresy URL sygnatur dostępu współdzielonego można wygenerować w witrynie Azure Portal przy użyciu opcji obiektu blob lub tokenu SAS przy użyciu polecenia New-AzStorageBlobSASToken. W przypadku generowania tokenu SAS przy użyciu adresu New-AzStorageBlobSASTokenURL sygnatury dostępu współdzielonego = "podstawowy adres URL obiektu blob" + "?" + "Token SAS z New-AzStorageBlobSASToken"

Pobieranie widoku wystąpienia polecenia uruchamiania dla maszyny wirtualnej po utworzeniu lub zaktualizowaniu polecenia przebiegu

Pobierz polecenie uruchom dla maszyny wirtualnej z widokiem wystąpienia. Widok wystąpienia zawiera stan wykonywania polecenia uruchomienia (powodzenie, niepowodzenie itp.), kod zakończenia, standardowe dane wyjściowe i standardowy błąd wygenerowany przez wykonanie skryptu przy użyciu polecenia Uruchom. Kod exitCode inny niż zero wskazuje nieudane wykonanie.

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

Przykładowe dane wyjściowe

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: stan skryptu uruchom polecenie użytkownika. Zapoznaj się z tym stanem, aby dowiedzieć się, czy skrypt zakończył się pomyślnie, czy nie. ProvisioningState: Stan ogólnego zakończenia inicjowania obsługi administracyjnej rozszerzeń (czy platforma rozszerzenia mogła wyzwolić skrypt uruchom polecenie, czy nie).

Tworzenie lub aktualizowanie polecenia uruchamiania na maszynie wirtualnej przy użyciu skryptu ScriptLocalPath (plik skryptu lokalnego)

Utwórz lub zaktualizuj polecenie Uruchom na maszynie wirtualnej przy użyciu lokalnego pliku skryptu, który znajduje się na maszynie klienckiej, na której jest wykonywane polecenie cmdlet.

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

Tworzenie lub aktualizowanie polecenia uruchamiania na maszynie wirtualnej przy użyciu skryptu SourceScript (tekst skryptu)

Utwórz lub zaktualizuj polecenie Uruchom na maszynie wirtualnej przekazując zawartość skryptu bezpośrednio do parametru -SourceScript. Użyj ; polecenia , aby oddzielić wiele poleceń

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

Tworzenie lub aktualizowanie polecenia uruchamiania na maszynie wirtualnej przy użyciu identyfikatora SourceCommandId

Utwórz lub zaktualizuj polecenie Uruchom na maszynie wirtualnej przy użyciu wstępnie istniejącego identyfikatora commandId. Dostępne identyfikatory poleceń można pobrać przy użyciu polecenia Get-AzVMRunCommandDocument.

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

Tworzenie lub aktualizowanie polecenia uruchamiania na maszynie wirtualnej przy użyciu parametru OutputBlobUri, ErrorBlobUri w celu przesyłania strumieniowego standardowych danych wyjściowych i standardowych komunikatów o błędach do danych wyjściowych i błędów uzupełnialnych obiektów blob

Utwórz lub zaktualizuj polecenie uruchom na maszynie wirtualnej i przesyłaj strumieniowo standardowe komunikaty o błędach i komunikaty o błędach do danych wyjściowych i uzupełnialnych obiektów blob.

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

Uwaga

Obiekty blob danych wyjściowych i błędów muszą być typem AppendBlob, a ich adresy URL sygnatur dostępu współdzielonego muszą zapewniać dostęp do odczytu, dołączania, tworzenia, zapisu do obiektu blob. Sugerowany jest czas wygaśnięcia 24 godzin dla adresu URL sygnatury dostępu współdzielonego. Jeśli obiekt blob danych wyjściowych lub błąd nie istnieje, zostanie utworzony obiekt blob typu AppendBlob. Adresy URL sygnatury dostępu współdzielonego można wygenerować w witrynie Azure Portal przy użyciu opcji obiektu blob lub tokenu SAS przy użyciu polecenia New-AzStorageBlobSASToken.

Tworzenie lub aktualizowanie polecenia uruchamiania na maszynie wirtualnej jako inny użytkownik przy użyciu parametrów RunAsUser i RunAsPassword

Utwórz lub zaktualizuj polecenie Uruchom na maszynie wirtualnej jako inny użytkownik przy użyciu RunAsUser parametrów i RunAsPassword . Aby działało prawidłowo, skontaktuj się z administratorem maszyny wirtualnej i upewnij się, że użytkownik został dodany na maszynie wirtualnej, użytkownik ma dostęp do zasobów, do których uzyskuje dostęp za pomocą polecenia uruchom (katalogi, pliki, sieć itp.), a w przypadku maszyny wirtualnej z systemem Windows usługa "Logowanie pomocnicze" jest uruchomiona na maszynie wirtualnej.

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

Tworzenie lub aktualizowanie polecenia uruchamiania w zasobie zestawów skalowania maszyn wirtualnych przy użyciu identyfikatora SourceScriptUri (adres URL sygnatury dostępu współdzielonego obiektu blob magazynu)

Utwórz lub zaktualizuj polecenie Uruchom w zasobie zestawów skalowania maszyn wirtualnych z systemem Windows przy użyciu adresu URL sygnatury dostępu współdzielonego obiektu blob magazynu zawierającego skrypt programu PowerShell.

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

Uwaga

Adres URL sygnatury dostępu współdzielonego musi zapewnić dostęp do odczytu do obiektu blob. Sugerowany jest czas wygaśnięcia 24 godzin dla adresu URL sygnatury dostępu współdzielonego. Adresy URL sygnatur dostępu współdzielonego można wygenerować w witrynie Azure Portal przy użyciu opcji obiektu blob lub tokenu SAS przy użyciu polecenia New-AzStorageBlobSASToken. W przypadku generowania tokenu SAS przy użyciu New-AzStorageBlobSASTokenprogramu format adresu URL sygnatury dostępu współdzielonego to: podstawowy adres URL obiektu blob + "?" + token SAS z .New-AzStorageBlobSASToken

Tworzenie lub aktualizowanie polecenia uruchamiania w wystąpieniu maszyny wirtualnej przy użyciu parametrów i parametrów ProtectedParameter (parametry publiczne i chronione do skryptu)

Użyj parametru ProtectedParameter, aby przekazać wszelkie poufne dane wejściowe do skryptu, takiego jak hasła, klucze itp.

$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 i chronioneparametry są przekazywane do skryptu, ponieważ argumenty są przekazywane do skryptu i uruchamiane w następujący sposób — myscript.ps1 -publicParam1 publicParam1value -publicParam2 publicParam2value -secret1 secret1value -secret2 secret2value

  • Linux: nazwane parametry i jego wartości są ustawione na konfigurację środowiska, która powinna być dostępna w skryscie .sh. W przypadku argumentów bez nazw przekaż pusty ciąg do nazwy wejściowej. Argumenty bez nazw są przekazywane do skryptu i uruchamiane w następujący sposób : myscript.sh publicParam1value publicParam2value secret1value secret2value

Usuń zasób RunCommand z maszyny wirtualnej

Usuń zasób RunCommand wcześniej wdrożony na maszynie wirtualnej. Jeśli wykonywanie skryptu jest nadal w toku, wykonanie zostanie zakończone.

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

Interfejs API REST

Aby wdrożyć nowe polecenie uruchamiania, wykonaj polecenie PUT na maszynie wirtualnej bezpośrednio i określ unikatową nazwę wystąpienia uruchom polecenie.

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

Uwagi

  • Możesz podać wbudowany skrypt, identyfikator URI skryptu lub wbudowany identyfikator polecenia skryptu jako źródło wejściowe. Identyfikator URI skryptu to identyfikator URI sygnatury dostępu współdzielonego obiektu blob magazynu z dostępem do odczytu lub publicznym identyfikatorem URI.
  • Tylko jeden typ danych wejściowych źródłowych jest obsługiwany dla jednego wykonywania polecenia.
  • Począwszy od interfejsu API w wersji 2023-03-01, można ustawić właściwość treatFailureAsDeploymentFailure na wartość true , co powoduje niepowodzenie wdrożenia, gdy w skrycie wystąpił błąd. Jeśli ustawiono wartość false, wartość ProvisioningState będzie odzwierciedlać tylko to, czy polecenie uruchamiania zostało uruchomione, czy nie przez platformę rozszerzeń. Nie wskazuje, czy skrypt zakończył się niepowodzeniem w przypadku błędów skryptu.
  • Polecenie Run obsługuje zapisywanie danych wyjściowych i błędów w obiektach blob usługi Storage przy użyciu parametrów outputBlobUri i errorBlobUri, które mogą służyć do przechowywania dużych danych wyjściowych skryptu. Użyj identyfikatora URI sygnatury dostępu współdzielonego uzupełnialnych obiektów blob magazynu z dostępem do odczytu, dodawania, tworzenia i zapisu. Obiekt blob powinien być typu AppendBlob. Zapisywanie danych wyjściowych skryptu lub błędu obiektu blob nie powiodło się w przeciwnym razie. Obiekt blob zostanie zastąpiony, jeśli już istnieje. Zostanie on utworzony, jeśli nie istnieje.

Wyświetlanie listy uruchomionych wystąpień polecenia uruchamiania na maszynie wirtualnej

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

Pobieranie szczegółów danych wyjściowych dla określonego wdrożenia polecenia uruchamiania

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

Usuwanie określonego wdrożenia polecenia uruchomień

Możesz również usunąć wystąpienie uruchom polecenie.

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

Wdrażanie skryptów w uporządkowanej kolejności

Aby wdrożyć skrypty sekwencyjnie, użyj szablonu wdrożenia, określając relację dependsOn między skryptami sekwencyjnymi.

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

Sekwencyjnie wykonaj wiele uruchomień poleceń

Domyślnie w przypadku wdrożenia wielu zasobów RunCommand przy użyciu szablonu wdrożenia zostaną one wykonane jednocześnie na maszynie wirtualnej. Jeśli masz zależność od skryptów i preferowanej kolejności wykonywania, możesz użyć dependsOn właściwości , aby były uruchamiane sekwencyjnie.

W tym przykładzie polecenie secondRunCommand zostanie wykonane po pierwszymRunCommand.

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

Następne kroki

Aby dowiedzieć się więcej o innych sposobach zdalnego uruchamiania skryptów i poleceń na maszynie wirtualnej, zobacz Uruchamianie skryptów na maszynie wirtualnej z systemem Windows.