Adam the Automator

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

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).

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; 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
Win32_ComputerSystem Query
Win32_ComputerSystem Query

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!

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.