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
- A Hostname parancs használata
- Using the System.Net.DNS .NET Class
- The GetHostName() Method
- The GetHostByName() Method
- Környezeti változók használata
- A ComputerName környezeti változó
- A MachineName tulajdonság
- WMI használata
- Távoli számítógépek nevének keresése
- PowerShell Remoting használata
- WMI használata
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).
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; 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
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!