pberlinger
Goto Top

AZURE Benutzername und Passwort für neue VM automatisch vergeben Daten Disk automatisch einbinden

Hallo Zusammen

ich versuche mich gerade ein wenig in PowerShell und Azure. Nachfolgend mal eine Anfänger-Version meines Script mit viel Potential face-smile
soweit geht es, wie ich es mir vorstelle.

Was noch nicht klapp und wobei ich Eure Hilfe brauche:

Während des Erstellen fragt mich AZURE / Powershell nach dem Username und Passwort für die später zu erstellende VM. Dies versuche ich aber gleich am Anfang unter dem Punkt "#Benutzer und Passwort für Virtuelle Maschine erstellen" mitzugeben

ich denke mal so geht dies vermutlich nicht face-smile

müsste ich dies beim effektiven erstellen der VM unter "# Erstellen der Virtuellen Maschine " einbauen? Wenn ja wie?

sorry, ist halt noch ein wenig ein zusammen-kopiertes-Script um zu üben und das Zeugs zu verstehen


#Verbinden mit AZURE
Connect-AzAccount

#Benutzer und Passwort für Virtuelle Maschine erstellen
#$cred = Get-Credential -Message "Benutzername und Passwort für die neue Maschine eingeben"  
$username = "John Doe"  
$password = "%blablabla%"  
$secstr = New-Object -TypeName System.Security.SecureString
$password.ToCharArray() | ForEach-Object {$secstr.AppendChar($_)}
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $username, $secstr

#Definieren von Variablen
$ResourceGroup="TestRG7"  
$Location="westeurope"  
$SubnetName="mySubnet"  
$SubNetPrefix="10.0.0.0/24"  
$VirtualNetworkName="MyNetwork"  
$VirtualNetworkPrefix="10.0.0.0/16"  
$NetworkInterfaceName="NIC1"  
$PrivateIPAddress="10.0.0.4"  
$VMName="MyVM001"  
$VMSize="Standard_B1ms"  
$PublisherName="MicrosoftWindowsServer"  
$PublisherOffer="WindowsServer"  
$PublisherSkus="2019-Datacenter-with-Containers-smalldisk"  
$DataDiskStorageType="Standard_LRS"  
$DataDiskName="DataDisk"  
$DataDiskSize="15"  

#Erstellen der RessourcenGruppe
New-AzResourceGroup -Name $ResourceGroup -Location $Location

#Erstellen des SubNet
$SubnetConfig = New-AzVirtualNetworkSubnetConfig `
-Name $SubnetName `
-AddressPrefix $SubNetPrefix

#Erstellen des Virtuellen Netz
$VNet = New-AzVirtualNetwork `
-ResourceGroupName $ResourceGroup `
-Location $Location `
-Name $VirtualNetworkName `
-AddressPrefix $VirtualNetworkPrefix `
-Subnet $subnetConfig

# Get the subnet object for use in a later step.
$Subnet = Get-AzVirtualNetworkSubnetConfig -Name $SubnetConfig.Name -VirtualNetwork $VNet

$IpConfigName1 = "IPConfig-1"  
$IpConfig1     = New-AzNetworkInterfaceIpConfig `
  -Name $IpConfigName1 `
  -Subnet $Subnet `
  -PrivateIpAddress $PrivateIPAddress `
  -Primary

$NIC = New-AzNetworkInterface `
  -Name $NetworkInterfaceName `
  -ResourceGroupName $ResourceGroup `
  -Location $Location `
  -IpConfiguration $IpConfig1

# Erstellen der Virtuellen Maschine  
$VirtualMachine = New-AzVMConfig -VMName $VMName -VMSize $VMSize
$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine -Windows -ComputerName $VMName -ProvisionVMAgent -EnableAutoUpdate
$VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $NIC.Id
$VirtualMachine = Set-AzVMSourceImage -VM $VirtualMachine -PublisherName $PublisherName -Offer $PublisherOffer -Skus $PublisherSkus -Version latest
New-AzVM -ResourceGroupName $ResourceGroup -Location $Location -VM $VirtualMachine -Verbose

# Erstellen der Zusätzlichen DatenDisk
$diskConfig = New-AzDiskConfig -SkuName $DataDiskStorageType -Location $Location -CreateOption Empty -DiskSizeGB $DataDiskSize
$dataDisk1 = New-AzDisk -DiskName $DataDiskName -Disk $diskConfig -ResourceGroupName $ResourceGroup
$vm = Get-AzVM -Name $vmName -ResourceGroupName $ResourceGroup
$vm = Add-AzVMDataDisk -VM $vm -Name $DataDiskName -CreateOption Attach -ManagedDiskId $dataDisk1.Id -Lun 1
Update-AzVM -VM $vm -ResourceGroupName $ResourceGroup

# Erstellen einer Public IP und zuweisen
New-AzPublicIpAddress -Name myVMPublicIP -ResourceGroupName $ResourceGroup -AllocationMethod Dynamic -Location $Location
$vnet = Get-AzVirtualNetwork -Name $VirtualNetworkName -ResourceGroupName $ResourceGroup
$subnet = Get-AzVirtualNetworkSubnetConfig -Name $SubnetName -VirtualNetwork $vnet
$nic = Get-AzNetworkInterface -Name $NetworkInterfaceName -ResourceGroupName $ResourceGroup
$pip = Get-AzPublicIpAddress -Name myVMPublicIP -ResourceGroupName $ResourceGroup
$nic | Set-AzNetworkInterfaceIpConfig -Name $IpConfigName1 -PublicIPAddress $pip -Subnet $subnet
$nic | Set-AzNetworkInterface

# Public IP Adresse abfragen
Get-AzPublicIpAddress -Name myVMPublicIP -ResourceGroupName $ResourceGroup | Select IpAddress

# Login to virtual machine
Get-AzRemoteDesktopFile -ResourceGroupName $ResourceGroup -Name $VMName -Launch

Content-Key: 493769

Url: https://administrator.de/contentid/493769

Ausgedruckt am: 28.03.2024 um 18:03 Uhr

Mitglied: 140913
Lösung 140913 11.09.2019 aktualisiert um 21:33:18 Uhr
Goto Top
Du musst das Credential ja auch dem entsprechenden CMDLet übergeben
$cred = New-Object PSCredential "USERNAME",(ConvertTo-SecureString "PASSWORD" -AsPlainText -Force)  
Set-AzVMOperatingSystem -VM $VirtualMachine -Windows -ComputerName $VMName -ProvisionVMAgent -EnableAutoUpdate -Credential $cred
https://docs.microsoft.com/en-us/powershell/module/az.compute/set-azvmop ...
Mitglied: pberlinger
pberlinger 12.09.2019 aktualisiert um 12:00:15 Uhr
Goto Top
Hallo PSUser

danke Dir für Deinen Input, konnte dies so aus irgendwelchen (Vermutlich Erfahrung) Gründen nicht lösen.
Habe dies Umgebaut und nun geht es..

was ich gemacht habe

ich erstelle zuerst den "Passwort-String" mit meinen Variablen
$Credential = New-Object System.Management.Automation.PSCredential ($VMLocalAdminUser, $VMLocalAdminSecurePassword);  

Anschliessend übergebe ich dies beim erstellen der Maschine
$VirtualMachine = New-AzVMConfig -VMName $VMName -VMSize $VMSize
$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine -Windows -ComputerName $VMName -ProvisionVMAgent -EnableAutoUpdate -Credential $Credential
$VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $NIC.Id
$VirtualMachine = Set-AzVMSourceImage -VM $VirtualMachine -PublisherName $PublisherName -Offer $PublisherOffer -Skus $PublisherSkus -Version latest
New-AzVM -ResourceGroupName $ResourceGroup -Location $Location -VM $VirtualMachine -Verbose

Nun habe ich aber noch ein anderes Problem, ich denke hier weisst Du sicherlich auch die Lösung... ich erstelle ein Daten-Laufwerk und möchte dies eigentlich "Attachen" und direkt initialisieren - ohne das ich dies danach händisch im Windows machen muss

aktuell löse ich dies so, oder versuche es zumindest

$diskConfig = New-AzDiskConfig -SkuName $DataDiskStorageType -Location $Location -CreateOption Empty -DiskSizeGB $DataDiskSize
$dataDisk1 = New-AzDisk -DiskName $DataDiskName -Disk $diskConfig -ResourceGroupName $ResourceGroup
$vm = Get-AzVM -Name $vmName -ResourceGroupName $ResourceGroup
$vm = Add-AzVMDataDisk -VM $vm -Name $DataDiskName -CreateOption Attach -ManagedDiskId $dataDisk1.Id -Lun 1
Update-AzVM -VM $vm -ResourceGroupName $ResourceGroup

Dis Disk ist im System vorhanden, leider aber nicht initialisiert und ohne Formatierung - was mache ich hier un wieder falsch?

Vermutlich wird dann noch das Problem kommen, dass ich die DatenDisk auf Anhieb nicht auf Laufwerk D: habe - aber ich lass mich mal überraschen
Mitglied: 140913
140913 12.09.2019 aktualisiert um 12:09:47 Uhr
Goto Top
Dis Disk ist im System vorhanden, leider aber nicht initialisiert und ohne Formatierung - was mache ich hier un wieder falsch?
Gar nichts das ist normal, wie bei jedem Datenträger der neu ist und Windows hinzugefügt wird, du hättest einfach nur weiter runter lesen müssen face-wink :
https://docs.microsoft.com/de-de/azure/virtual-machines/windows/tutorial ...

Vorbereiten von Datenträgern

Nach dem Anfügen eines Datenträgers an den virtuellen Computer muss das Betriebssystem zur Verwendung des Datenträgers konfiguriert werden. Im folgenden Beispiel wird gezeigt, wie der erste dem virtuellen Computer hinzugefügte Datenträger manuell konfiguriert wird. Dieser Vorgang kann auch mit der benutzerdefinierten Skripterweiterung automatisiert werden.
Mitglied: pberlinger
pberlinger 19.09.2019 um 21:02:15 Uhr
Goto Top
Naja dass die ganze Sache nicht «von haus» aus von AZURE aus geht ist schon eine sehr fragwürdige Sache, aber nach mehr als 20 Jahren arbeiten mit MS nicht weiter verwunderlich – bin mir wirklich nichts anders gewöhnt von dem Laden 😊

Aber wie auch immer, das «mimimimi» hilft mir nicht das Problem zu lösen.. ich habe es aber wie folgt gelöst

Also zuerst was im «haupt-Script» drin ist

# Erstelle des Storage Account
# Erstellen einen Azure Blob für das Setup Script der VM
$storageAccount = New-AzStorageAccount -ResourceGroupName $ResourceGroup -Name $StorageName -SkuName $DataDiskStorageType -Location $location
$ctx = $storageAccount.Context
$containerName = "scripts"  
New-AzStorageContainer -Name $containerName -Context $ctx -Permission blob

# Upload File to Blob
Set-AzStorageBlobContent -File "$ScriptPath\AZUREVMSettings.ps1" `  
  -Container $containerName `
  -Blob "AZUREVMSettings.ps1" `  
  -Context $ctx



Dann muss man die VM erstellen, sobald dies gemacht ist kann man folgenden Teil durchlaufen lassen

# Setup Script der VM mit PS1 aus Blob definieren
Set-AzureRmVMCustomScriptExtension -Name 'VMSettings' `  
-ContainerName $containerName `
-FileName AZUREVMSettings.ps1 `
-StorageAccountName $StorageName `
-ResourceGroupName $ResourceGroup `
-VMName $VmName `
-Run AZUREVMSettings.ps1 `
-Location $Location

Dies führt nun das Script auf der VM durch… das Script für die VM hat folgenden Inhalt

# CD Laufwerk auf Laufwerk Z verschieben
$drive = Get-WmiObject -Class win32_volume -Filter "DriveType = 5"  
Set-WmiInstance -input $drive -Arguments @{DriveLetter="Z:"; Label="Label"}  

#Daten-Disk initialisiseren und foratieren
Get-Disk | Where partitionstyle -eq 'raw' | Initialize-Disk -PartitionStyle MBR -PassThru | New-Partition -AssignDriveLetter -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel "DataDisk" -Confirm:$false  

Ich weiss mein Script hat sicherlich noch Potential, aber immerhin 😊

Wer weiss ggf kann es jemand brauchen