Adam the Automator

ローカルまたはリモートの Windows コンピューターの名前を PowerShell スクリプトで検索する必要がありますか。 もう悩むことはありません。 このチュートリアルでは、PowerShell を使用して、いくつかの異なる、時には予想外の方法でコンピューター名を取得する方法を学びます。

目次

前提条件

この記事は実践チュートリアルとします。 このチュートリアルで学んだ概念を適用したい場合は、PowerShell があることを確認してください。 これだけです!

Hostname コマンドの使用

PowerShell の時代以前には、Windows コマンド インタープリターといえば、古き良き cmd .exe だけでした。 当時は、コンピューター名を取得するのに PowerShell は必要なく、hostname コマンドがありました!

hostname コマンドは、これ以上ないほどシンプルでした。 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; を参照し、PowerShell はホスト名のみを返します。

::GetHostByName('').HostName::GetHostByName($Null).HostName

環境変数の使用

環境変数は常に Windows コンピューターに関する情報を見つけるための素晴らしい場所です。 他のすべての環境変数と同様に、$env PowerShell 構造体を介してユーザー環境変数にアクセスできます。

環境変数 COMPUTERNAME を参照するには、PowerShell を開いて環境変数名の前に $env: を付けてください。

$env:COMPUTERNAME

MachineName

また、何らかの理由でユーザー ベース COMPUTERNAME 環境変数が使用できない場合、.NET の一部の MachineName プロパティを使用して、その環境に合った方法で使用することもできます。

EnvironmentMachineName プロパティを参照する Environment .

::MachineName

WMI の使用

最後に、WMI または CIM に入るという選択肢も常にあります。 わずかではありますが、最もオーバーヘッドを必要とするので、おそらくこれを最後の手段とすべきです。

ローカル コンピューター名を照会するために WMI を使用したい場合、Get-CimInstance を使用して、次のように Win32_ComputerSystem クラスを照会してください。 Get-CimInstance はコンピューター名ではなく、CIM インスタンスを表すオブジェクトを返すので、コンピューター名のみを返すように Name プロパティを参照します。

Get-CimInstance -ClassName Win32_ComputerSystem(Get-CimInstance -ClassName Win32_ComputerSystem).Name
Win32_ComputerSystem Query
Win32_ComputerSystem Query

Finding Remote Computer Names

おそらく、多くのコンピューターを管理して、それらすべてにわたってホスト名を見つける必要があると思います。 通常、ホスト名は、そのような環境であれば Active Directory (AD) で表されるか、他の資産管理ツールによって収集されます。 しかし、そうでない場合は、いつでも PowerShell に頼ることができます。

PowerShell を使用してリモート コンピューター名を取得するには、2 つのオプションがあります。 PowerShell Remoting scriptblock で上で学んだ方法をラップするか、WMI を使用するかです。

PowerShell Remoting の使用

このセクションで先に説明した各方法をもう一度説明するのではなく、このことだけ知っておいてください。

たとえば、リモート コンピュータで PowerShell Remoting を有効にしている場合、上記の方法のいずれかを scriptblock の中に入れて、Invoke-Command コマンドでその scriptblock を実行できます。

仮に、IP アドレスだけを持っていて、IP アドレス 192.168.1.0 のコンピューターのホスト名を見つける必要があるとすると、そのホスト名は PowerShell Remoting で表示されます。

## 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

PowerShell Remoting がリモート コンピュータに接続できた場合、PowerShell はこのコマンドをローカルで実行したときと同じ出力を返します。

WMI の使用

あるいは、WMI を使用して、スクリプト ブロックの内部にコマンドをラップしなくても、PowerShell でコンピューター名を取得することもできます。 リモート コンピューター名を検索するプロセスは、ローカルとほぼ同じです。単に ComputerName

Get-CimInstance -ClassName Win32_ComputerSystem -ComputerName 192.168.1.2(Get-CimInstance -ClassName Win32_ComputerSystem -ComputerName 192.168.1.2).Name

Get-CimInstance は認証を要求しています。 AD 環境にいる場合は、上記のように認証情報を入力する必要はありません。 しかし、AD 環境でない場合は、New-CimSession コマンドレットで新しい CIM セッションを確立し、Get-CimInstance でそのセッションを使用し、その後 CIM セッションを自分で削除する必要があります。

## 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

このチュートリアル全体を読み通したなら、PowerShell を使用してコンピューター名を取得する最も一般的な方法をほぼすべて理解しているはずです。

このタスクを実行する方法がわかったので、おそらく CSV またはテキスト ファイルを介してループでコンピューター名を一括取得するスクリプトを作成してみてください。

コメントを残す

メールアドレスが公開されることはありません。