Vous avez besoin de trouver le nom d’un ordinateur Windows local ou distant dans un script PowerShell ? Ne cherchez pas plus loin. Dans ce tutoriel, vous allez apprendre à utiliser PowerShell pour obtenir le nom d’un ordinateur de plusieurs façons différentes et parfois inattendues.
Table des matières
- Prérequis
- Utilisation de la commande Hostname
- Using the System.Net.DNS .NET Class
- The GetHostName() Method
- The GetHostByName() Method
- Utilisation des variables d’environnement
- La variable d’environnement ComputerName
- La propriété MachineName
- Utiliser WMI
- Recherche de noms d’ordinateurs distants
- Utiliser PowerShell Remoting
- Utilisation de WMI
Prérequis
Cet article sera un tutoriel pratique. Si vous souhaitez appliquer les concepts que vous apprenez dans ce tutoriel, assurez-vous d’avoir PowerShell. C’est tout ! L’article utilisera PowerShell 7 (le plus récent au moment où nous écrivons ces lignes), mais Windows PowerShell fonctionnera probablement tout aussi bien.
Utilisation de la commande Hostname
Avant l’époque de PowerShell, le seul interpréteur de commandes Windows dont nous disposions était le bon vieux cmd .exe. À l’époque, nous n’avions pas besoin d’un PowerShell puant pour obtenir un nom d’ordinateur ; nous avions la commande hostname
!
La commande hostname
ne pourrait pas être plus simple. 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; référencez la propriété HostName
, et PowerShell ne retournera que le nom d’hôte.
::GetHostByName('').HostName::GetHostByName($Null).HostName
Utilisation des variables d’environnement
Les variables d’environnement sont toujours un excellent endroit pour trouver des informations sur les ordinateurs Windows ; utiliser PowerShell pour obtenir un nom d’ordinateur n’est pas différent.
La variable d’environnement ComputerName
Chaque ordinateur Windows stocke une variable d’environnement appelée ComputerName
. Comme toutes les autres variables d’environnement, vous pouvez accéder aux variables d’environnement utilisateur via la construction PowerShell $env
.
Pour référencer la variable d’environnement COMPUTERNAME
, ouvrez PowerShell et faites précéder le nom de la variable d’environnement de $env:
. PowerShell renverra alors le nom de l’ordinateur local sous la forme d’une seule chaîne de caractères.
$env:COMPUTERNAME
La propriété MachineName
Alternativement, si, pour une raison quelconque, la variable d’environnement COMPUTERNAME
basée sur l’utilisateur ne fonctionne pas dans votre situation, vous pouvez également utiliser la propriété MachineName
qui fait partie de la bibliothèque .NET Environment
Référencer la propriété MachineName
dans la classe Environment
.NET comme indiqué ci-dessous.
::MachineName
Utiliser WMI
Enfin, vous avez toujours la possibilité d’aller dans WMI ou CIM. Vous devriez probablement en faire votre dernier recours car cela nécessitera le plus de frais généraux bien que minuscules. L’utilisation de PowerShell pour obtenir un nom d’ordinateur avec WMI serait préférable pour interroger des noms d’ordinateurs distants.
Si vous souhaitez utiliser WMI pour interroger un nom d’ordinateur local, utilisez Get-CimInstance
pour interroger la classe Win32_ComputerSystem comme indiqué ci-dessous. Comme Get-CimInstance
ne renvoie pas le nom de l’ordinateur mais un objet représentant une instance CIM, référencez la propriété Name
pour ne renvoyer que le nom de l’ordinateur.
Get-CimInstance -ClassName Win32_ComputerSystem(Get-CimInstance -ClassName Win32_ComputerSystem).Name
Recherche de noms d’ordinateurs distants
Peut-être que vous gérez de nombreux ordinateurs et que vous avez besoin de trouver le nom d’hôte à travers tous ces ordinateurs. Typiquement, le nom d’hôte sera représenté dans Active Directory (AD) si vous êtes dans ce type d’environnement ou collecté par un autre outil de gestion des actifs. Mais si ce n’est pas le cas, vous pouvez toujours vous rabattre sur PowerShell.
Pour utiliser PowerShell afin d’obtenir les noms des ordinateurs distants, vous avez deux options. Vous pouvez soit envelopper les méthodes que vous avez apprises plus haut dans un bloc de script PowerShell Remoting, soit utiliser WMI.
Utiliser PowerShell Remoting
Plutôt que de reprendre chaque méthode couverte plus tôt dans cette section, sachez simplement ceci . Vous pouvez envelopper n’importe quelle commande locale dans un bloc de script PowerShell Remoting.
Si, par exemple, vous avez PowerShell Remoting activé sur un ordinateur distant, vous pouvez mettre n’importe laquelle des méthodes ci-dessus à l’intérieur d’un bloc de script et exécuter ce bloc de script avec la commande Invoke-Command
.
Supposons que vous n’avez qu’une adresse IP et que vous avez besoin de trouver le nom d’hôte d’un ordinateur avec l’adresse IP de 192.168.1.2 et que vous n’êtes pas dans un environnement AD, appelez Invoke-Command
comme ci-dessous.
## 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
Si PowerShell Remoting a pu se connecter à l’ordinateur distant, PowerShell renverra la même sortie que si vous exécutiez cette commande localement.
Utilisation de WMI
Alternativement, vous pouvez également utiliser WMI pour utiliser PowerShell pour obtenir un nom d’ordinateur sans avoir à envelopper une commande à l’intérieur d’un scriptblock. Le processus pour trouver un nom d’ordinateur distant est presque le même que localement ; il suffit d’utiliser le paramètre ComputerName
.
Get-CimInstance -ClassName Win32_ComputerSystem -ComputerName 192.168.1.2(Get-CimInstance -ClassName Win32_ComputerSystem -ComputerName 192.168.1.2).Name
La Get-CimInstance
nécessite une authentification. Si vous êtes dans un environnement AD, vous n’aurez pas besoin de fournir d’informations d’identification comme vu ci-dessus. Cependant, si vous n’êtes pas dans un environnement AD, vous devrez établir une nouvelle session CIM avec le cmdlet New-CimSession
, utiliser Get-CimInstance
pour utiliser cette session, puis supprimer la session CIM vous-même. Vous trouverez ci-dessous un extrait de code sur la façon de procéder.
## 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
Si vous avez lu l’ensemble de ce tutoriel, vous devriez maintenant connaître presque toutes les façons les plus populaires d’utiliser PowerShell pour obtenir un nom d’ordinateur. Bien qu’il y en ait probablement beaucoup d’autres que nous avons oubliées, ce sont toutes les façons dont vous trouverez cette tâche accomplie dans de nombreux scripts.
Maintenant que vous savez comment accomplir cette tâche, essayez de construire un script qui obtiendra des noms d’ordinateur en vrac avec une boucle peut-être via un CSV ou un fichier texte !
.