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-AzStorageBlobSASToken
URL 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-AzStorageBlobSASToken
programu 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.