Skapa en Azure-resurs med skript i Azure PowerShell

Slutförd

I interaktivt läge kan du skriva kommandon i PowerShell och köra dem direkt.

Kom ihåg att huvudmålet i CRM-exemplet (Customer Relationship Management) är att skapa tre testmiljöer med virtuella datorer. Du använder resursgrupper för att se till att de virtuella datorerna är ordnade i separata miljöer: en för enhetstestning, en för integreringstestning och en för godkännandetestning. Du behöver bara skapa resursgrupperna en gång, så det är ett bra val att använda det interaktiva PowerShell-läget i det här användningsfallet.

När du anger ett kommando i PowerShell matchar PowerShell kommandot med en cmdlet och utför sedan den begärda åtgärden. Först ska vi titta på några vanliga kommandon som du kan använda, sedan ska vi titta på hur du installerar Azure-stödet för PowerShell.

Vad är PowerShell-cmdletar?

Ett PowerShell-kommando kallas för en cmdlet (uttalas ”command-let”). En cmdlet är ett kommando som manipulerar en enskild funktion. Termen cmdlet är avsedd att innebära "litet kommando". Enligt konventionen uppmuntras cmdlet-författare att hålla cmdletar enkla och enkla.

PowerShell-grundprodukten levereras med cmdletar för funktioner som sessioner och bakgrundsjobb. Du kan lägga till moduler i PowerShell-installationen för att hämta cmdletar som manipulerar andra funktioner. Det finns till exempel moduler från tredje part för att arbeta med ftp, administrera operativsystemet, använda filsystemet och så vidare.

Cmdletar följer en namngivningskonvention för verb-substantiv; till exempel Get-Process, Format-Table, och Start-Service. Dessutom finns en konvention för valet av verb: ”get” för att hämta data, ”set” för att infoga eller uppdatera data, ”format” för att formatera data, ”out” för att skicka utdata till ett mål och så vidare.

De som skriver cmdletar uppmanas att inkludera en hjälpfil för varje cmdlet. Cmdleten Get-Help visar hjälpfilen för alla cmdletar. Om du till exempel vill få hjälp med cmdleten Get-ChildItem anger du följande instruktion i en Windows PowerShell-session:

Get-Help -Name Get-ChildItem -Detailed

Vad är en PowerShell-modul?

Cmdletar levereras i moduler. En PowerShell-modul är ett DLL-bibliotek (Dynamic Link Library) som innehåller koden för att bearbeta varje tillgänglig cmdlet. Du läser in cmdletar i PowerShell genom att läsa in modulen där de finns. Du kan hämta en lista över inlästa moduler med kommandot Get-Module:

Get-Module

Det här kommandot matar ut ungefär så här:

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   3.1.0.0    Microsoft.PowerShell.Management     {Add-Computer, Add-Content, Checkpoint-Computer, Clear-Con...
Manifest   3.1.0.0    Microsoft.PowerShell.Utility        {Add-Member, Add-Type, Clear-Variable, Compare-Object...}
Binary     1.0.0.1    PackageManagement                   {Find-Package, Find-PackageProvider, Get-Package, Get-Pack...
Script     1.0.0.1    PowerShellGet                       {Find-Command, Find-DscResource, Find-Module, Find-RoleCap...
Script     2.0.0      PSReadline                          {Get-PSReadLineKeyHandler, Get-PSReadLineOption, Remove-PS...

Vad är Az PowerShell-modulen?

Az är det formella namnet på Azure PowerShell-modulen, som innehåller cmdletar för att fungera med Azure-funktioner. Den innehåller hundratals cmdletar som gör att du kan styra nästan alla aspekter av varje Azure-resurs. Du kan arbeta med resursgrupper, lagring, virtuella datorer, Microsoft Entra-ID, containrar, maskininlärning och så vidare. Az-modulen är en komponent med öppen källkod som är tillgänglig på GitHub.

Kommentar

Du kanske har sett eller använt Azure PowerShell-kommandon som använde ett -AzureRM format. Eftersom Az PowerShell-moduler nu har alla funktioner i AzureRM PowerShell-moduler med mera drar vi tillbaka AzureRM PowerShell-moduler den 29 februari 2024. För att undvika tjänstavbrott uppdaterar du skripten som använder AzureRM PowerShell-moduler för att använda Az PowerShell-moduler senast den 29 februari 2024. Följ snabbstartsguiden om du vill uppdatera skripten automatiskt.

Installera Az PowerShell-modulen

Az PowerShell-modulen är tillgänglig från en global lagringsplats som kallas PowerShell-galleriet. Du kan installera modulen på den lokala datorn via cmdleten Install-Module .

Om du vill installera den senaste Azure Az PowerShell-modulen kör du följande kommandon:

  1. Öppna Start-menyn och ange PowerShell.

  2. Välj PowerShell-ikonen.

  3. Ange följande kommando och tryck på Enter:

    Install-Module -Name Az -Scope CurrentUser -Repository PSGallery
    

Föregående kommando installerar modulen för den aktuella användaren (styrs av parametern Scope ).

Kommandot förlitar sig på NuGet för att hämta komponenter. Beroende på vilken version du har installerat kan du uppmanas att ladda ned och installera den senaste versionen av NuGet.

NuGet provider is required to continue
PowerShellGet requires NuGet provider version '2.8.5.201' or newer to interact with NuGet-based repositories. The NuGet
 provider must be available in 'C:\Program Files\PackageManagement\ProviderAssemblies' or
'C:\Users\<username>\AppData\Local\PackageManagement\ProviderAssemblies'. You can also install the NuGet provider by running
'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force'. Do you want PowerShellGet to install and import
 the NuGet provider now?
 [Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"):

Ange Y och tryck på Retur.

Som standard är PowerShell-galleriet inte konfigurerat som en betrodd lagringsplats för PowerShellGet. Varje gång du utför en installation från en ej betrodd lagringsplats uppmanas du att bekräfta att du vill installera modulen med följande utdata:

You are installing the modules from an untrusted repository. If you trust this repository, change its
InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from
'PSGallery'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"):

Ange Y eller A och tryck sedan på Retur.

Skriptkörningen misslyckades

Beroende på din säkerhetskonfiguration Import-Module kan det misslyckas med något som liknar följande utdata:

import-module : File C:\Program Files\PowerShell\Modules\az\6.3.0\Az.psm1 cannot be loaded
because running scripts is disabled on this system. For more information, see about_Execution_Policies at
https:/go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ import-module Az
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [Import-Module], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess,Microsoft.PowerShell.Commands.ImportModuleCommand

Det kan också misslyckas genom att inte svara alls. I det här fallet trycker du på Ctrl+C för att stoppa programmet.

Båda beteendena anger vanligtvis att körningsprincipen är "Begränsad", vilket innebär att du inte kan köra moduler som du laddar ned från en extern källa, inklusive PowerShell-galleriet. Du kan kontrollera genom att köra cmdleten Get-ExecutionPolicy. Om cmdleten returnerar "Restricted":

  1. Använd cmdleten Set-ExecutionPolicy för att ändra principen till ”RemoteSigned”:

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
    

    Du uppmanas att ange behörighet:

    The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose
    you to the security risks described in the about_Execution_Policies help topic at
    https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): Y
    
  2. Ange Y eller A och tryck sedan på Retur.

  3. I kommandotolken använder du upppilen på tangentbordet och kör Install-Module kommandot för Azure igen.

Du bör kunna se att Az PowerShell-modulen läses in. När den är klar kan du använda Import-Module för att läsa in cmdletarna.

När du installerar Azure PowerShell i Linux eller macOS används samma kommandon.

  1. I en terminal kör du följande kommando för att starta PowerShell.

    pwsh
    
  2. Kör följande kommando i PowerShell-prompten för att installera Azure PowerShell.

    Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -Force
    
  3. Om du tillfrågas om du litar på moduler från PSGallery svarar du Ja eller Ja till Alla.

Uppdatera en PowerShell-modul

Du kan få en varning eller ett felmeddelande som anger att en version av Azure PowerShell-modulen redan är installerad. I så fall kan du utfärda följande kommando för att uppdatera till den senaste versionen.

Update-Module -Name Az

Precis som med cmdleten Install-Module svarar du Ja eller Ja till Alla när du uppmanas att lita på modulen. Du kan också använda Update-Module kommandot för att installera om en modul om du har problem med den.

Exempel: Så skapar du en resursgrupp med Azure PowerShell

När du har installerat Azure-modulen kan du börja arbeta med Azure. Nu ska vi göra en vanlig uppgift: att skapa en resursgrupp. Som du vet använder vi resursgrupper för att administrera relaterade resurser tillsammans. Att skapa en ny resursgrupp är en av de första uppgifterna du gör när du startar en ny Azure-lösning.

Det finns fyra steg som du måste utföra:

  1. Importera Azure-cmdletarna.

  2. Ansluta till Azure-prenumerationen.

  3. Skapa resursgruppen.

  4. Kontrollera att skapandet lyckades.

Följande bild visar en översikt över dessa steg:

Diagram showing the steps to create a resource group.

Varje steg motsvarar en specifik cmdlet.

Importera Azure-cmdletarna

Från och med PowerShell 3.0 läses moduler in automatiskt när du använder en cmdlet i modulen. Du behöver inte längre importera PowerShell-moduler manuellt om du inte har ändrat standardinställningarna för automatisk inläsning av modulen.

Anslut

När du arbetar med en lokal installation av Azure PowerShell måste du autentisera innan du kan köra Azure-kommandon. Cmdleten Connect-AzAccount frågar efter dina Azure-autentiseringsuppgifter och ansluter sedan till din Azure-prenumeration. Den har många valfria parametrar, men om allt du behöver är en interaktiv fråga behöver du inga parametrar:

Connect-AzAccount

Arbeta med prenumerationer

Om du är nybörjare på Azure har du förmodligen bara en enda prenumeration. Men om du har använt Azure ett tag kanske du har skapat flera Azure-prenumerationer. Du kan konfigurera Azure PowerShell för att köra kommandon mot en viss prenumeration.

Du kan bara finnas i en prenumeration i taget. Använd cmdleten Get-AzContext för att avgöra vilken prenumeration som är aktiv. Om det inte är rätt kan du ändra prenumerationer med en annan cmdlet.

  1. Hämta en lista över alla prenumerationsnamn i ditt konto med kommandot Get-AzSubscription.

  2. Ändra prenumerationen genom att skicka namnet på den som ska väljas.

Set-AzContext -Subscription '00000000-0000-0000-0000-000000000000'

Om du behöver leta upp prenumerations-ID:t går du till Azure-portalen och väljer Prenumerationer på startsidan.

Hämta en lista över alla resursgrupper

Du kan hämta en lista över alla resursgrupper i den aktiva prenumerationen.

Get-AzResourceGroup

Du kan få en tydligare vy om du skickar utdata från Get-AzResourceGroup till cmdleten Format-Table med ett lodstreck ”|”.

Get-AzResourceGroup | Format-Table

Utdata ser ut ungefär så här:

ResourceGroupName                  Location       ProvisioningState Tags TagsTable ResourceId
-----------------                  --------       ----------------- ---- --------- ----------
cloud-shell-storage-southcentralus southcentralus Succeeded                        /subscriptions/00000000-0000-0000...
ExerciseResources                  eastus         Succeeded                        /subscriptions/00000000-0000-0000...

Skapa en resursgrupp

Som du vet placerar du dem alltid i en resursgrupp i hanteringssyfte när du skapar resurser i Azure. En resursgrupp är ofta en av de första sakerna du skapar när du startar ett nytt program.

Du kan skapa resursgrupper med hjälp av cmdleten New-AzResourceGroup . Du måste ange ett namn och en plats. Namnet måste vara unikt inom prenumerationen. Platsen avgör var metadata för resursgruppen lagras (vilket kan vara viktigt för dig av efterlevnadsskäl). Du anger platsen med strängar som ”USA, västra”, ”Europa, norra” eller ”Indien, västra”. Precis som med de flesta Azure-cmdletar New-AzResourceGroup har många valfria parametrar. Kärnsyntaxen är dock:

New-AzResourceGroup -Name <name> -Location <location>

Kommentar

Kom ihåg att vi kommer att arbeta i en aktiv Azure-sandbox-miljö som skapar resursgruppen åt dig. Använd föregående kommando om du föredrar att arbeta i din egen prenumeration.

Verifiera resurserna

I Get-AzResource listan visas dina Azure-resurser, vilket är användbart här för att verifiera att resurserna har skapats och att resursgruppen har skapats.

Get-AzResource

Precis som kommandot Get-AzResourceGroup kan du få en mer kortfattad vy via cmdleten Format-Table :

Get-AzResource | Format-Table

Du kan även filtrera det till specifika resursgrupper för att bara lista resurser som är associerade med de grupperna:

Get-AzResource -ResourceGroupName ExerciseResources

Skapa en virtuell Azure-dator

En annan vanlig uppgift som du kan göra med PowerShell är att skapa virtuella datorer.

I Azure PowerShell kan du använda cmdleten New-AzVm till att skapa en virtuell dator. Cmdleten har många parametrar för att hantera det stora antalet konfigurationsinställningar för virtuella datorer. De flesta parametrarna har rimliga standardvärden, så vi behöver bara ange fem saker:

  • ResourceGroupName: Resursgruppen som den nya virtuella datorn ska placeras i.
  • Name: namnet på den virtuella datorn i Azure.
  • Plats: Den geografiska plats där den virtuella datorn ska etableras.
  • Autentiseringsuppgift: ett objekt som innehåller användarnamnet och lösenordet för den virtuella datorns administratörskonto. Vi använder cmdleten Get-Credential . Den här cmdleten frågar efter ett användarnamn och lösenord och paketeras till ett autentiseringsobjekt.
  • Bild: Operativsystemavbildningen som ska användas för den virtuella datorn, som vanligtvis är en Linux-distribution eller Windows Server.
   New-AzVm
       -ResourceGroupName <resource group name>
       -Name <machine name>
       -Credential <credentials object>
       -Location <location>
       -Image <image name>

Du kan ange dessa parametrar direkt till cmdleten enligt föregående exempel. Du kan också använda andra cmdletar för att konfigurera den virtuella datorn, till exempel Set-AzVMOperatingSystem, Set-AzVMSourceImage, Add-AzVMNetworkInterfaceoch Set-AzVMOSDisk.

Här är ett exempel som kopplar ihop cmdleten Get-Credential med parametern -Credential:

New-AzVM -Name MyVm -ResourceGroupName ExerciseResources -Credential (Get-Credential) ...

Suffixet AzVM är specifikt för VM-baserade kommandon i PowerShell. Det finns flera andra som du kan använda:

Kommando beskrivning
Remove-AzVM Tar bort en virtuell Azure-dator
Start-AzVM Startar en stoppad virtuell dator
Stop-AzVM Stoppar en virtuell dator som körs
Restart-AzVM Startar om en virtuell dator
Update-AzVM Uppdateringar konfigurationen för en virtuell dator

Exempel: Hämta information för en virtuell dator

Du kan visa en lista över de virtuella datorerna i din prenumeration med hjälp av Get-AzVM -Status kommandot . Det här kommandot har också stöd för att ange en specifik virtuell dator genom att inkludera egenskapen -Name . Här tilldelar vi den till en PowerShell-variabel:

$vm = Get-AzVM  -Name MyVM -ResourceGroupName ExerciseResources

Det intressanta är att den virtuella datorn nu är ett objekt som du kan interagera med. Du kan till exempel göra ändringar i objektet och sedan skicka tillbaka ändringarna till Azure med hjälp Update-AzVM av kommandot :

$ResourceGroupName = "ExerciseResources"
$vm = Get-AzVM  -Name MyVM -ResourceGroupName $ResourceGroupName
$vm.HardwareProfile.vmSize = "Standard_DS3_v2"

Update-AzVM -ResourceGroupName $ResourceGroupName  -VM $vm

Det interaktiva läget i PowerShell är lämpligt för engångsaktiviteter. I vårt exempel använder vi samma resursgrupp under projektets livslängd, så det är rimligt att skapa den interaktivt. Det interaktiva läget är ofta snabbare och enklare än att skriva och köra ett skript för den här sortens uppgift.