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
- Hostname commando gebruiken
- Using the System.Net.DNS .NET Class
- The GetHostName() Method
- The GetHostByName() Method
- Omgevingsvariabelen gebruiken
- De omgevingsvariabele ComputerNaam
- The MachineName Property
- WMI gebruiken
- Namen van externe computers vinden
- PowerShell Remoting gebruiken
- WMI gebruiken
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).
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.
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 deMachineName
property 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
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.