Adam the Automator

Moet je de naam van een lokale of externe Windows computer vinden in een PowerShell script? Zoek niet verder. In deze zelfstudie leert u hoe u PowerShell kunt gebruiken om een computernaam op een paar verschillende en soms onverwachte manieren te achterhalen.

Inhoudsopgave

Voorvereisten

Dit artikel is een praktijkgerichte zelfstudie. Als u de concepten die u in deze handleiding leert, wilt toepassen, zorg er dan voor dat u PowerShell hebt. Dat is het! In dit artikel wordt PowerShell 7 gebruikt (de nieuwste versie op het moment van schrijven), maar Windows PowerShell werkt waarschijnlijk net zo goed.

Hostname commando gebruiken

Vóór de dagen van PowerShell was de enige Windows commando-interpreter die we hadden cmd .exe. Toen hadden we geen stinkende PowerShell nodig om een computernaam op te vragen; we hadden het hostname commando!

Het hostname commando kan niet eenvoudiger zijn. Open up a PowerShell (or even cmd .exe prompt) and type hostname. Done. This command returns a single string (the computer name of the local computer).

Running the hostname command
Running the hostname command

Using the System.Net.DNS .NET Class

If you’d like to go the more PowerShell-centric approach, you can also reference a static method called GetHostByName() located in the System.Net.DNS .NET class or perhaps the GetHostName() method.

The GetHostName() Method

Using the GetHostName() method is probably the easiest way to use PowerShell to get a computer name. Simply call this static method with no arguments as shown below. This command will return a single string just like the hostname command does.

::GetHostName()

The GetHostByName() Method

An alternative but similar System.Net.DNS class method you can use to get a computer name is called GetHostByName(). This method is actually a DNS resolver and can be used to look up other host names as well.

If, for example, you’d like to find the host name of the local computer, run ::GetHostByName($null) or ::GetHostByName('').

::GetHostByName('')::GetHostByName($Null)

You’ll see that this method isn’t strictly meant for finding computer names; you can also lookup IP addresses as well via the AddressList property as shown below.

Using the GetHostByName() method
Using the GetHostByName() method

If, however, you want to only find the local computer name; verwijst u naar de HostName eigenschap, en PowerShell zal alleen de hostnaam retourneren.

::GetHostByName('').HostName::GetHostByName($Null).HostName

Omgevingsvariabelen gebruiken

Omgevingsvariabelen zijn altijd een goede plaats om informatie over Windows-computers te vinden; PowerShell gebruiken om een computernaam op te vragen is niet anders.

De omgevingsvariabele ComputerNaam

Elke Windows-computer slaat een omgevingsvariabele op met de naam ComputerName. Net als alle andere omgevingsvariabelen hebt u toegang tot de gebruikersomgevingsvariabelen via de $env PowerShell-constructie.

Om te verwijzen naar de COMPUTERNAME omgevingsvariabele, opent u PowerShell en laat u de naam van de omgevingsvariabele voorafgaan door $env:. PowerShell retourneert dan de naam van de lokale computer als een enkele string.

$env:COMPUTERNAME

The MachineName Property

Als alternatief, als om wat voor reden dan ook de op de gebruiker gebaseerde COMPUTERNAME omgevingsvariabele niet werkt in uw situatie, kunt u ook de MachineName property gebruiken die onderdeel is van de .NET Environment class.

Refereer deMachineNameproperty in deEnvironment.NET klasse, zoals hieronder te zien is.

::MachineName

WMI gebruiken

Ten slotte heb je altijd nog de optie om WMI of CIM te gebruiken. Dit is waarschijnlijk je laatste redmiddel, omdat het de meeste overhead vergt, zij het weinig. Het gebruik van PowerShell om een computernaam op te vragen met WMI is het beste voor het opvragen van computernamen op afstand.

Als je WMI wilt gebruiken om een lokale computernaam op te vragen, gebruik dan Get-CimInstance om de Win32_ComputerSystem klasse op te vragen, zoals hieronder wordt getoond. Aangezien Get-CimInstance niet de computernaam teruggeeft, maar een object dat een CIM-instantie vertegenwoordigt, verwijst u naar de Name eigenschap om alleen de computernaam terug te geven.

Get-CimInstance -ClassName Win32_ComputerSystem(Get-CimInstance -ClassName Win32_ComputerSystem).Name
Win32_ComputerSystem Query
Win32_ComputerSystem Query

Namen van externe computers vinden

Misschien beheert u veel computers en moet u de hostnaam voor al deze computers vinden. Meestal wordt de hostnaam weergegeven in Active Directory (AD) als u zich in een dergelijke omgeving bevindt of wordt deze opgehaald door een ander hulpprogramma voor middelenbeheer. Maar als dat niet het geval is, kun je altijd terugvallen op PowerShell.

Om PowerShell te gebruiken om namen van computers op afstand te achterhalen, heb je twee opties. U kunt de methoden die u hierboven hebt geleerd, verpakken in een PowerShell Remoting scriptblock of u kunt WMI gebruiken.

PowerShell Remoting gebruiken

In plaats van elke eerder behandelde methode in deze sectie opnieuw te behandelen, weet u alleen dit. U kunt elk lokaal commando verpakken in een PowerShell Remoting scriptblock.

Als u bijvoorbeeld PowerShell Remoting hebt ingeschakeld op een computer op afstand, kunt u elk van de bovenstaande methoden binnen een scriptblock plaatsen en dat scriptblock uitvoeren met het Invoke-Command commando.

Aannemend dat u alleen een IP-adres hebt en de hostnaam van een computer met het IP-adres 192.168.1 moet vinden.2 en u zich niet in een AD-omgeving bevindt, roept u Invoke-Command op zoals hieronder.

## Create the pscredential object to pass to Invoke-Command$credential = Get-Credential## Run the command on the remote computerInvoke-Command -ComputerName 192.168.1.2 -ScriptBlock { ::GetHostName() } -Credential $credential

Als PowerShell Remoting verbinding heeft kunnen maken met de externe computer, geeft PowerShell dezelfde uitvoer als u zou zien als u dit commando lokaal uitvoerde.

WMI gebruiken

Aternatief kunt u ook WMI gebruiken om met PowerShell een computernaam op te vragen zonder dat u een opdracht in een scriptblok hoeft te wikkelen. Het proces om een computernaam op afstand te vinden is bijna hetzelfde als lokaal; gebruik gewoon de ComputerName parameter.

Get-CimInstance -ClassName Win32_ComputerSystem -ComputerName 192.168.1.2(Get-CimInstance -ClassName Win32_ComputerSystem -ComputerName 192.168.1.2).Name

De Get-CimInstance vereist authenticatie. Als je in een AD omgeving zit, hoef je geen inloggegevens in te vullen, zoals hierboven te zien is. Als u zich echter niet in een AD omgeving bevindt, zult u een nieuwe CIM sessie moeten opzetten met het New-CimSession cmdlet, gebruik Get-CimInstance om die sessie te gebruiken, en verwijder dan zelf de CIM sessie. Hieronder staat een codefragment hoe je dat moet doen.

## Create the PSCredential object$credential = Get-Credential## Connect to the remote computer passing the creds and creating a remote session$cimSession = New-CimSession -ComputerName 192.168.1.5 -Credential $credential## Use the session to query WMI and reference the Name property(Get-CimInstance -Session $cimSession -ClassName Win32_ComputerSystem).Name

Als je deze hele tutorial hebt doorgelezen, zou je nu bijna alle populairste manieren moeten kennen om PowerShell te gebruiken om een computernaam op te halen. Hoewel er waarschijnlijk nog veel meer zijn die we over het hoofd hebben gezien, zijn dit alle manieren waarop je deze taak in veel scripts terugvindt.

Nu je weet hoe je deze taak moet uitvoeren, kun je proberen een script te maken dat in bulk computernamen ophaalt met een lus, misschien via een CSV- of tekstbestand.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.