Vreți să găsiți numele unui computer Windows local sau la distanță într-un script PowerShell? Nu căutați mai departe. În acest tutorial, veți învăța cum să folosiți PowerShell pentru a obține un nume de computer în câteva moduri diferite și uneori neașteptate.
Tabel de conținut
- Precondiții
- Utilizarea comenzii Hostname
- Using the System.Net.DNS .NET Class
- The GetHostName() Method
- The GetHostByName() Method
- Utilizarea variabilelor de mediu
- Variabila de mediu ComputerName
- Proprietatea MachineName
- Utilizarea WMI
- Găsirea numelor de calculatoare la distanță
- Utilizarea PowerShell Remoting
- Utilizarea WMI
Precondiții
Acest articol va fi un tutorial practic. Dacă doriți să aplicați conceptele pe care le învățați în acest tutorial, asigurați-vă că aveți PowerShell. Asta este! Articolul va folosi PowerShell 7 (cel mai recent la data scrierii acestui articol), dar Windows PowerShell va funcționa probabil la fel de bine.
Utilizarea comenzii Hostname
Înainte de zilele PowerShell, singurul interpret de comenzi Windows pe care îl aveam era bunul și bătrânul cmd .exe. Pe atunci, nu aveam nevoie de nici un nenorocit de PowerShell pentru a obține numele unui computer; aveam comanda comandă!
Comanda hostname
nu putea fi mai simplă de atât. 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; faceți referire la proprietatea HostName
, iar PowerShell va returna doar numele de gazdă.
::GetHostByName('').HostName::GetHostByName($Null).HostName
Utilizarea variabilelor de mediu
Variabilele de mediu sunt întotdeauna un loc excelent pentru a găsi informații despre computerele Windows; utilizarea PowerShell pentru a obține un nume de computer nu este diferită.
Variabila de mediu ComputerName
Care calculator Windows stochează o variabilă de mediu numită ComputerName
. Ca toate celelalte variabile de mediu, puteți accesa variabilele de mediu ale utilizatorului prin intermediul construcției $env
PowerShell.
Pentru a face referire la variabila de mediu COMPUTERNAME
, deschideți PowerShell și prefațați numele variabilei de mediu cu $env:
. PowerShell va returna apoi numele computerului local sub forma unui singur șir de caractere.
$env:COMPUTERNAME
Proprietatea MachineName
Alternativ, dacă, din anumite motive, variabila de mediu COMPUTERNAME
bazată pe utilizator nu funcționează în situația dumneavoastră, puteți utiliza și proprietatea MachineName
care face parte din fișierul .NET Environment
clasa
Referința proprietății MachineName
din clasa Environment
.NET class, așa cum se arată mai jos.
::MachineName
Utilizarea WMI
În cele din urmă, aveți întotdeauna opțiunea de a merge în WMI sau CIM. Probabil că ar trebui să faceți acest lucru ca ultimă soluție, deoarece va necesita cel mai mult overhead, deși minuscul. Utilizarea PowerShell pentru a obține un nume de calculator cu WMI ar fi cea mai bună pentru a interoga nume de calculatoare la distanță.
Dacă doriți să utilizați WMI pentru a interoga un nume de calculator local, utilizați Get-CimInstance
pentru a interoga clasa Win32_ComputerSystem, așa cum se arată mai jos. Deoarece Get-CimInstance
nu returnează numele calculatorului, ci un obiect reprezentând o instanță CIM, faceți referire la proprietatea Name
pentru a returna doar numele calculatorului.
Get-CimInstance -ClassName Win32_ComputerSystem(Get-CimInstance -ClassName Win32_ComputerSystem).Name
Găsirea numelor de calculatoare la distanță
Poate că administrați mai multe calculatoare și trebuie să găsiți numele de gazdă pe toate acestea. De obicei, numele de gazdă va fi reprezentat în Active Directory (AD) dacă vă aflați în acest tip de mediu sau colectat de un alt instrument de gestionare a activelor. Dar dacă nu este așa, puteți apela oricând la PowerShell.
Pentru a utiliza PowerShell pentru a obține numele calculatoarelor de la distanță, aveți două opțiuni. Puteți fie să înglobați metodele pe care le-ați învățat mai sus într-un bloc de script PowerShell Remoting, fie să folosiți WMI.
Utilizarea PowerShell Remoting
În loc să acoperiți din nou fiecare metodă acoperită mai devreme în această secțiune, aflați doar atât. Puteți înfășura orice comandă locală într-un scriptblock PowerShell Remoting.
Dacă, de exemplu, aveți PowerShell Remoting activat pe un computer de la distanță, puteți pune oricare dintre metodele de mai sus în interiorul unui scriptblock și executa acel scriptblock cu comanda Invoke-Command
.
Să presupunem că aveți doar o adresă IP și trebuie să găsiți numele de gazdă al unui computer cu adresa IP 192.168.1.2 și nu vă aflați într-un mediu AD, apelați Invoke-Command
ca mai jos.
## 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
Dacă PowerShell Remoting a reușit să se conecteze la computerul de la distanță, PowerShell va returna aceeași ieșire pe care ați vedea-o dacă ați executa această comandă local.
Utilizarea WMI
Alternativ, puteți, de asemenea, să folosiți WMI pentru a utiliza PowerShell pentru a obține un nume de computer fără a fi nevoie să înfășurați o comandă în interiorul unui scriptblock. Procesul pentru a găsi un nume de computer la distanță este aproape la fel ca la nivel local; pur și simplu folosiți parametrul ComputerName
.
Get-CimInstance -ClassName Win32_ComputerSystem -ComputerName 192.168.1.2(Get-CimInstance -ClassName Win32_ComputerSystem -ComputerName 192.168.1.2).Name
Procesul Get-CimInstance
necesită autentificare. Dacă vă aflați într-un mediu AD, nu va fi nevoie să furnizați niciun fel de credențiale, așa cum se vede mai sus. Cu toate acestea, dacă nu vă aflați într-un mediu AD, va trebui să stabiliți o nouă sesiune CIM cu cmdlet-ul New-CimSession
, să utilizați Get-CimInstance
pentru a utiliza acea sesiune și apoi să eliminați singur sesiunea CIM. Mai jos este un fragment de cod despre cum se face acest lucru.
## 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
Dacă ați citit întregul tutorial, ar trebui să aveți acum aproape toate modalitățile cele mai populare de a utiliza PowerShell pentru a obține un nume de computer. Deși probabil că mai sunt multe altele pe care le-am omis, acestea sunt toate modurile în care veți găsi această sarcină îndeplinită în multe scripturi.
Acum că știți cum să îndepliniți această sarcină, încercați să construiți un script care să obțină nume de computere în masă cu o buclă, poate prin intermediul unui fișier CSV sau text!
.