Adam l’automate

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

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

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

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 !

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.