Delen via


Externe hulpprogramma's gebruiken om problemen met Azure-VM's op te lossen

Wanneer u problemen op een virtuele Azure-machine (VM) oplost, kunt u verbinding maken met de virtuele machine met behulp van de externe hulpprogramma's die in dit artikel worden besproken in plaats van rdp (Remote Desktop Protocol).

Seriële console

Gebruik een seriële console voor Azure Virtual Machines om opdrachten uit te voeren op de externe Azure-VM.

Externe CMD

Download PsExec. Maak verbinding met de VM door de volgende opdracht uit te voeren:

psexec \\<computer>-u user -s cmd

Opmerking

  • De opdracht moet worden uitgevoerd op een computer die zich in hetzelfde virtuele netwerk bevindt.
  • DIP of HostName kan worden gebruikt om de computer> te vervangen<.
  • De parameter -s zorgt ervoor dat de opdracht wordt aangeroepen met behulp van systeemaccount (beheerdersmachtiging).
  • PsExec maakt gebruik van TCP-poorten 135 en 445. Als gevolg hiervan moeten de twee poorten op de firewall zijn geopend.

Opdracht uitvoeren

Zie PowerShell-scripts uitvoeren op uw Windows-VM met opdracht uitvoeren voor meer informatie over het gebruik van de functie run command om scripts uit te voeren op de VM.

Aangepaste scriptextensie

U kunt de functie Aangepaste scriptextensie gebruiken om een aangepast script uit te voeren op de doel-VM. Als u deze functie wilt gebruiken, moet aan de volgende voorwaarden worden voldaan:

  • De VM heeft connectiviteit.

  • Azure Virtual Machine Agent is geïnstalleerd en werkt zoals verwacht op de VM.

  • De extensie is niet eerder geïnstalleerd op de VM.

    De extensie injecteert het script alleen de eerste keer dat het wordt gebruikt. Als u deze functie later gebruikt, wordt door de extensie herkend dat deze al is gebruikt en wordt het nieuwe script niet geüpload.

Upload uw script naar een opslagaccount en genereer een eigen container. Voer vervolgens het volgende script uit in Azure PowerShell op een computer die verbinding heeft met de VM.

Voor vm's van het klassieke implementatiemodel

Belangrijk

Klassieke VM's worden op 1 september 2023 buiten gebruik gesteld

Als u IaaS-resources van ASM gebruikt, moet u de migratie voor 1 september 2023 voltooien. We raden u aan om sneller over te schakelen om te profiteren van de vele functieverbeteringen in Azure Resource Manager.

Zie Uw IaaS-resources migreren naar Azure Resource Manager op 1 september 2023 voor meer informatie.

#Set up the basic variables.
$subscriptionID = "<<SUBSCRIPTION ID>>" 
$storageAccount = "<<STORAGE ACCOUNT>>" 
$localScript = "<<FULL PATH OF THE PS1 FILE TO EXECUTE ON THE VM>>" 
$blobName = "file.ps1" #Name you want for the blob in the storage.
$vmName = "<<VM NAME>>" 
$vmCloudService = "<<CLOUD SERVICE>>" #Resource group or cloud service where the VM is hosted. For example, for "demo305.cloudapp.net" the cloud service is going to be demo305.

#Set up the Azure PowerShell module, and ensure the access to the subscription.
Import-Module Azure
Add-AzureAccount  #Ensure login with the account associated with the subscription ID.
Get-AzureSubscription -SubscriptionId $subscriptionID | Select-AzureSubscription

#Set up the access to the storage account, and upload the script.
$storageKey = (Get-AzureStorageKey -StorageAccountName $storageAccount).Primary
$context = New-AzureStorageContext -StorageAccountName $storageAccount -StorageAccountKey $storageKey
$container = "cse" + (Get-Date -Format yyyyMMddhhmmss)<
New-AzureStorageContainer -Name $container -Permission Off -Context $context
Set-AzureStorageBlobContent -File $localScript -Container $container -Blob $blobName  -Context $context

#Push the script into the VM.
$vm = Get-AzureVM -ServiceName $vmCloudService -Name $vmName
Set-AzureVMCustomScriptExtension "CustomScriptExtension" -VM $vm -StorageAccountName $storageAccount -StorageAccountKey $storagekey -ContainerName $container -FileName $blobName -Run $blobName | Update-AzureVM

Voor Azure Resource Manager-VM's

#Set up the basic variables.
$subscriptionID = "<<SUBSCRIPTION ID>>"
$storageAccount = "<<STORAGE ACCOUNT>>"
$storageRG = "<<RESOURCE GROUP OF THE STORAGE ACCOUNT>>" 
$localScript = "<<FULL PATH OF THE PS1 FILE TO EXECUTE ON THE VM>>" 
$blobName = "file.ps1" #Name you want for the blob in the storage.
$vmName = "<<VM NAME>>" 
$vmResourceGroup = "<<RESOURCE GROUP>>"
$vmLocation = "<<DATACENTER>>" 
 
#Set up the Azure PowerShell module, and ensure the access to the subscription.
Login-AzAccount #Ensure login with the account associated with the subscription ID.
Get-AzSubscription -SubscriptionId $subscriptionID | Select-AzSubscription

#Set up the access to the storage account, and upload the script.
$storageKey = (Get-AzStorageAccountKey -ResourceGroupName $storageRG -Name $storageAccount).Value[0]
$context = New-AzureStorageContext -StorageAccountName $storageAccount -StorageAccountKey $storageKey
$container = "cse" + (Get-Date -Format yyyyMMddhhmmss)
New-AzureStorageContainer -Name $container -Permission Off -Context $context
Set-AzureStorageBlobContent -File $localScript -Container $container -Blob $blobName  -Context $context

#Push the script into the VM.
Set-AzVMCustomScriptExtension -Name "CustomScriptExtension" -ResourceGroupName $vmResourceGroup -VMName $vmName -Location $vmLocation -StorageAccountName $storageAccount -StorageAccountKey $storagekey -ContainerName $container -FileName $blobName -Run $blobName

Externe PowerShell

Opmerking

TCP-poort 5986 (HTTPS) moet zijn geopend, zodat u deze optie kunt gebruiken.

Voor Azure Resource Manager-VM's moet u poort 5986 openen in de netwerkbeveiligingsgroep (NSG). Zie Beveiligingsgroepen voor meer informatie.

Voor RDFE-VM's moet u een eindpunt hebben met een privépoort (5986) en een openbare poort. Vervolgens moet u ook die openbare poort op de NSG openen.

De clientcomputer instellen

Als u PowerShell wilt gebruiken om op afstand verbinding te maken met de VM, moet u eerst de clientcomputer instellen om de verbinding toe te staan. Hiervoor voegt u de VM toe aan de lijst met vertrouwde PowerShell-hosts door de volgende opdracht uit te voeren, indien van toepassing.

Eén virtuele machine toevoegen aan de lijst met vertrouwde hosts:

Set-Item wsman:\localhost\Client\TrustedHosts -value <ComputerName>

Meerdere VM's toevoegen aan de lijst met vertrouwde hosts:

Set-Item wsman:\localhost\Client\TrustedHosts -value <ComputerName1>,<ComputerName2>

Alle computers toevoegen aan de lijst met vertrouwde hosts:

Set-Item wsman:\localhost\Client\TrustedHosts -value *

RemotePS inschakelen op de VM

Voor VM's die zijn gemaakt met het klassieke implementatiemodel, gebruikt u de aangepaste scriptextensie om het volgende script uit te voeren:

Enable-PSRemoting -Force
New-NetFirewallRule -Name "Allow WinRM HTTPS" -DisplayName "WinRM HTTPS" -Enabled True -Profile Any -Action Allow -Direction Inbound -LocalPort 5986 -Protocol TCP
$thumbprint = (New-SelfSignedCertificate -DnsName $env:COMPUTERNAME -CertStoreLocation Cert:\LocalMachine\My).Thumbprint
$command = "winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname=""$env:computername""; CertificateThumbprint=""$thumbprint""}"
cmd.exe /C $command

Voor Azure Resource Manager-VM's gebruikt u uitvoeropdrachten vanuit de portal om het script EnableRemotePS uit te voeren:

Schermopname van de stappen voor het uitvoeren van het script EnableRemotePS vanuit de portal.

Verbinding maken met de VM

Voer de volgende opdracht uit op basis van de locatie van de clientcomputer:

  • Buiten het virtuele netwerk of de implementatie

    • Voer de volgende opdracht uit voor een VIRTUELE machine die is gemaakt met het klassieke implementatiemodel:

      $Skip = New-PSSessionOption -SkipCACheck -SkipCNCheck
      Enter-PSSession -ComputerName  "<<CLOUDSERVICENAME.cloudapp.net>>" -port "<<PUBLIC PORT NUMBER>>" -Credential (Get-Credential) -useSSL -SessionOption $Skip
      
    • Voeg voor een Azure Resource Manager-VM eerst een DNS-naam toe aan het openbare IP-adres. Zie Een volledig gekwalificeerde domeinnaam maken in de Azure Portal voor een Windows-VM voor gedetailleerde stappen. Voer vervolgens de volgende opdracht uit:

      $Skip = New-PSSessionOption -SkipCACheck -SkipCNCheck
      Enter-PSSession -ComputerName "<<DNSname.DataCenter.cloudapp.azure.com>>" -port "5986" -Credential (Get-Credential) -useSSL -SessionOption $Skip
      
  • Voer in het virtuele netwerk of de implementatie de volgende opdracht uit:

    $Skip = New-PSSessionOption -SkipCACheck -SkipCNCheck
    Enter-PSSession -ComputerName  "<<HOSTNAME>>" -port 5986 -Credential (Get-Credential) -useSSL -SessionOption $Skip
    

Opmerking

Als u de vlag SkipCaCheck instelt, wordt de vereiste voor het importeren van een certificaat naar de VM overgeslagen wanneer u de sessie start.

U kunt ook de cmdlet Invoke-Command gebruiken om een script op de virtuele machine op afstand uit te voeren.

Invoke-Command -ComputerName "<<COMPUTERNAME>" -ScriptBlock {"<<SCRIPT BLOCK>>"}

Extern register

Opmerking

TCP-poort 135 of 445 moet zijn geopend om deze optie te kunnen gebruiken.

Voor Azure Resource Manager-VM's moet u poort 5986 openen op de NSG. Zie Beveiligingsgroepen voor meer informatie.

Voor RDFE-VM's moet u een eindpunt hebben met een privépoort 5986 en een openbare poort. U moet ook die openbare poort openen op de NSG.

  1. Open vanaf een andere VM in hetzelfde virtuele netwerk de register-editor (regedit.exe).

  2. Selecteer File>Connect Network Registry.

    Schermopname van het netwerkregister verbinden... in het menu Bestand van Register Editor

  3. Zoek de doel-VM op hostnaam of dynamisch IP-adres (bij voorkeur) door deze in te voeren in het vak Voer de objectnaam in om te selecteren .

    Schermopname van het vak Voer de objectnaam in om te selecteren in het dialoogvenster Computer selecteren.

  4. Voer de referenties voor de doel-VM in.

  5. Breng de benodigde registerwijzigingen aan.

Externe services-console

Opmerking

TCP-poorten 135 of 445 moeten zijn geopend om deze optie te kunnen gebruiken.

Voor Azure Resource Manager-VM's moet u poort 5986 openen op de NSG. Zie Beveiligingsgroepen voor meer informatie.

Voor RDFE-VM's moet u een eindpunt hebben met een privépoort 5986 en een openbare poort. U moet ook die openbare poort openen op de NSG.

  1. Open vanuit een andere VM in hetzelfde virtuele netwerk een exemplaar van Services.msc.

  2. Klik met de rechtermuisknop op Services (lokaal).

  3. Selecteer Verbinding maken met een andere computer.

    Schermopname van de optie Verbinding maken met een andere computer in het snelmenu van Services (lokaal).

  4. Voer het dynamische IP-adres van de doel-VM in.

    Schermopname van het dynamische IP-invoervak in de optie Andere computer in het dialoogvenster Computer selecteren.

  5. Breng de benodigde wijzigingen aan in de services.

Volgende stappen

  • Zie Enter-PSSession voor meer informatie over de cmdlet Enter-PSSession.
  • Zie Aangepaste scriptextensie voor Windows voor meer informatie over de aangepaste scriptextensie voor Windows met behulp van het klassieke implementatiemodel.
  • PsExec maakt deel uit van de PSTools Suite.
  • Zie PSTools voor meer informatie over de PSTools Suite.

Contacteer ons voor hulp

Als u vragen hebt of hulp nodig hebt, maak een ondersteuningsaanvraag of vraag de Azure-communityondersteuning. U kunt ook productfeedback verzenden naar de Feedback-community van Azure.