Az Automator Ádám

Szüksége van egy helyi vagy távoli Windows-számítógép nevének megkeresésére egy PowerShell-szkriptben? Ne keressen tovább. Ebben a bemutatóban megtanulod, hogyan használhatod a PowerShellt a számítógép nevének kinyerésére néhány különböző és néha váratlan módon.

Tartalomjegyzék

Előfeltételek

Ez a cikk egy gyakorlati bemutató lesz. Ha szeretné alkalmazni az ebben a bemutatóban tanult fogalmakat, győződjön meg róla, hogy rendelkezik PowerShell-lel. Ennyi! A cikkben a PowerShell 7-et fogjuk használni (a legújabbat, amikor ezt a cikket írtuk), de a Windows PowerShell valószínűleg ugyanilyen jól fog működni.

A Hostname parancs használata

A PowerShell megjelenése előtt az egyetlen Windows parancsértelmező a jó öreg cmd .exe volt. Akkoriban nem volt szükségünk semmiféle büdös PowerShellre ahhoz, hogy megtudjuk a számítógép nevét; ott volt a hostname parancs!

A hostname parancs nem is lehetne egyszerűbb. 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; hivatkozzon a HostName tulajdonságra, és a PowerShell csak az állomásnevet adja vissza.

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

Környezeti változók használata

A környezeti változók mindig kiválóan alkalmasak a Windows-számítógépekkel kapcsolatos információk keresésére; a PowerShell használata a számítógép nevének lekérdezésére sem más.

A ComputerName környezeti változó

Minden Windows-számítógép tárol egy ComputerName nevű környezeti változót. Mint minden más környezeti változót, a felhasználói környezeti változókat is a $env PowerShell konstrukcióval érheti el.

A COMPUTERNAME környezeti változóra való hivatkozáshoz nyissa meg a PowerShellt, és a környezeti változó neve elé írja a $env: szót. A PowerShell ekkor egyetlen karakterláncként adja vissza a helyi számítógép nevét.

$env:COMPUTERNAME

A MachineName tulajdonság

Alternatívaként, ha valamilyen oknál fogva a felhasználó alapú COMPUTERNAME környezeti változó nem működik az Ön helyzetében, használhatja a MachineName tulajdonságot is, amely a .NET Environment osztály részét képezi.

Hivatkozzon a MachineName tulajdonságra a Environment .NET osztályban az alábbiak szerint.

::MachineName

WMI használata

Végezetül mindig van lehetőségünk a WMI vagy a CIM használatára. Valószínűleg ezt kell tennie az utolsó lehetőségnek, mivel ez igényli a legtöbb rezsiköltséget, bár apró. A PowerShell használata a számítógép nevének WMI-vel történő lekérdezéséhez a legjobb a távoli számítógépek nevének lekérdezéséhez.

Ha a WMI-t szeretné használni a helyi számítógép nevének lekérdezéséhez, használja a Get-CimInstance-t a Win32_ComputerSystem osztály lekérdezéséhez az alábbiakban látható módon. Mivel a Get-CimInstance nem a számítógép nevét adja vissza, hanem egy CIM-példányt képviselő objektumot, hivatkozzon a Name tulajdonságra, hogy csak a számítógép nevét adja vissza.

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

Távoli számítógépek nevének keresése

Talán sok számítógépet kezel, és mindegyiken meg kell találnia a hostnevet. Általában az állomásnevet az Active Directory (AD) képviseli, ha ilyen környezetben van, vagy valamilyen más eszközkezelő eszköz gyűjti össze. De ha nem így van, akkor mindig visszanyúlhat a PowerShellhez.

A PowerShell használatához a távoli számítógépek nevének lekérdezéséhez két lehetősége van. Vagy egy PowerShell Remoting szkriptblokkba csomagolja a fentebb tanult módszereket, vagy a WMI-t használja.

PowerShell Remoting használata

Ahelyett, hogy ebben a részben minden egyes korábban tárgyalt módszert újra tárgyalnánk, csak annyit tudjunk, hogy. Bármilyen helyi parancsot be lehet csomagolni egy PowerShell Remoting scriptblockba.

Ha például egy távoli számítógépen engedélyezve van a PowerShell Remoting, akkor a fenti módszerek bármelyikét beillesztheti egy scriptblockba, és a Invoke-Command paranccsal végre tudja hajtani a scriptblockot.

Tegyük fel, hogy csak egy IP-címmel rendelkezik, és egy 192.168.1 IP-című számítógép hostnevét kell megkeresnie.2 és nem AD-környezetben van, hívja a Invoke-Command parancsot az alábbiak szerint.

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

Ha a PowerShell Remoting képes volt csatlakozni a távoli számítógéphez, a PowerShell ugyanazt a kimenetet adja vissza, mintha ezt a parancsot helyileg futtatná.

WMI használata

Alternatívaként a WMI-t is használhatja a PowerShell segítségével a számítógép nevének lekérdezésére anélkül, hogy a parancsot egy scriptblokkba kellene csomagolnia. A távoli számítógép nevének megkeresése majdnem ugyanaz a folyamat, mint helyben; egyszerűen használja a ComputerName paramétert.

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

A Get-CimInstance hitelesítést igényel. Ha AD-környezetben van, akkor a fentiekben látható módon nem kell hitelesítő adatokat megadnia. Ha azonban nem AD-környezetben van, akkor új CIM-munkamenetet kell létrehoznia a New-CimSession cmdlet segítségével, a Get-CimInstance használatával használnia kell a munkamenetet, majd a CIM-munkamenetet saját maga kell eltávolítania. Az alábbiakban egy kódrészletet mutatjuk be, hogyan kell ezt megtenni.

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

Ha végigolvastad ezt az egész oktatóanyagot, akkor most már szinte az összes legnépszerűbb módját ismered a PowerShell segítségével a számítógép nevének lekérdezéséhez. Bár valószínűleg még sok más is van, amit kihagytunk, ezek az összes olyan módok, amelyekkel ezt a feladatot sok szkriptben megtalálod.

Most, hogy tudod, hogyan kell elvégezni ezt a feladatot, próbálj meg létrehozni egy olyan szkriptet, amely egy ciklus segítségével tömegesen szerez számítógépneveket, esetleg egy CSV- vagy szövegfájlon keresztül!

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.