Adam the Automator

Behöver du hitta namnet på en lokal eller fjärrdator i Windows i ett PowerShell-skript? Sök inte längre. I den här handledningen kommer du att lära dig hur du använder PowerShell för att få fram ett datornamn på några olika och ibland oväntade sätt.

Innehållsförteckning

Förutsättningar

Den här artikeln kommer att vara en praktisk handledning. Om du vill tillämpa de begrepp du lär dig i den här handledningen ska du se till att du har PowerShell. Det var allt! Artikeln kommer att använda PowerShell 7 (den senaste i skrivande stund) men Windows PowerShell fungerar förmodligen lika bra.

Användning av kommandot Hostname

Förut innan PowerShells dagar var den enda Windows-kommandotolken vi hade den gamla goda cmd .exe. Då behövde vi ingen stinkande PowerShell för att få fram ett datornamn; vi hade kommandot hostname!

Kommandot hostname kunde inte vara enklare. 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; referera till egenskapen HostName, så returnerar PowerShell endast värdnamnet.

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

Användning av miljövariabler

Miljövariabler är alltid ett bra ställe att hitta information om Windows-datorer; att använda PowerShell för att få fram ett datornamn är inte annorlunda.

Miljövariabeln ComputerName

Varje Windows-dator lagrar en miljövariabel som heter ComputerName. Precis som alla andra miljövariabler kan du få tillgång till användarmiljövariabler via $env PowerShell-konstruktionen.

Om du vill hänvisa till COMPUTERNAME-miljövariabeln öppnar du PowerShell och inleder namnet på miljövariabeln med $env:. PowerShell returnerar då det lokala datornamnet som en enda sträng.

$env:COMPUTERNAME

Egenskapen MachineName

Alternativt, om den användarbaserade COMPUTERNAME-miljövariabeln av någon anledning inte fungerar i din situation, kan du också använda egenskapen MachineName som är en del av .NET-klassen Environment.

Reference the MachineName property in the Environment .NET-klassen som visas nedan.

::MachineName

Användning av WMI

Slutligt har du alltid möjlighet att gå in i WMI eller CIM. Du bör förmodligen göra detta till din sista utväg eftersom det kommer att kräva mest overhead även om den är liten. Att använda PowerShell för att få ett datornamn med WMI skulle vara bäst för att fråga ut fjärrdatornamn.

Om du vill använda WMI för att fråga ut ett lokalt datornamn använder du Get-CimInstance för att fråga ut klassen Win32_ComputerSystem som visas nedan. Eftersom Get-CimInstance inte returnerar datornamnet utan ett objekt som representerar en CIM-instans, hänvisar du till egenskapen Name för att endast returnera datornamnet.

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

Hitta namn på fjärrdatorer

Du kanske hanterar många datorer och behöver hitta värdnamnet på alla datorer. Vanligtvis representeras värdnamnet i Active Directory (AD) om du befinner dig i den typen av miljö eller samlas in av något annat verktyg för tillgångshantering. Men om det inte gör det kan du alltid använda PowerShell.

För att använda PowerShell för att få fram namn på fjärrdatorer har du två alternativ. Du kan antingen slå in metoderna du lärt dig ovan i ett skriptblock för PowerShell Remoting eller använda WMI.

Användning av PowerShell Remoting

Istället för att täcka varje metod täcka tidigare igen i det här avsnittet, bara veta detta. Du kan linda in vilket lokalt kommando som helst i ett skriptblock för PowerShell Remoting.

Om du till exempel har PowerShell Remoting aktiverat på en fjärrdator kan du placera någon av ovanstående metoder i ett skriptblock och köra det skriptblocket med kommandot Invoke-Command.

Att anta att du bara har en IP-adress och att du behöver hitta värdnamnet på en dator med IP-adressen 192.168.1.2 och du inte befinner dig i en AD-miljö, anropar du Invoke-Command som nedan.

## 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

Om PowerShell Remoting kunde ansluta till fjärrdatorn returnerar PowerShell samma utdata som om du hade kört det här kommandot lokalt.

Användning av WMI

Alternativt kan du också använda WMI för att använda PowerShell för att få fram ett datornamn utan att behöva linda in ett kommando i ett skriptblock. Processen för att hitta ett fjärrdatornamn är nästan densamma som lokalt; använd helt enkelt parametern ComputerName.

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

Den Get-CimInstance kräver autentisering. Om du befinner dig i en AD-miljö behöver du inte ange några autentiseringsuppgifter som ovan. Om du däremot inte befinner dig i en AD-miljö måste du upprätta en ny CIM-session med cmdlet New-CimSession, använda Get-CimInstance för att använda den sessionen och sedan ta bort CIM-sessionen själv. Nedan finns ett kodutdrag om hur du gör det.

## 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

Om du har läst igenom hela den här handledningen bör du nu ha koll på nästan alla de populäraste sätten att använda PowerShell för att få fram ett datornamn. Även om det förmodligen finns många fler som vi har missat, är det här alla sätt som du hittar den här uppgiften i många skript.

Nu när du vet hur du utför den här uppgiften kan du försöka bygga ett skript som hämtar datornamn i bulk med en slinga, kanske via en CSV- eller textfil!

Lämna ett svar

Din e-postadress kommer inte publiceras.