ネットワーク関連タスクの実行

このサンプルは Windows プラットフォームにのみ適用されます。

TCP/IP は最も一般的に使用されるネットワーク プロトコルです。そのため、TCP/IP に関連したタスクは、最も低レベルのネットワーク プロトコル管理タスクと言えます。 このセクションでは、PowerShell および WMI を使用して、これらのタスクを実行します。

コンピューターの IP アドレスの一覧表示

ローカル コンピューターで使用されているすべての IP アドレスを取得するには、次のコマンドを使用します。

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Select-Object -ExpandProperty IPAddress

Win32_NetworkAdapterConfiguration オブジェクトの IPAddress プロパティは配列なので、アドレスの全一覧を参照するには Select-ObjectExpandProperty パラメーターを使用する必要があります。

10.0.0.1
fe80::60ea:29a7:a233:7cb7
2601:600:a27f:a470:f532:6451:5630:ec8b
2601:600:a27f:a470:e167:477d:6c5c:342d
2601:600:a27f:a470:b021:7f0d:eab9:6299
2601:600:a27f:a470:a40e:ebce:1a8c:a2f3
2601:600:a27f:a470:613c:12a2:e0e0:bd89
2601:600:a27f:a470:444f:17ec:b463:7edd
2601:600:a27f:a470:10fd:7063:28e9:c9f3
2601:600:a27f:a470:60ea:29a7:a233:7cb7
2601:600:a27f:a470::2ec1

Get-Member コマンドレットを使用すると、IPAddress プロパティが配列であることを確認できます。

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Get-Member -Name IPAddress
   TypeName: Microsoft.Management.Infrastructure.CimInstance#root/cimv2/Win32_NetworkAdapterConfiguration

Name      MemberType Definition
----      ---------- ----------
IPAddress Property   string[] IPAddress {get;}

各ネットワーク アダプターの IPAddress プロパティは、実際には配列です。 Definition 列に示されている中かっこは、IPAddressSystem.String 値ではなく、System.String 値の配列であることを示しています。

IP 構成データの一覧表示

各ネットワーク アダプターの詳しい IP 構成データを表示するには、次のコマンドを使用します。

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true

ネットワーク アダプター構成オブジェクトに対して既定で表示される情報は、確認できる情報のごく一部のみです。 詳細な調査とトラブルシューティングを行う場合は、Select-Object または書式設定用コマンドレット (Format-List など) を使用して、表示するプロパティを指定します。

最新の TCP/IP ネットワークでは、IPX や WINS のプロパティには関心がないことが考えられます。 Select-ObjectExcludeProperty パラメーターを使用して、名前が "WINS" または "IPX" で始まるプロパティを非表示にすることができます。

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Select-Object -ExcludeProperty IPX*,WINS*

このコマンドは、DHCP、DNS、ルーティングなど、IP に関連した従属的な構成プロパティについて詳しい情報を返します。

コンピューターへの ping の送信

Win32_PingStatus を使用すると、コンピューターに対して簡単に ping を送信できます。 次のコマンドは ping を実行しますが、長い出力が返されます。

Get-CimInstance -Class Win32_PingStatus -Filter "Address='127.0.0.1'"

次のコマンドでは、概要を把握しやすくするため、Address、ResponseTime、StatusCode の各プロパティだけを表示しています。 Format-TableAutosize パラメーターを使用すると、PowerShell で適切に表示されるように表の列のサイズが変更されます。

Get-CimInstance -Class Win32_PingStatus -Filter "Address='127.0.0.1'" |
    Format-Table -Property Address,ResponseTime,StatusCode -Autosize
Address   ResponseTime StatusCode
-------   ------------ ----------
127.0.0.1            0          0

StatusCode が 0 の場合、ping が成功したことを示します。

配列を使用すると、1 つのコマンドで複数のコンピューターに ping を送信できます。 複数のアドレスが存在するため、ForEach-Object を使用して、各アドレスに対して個別に ping を送信します。

'127.0.0.1','localhost','bing.com' |
  ForEach-Object -Process {
    Get-CimInstance -Class Win32_PingStatus -Filter ("Address='$_'") |
      Select-Object -Property Address,ResponseTime,StatusCode
  }

同じコマンド形式を使用して、サブネット上のすべてのアドレスに ping を送信できます。たとえば、ネットワーク番号が 192.168.1.0 で、標準的なクラス C のサブネット マスク (255.255.255.0) を使用しているプライベート ネットワークを調べる場合、実際に調べる必要があるローカル アドレスは 192.168.1.1 ~ 192.168.1.254 の範囲のアドレスだけです (0 および 255 は、それぞれネットワーク番号およびサブネットのブロードキャスト アドレスとして常に予約されています)。

PowerShell で 1 から 254 の数の配列を表すには、1..254 の式を使用します。 サブネット全体に対して ping を実行するには、この範囲の各値を ping のステートメントのアドレスの一部として追加します。

1..254| ForEach-Object -Process {
  Get-CimInstance -Class Win32_PingStatus -Filter ("Address='192.168.1.$_'") } |
    Select-Object -Property Address,ResponseTime,StatusCode

このテクニックは、一定範囲のアドレスを生成する場合だけでなく、さまざまな状況で応用できます。 アドレスの完全なセットを生成するには、次のように入力します。

$ips = 1..254 | ForEach-Object -Process {'192.168.1.' + $_}

ネットワーク アダプターのプロパティの取得

前に、Win32_NetworkAdapterConfiguration クラスを使用して一般的な構成プロパティを取得できることを説明しました。 厳密には TCP/IP 情報とは言えませんが、MAC アドレスやアダプター タイプなどのネットワーク アダプター情報は、コンピューターでどのようなことが起こっているかを把握する上で有益な手段です。 この情報の要約を取得するには、次のコマンドを使用します。

Get-CimInstance -Class Win32_NetworkAdapter -ComputerName .

ネットワーク アダプターの DNS ドメインの割り当て

自動名前解決のために DNS ドメインを割り当てるには、Win32_NetworkAdapterConfigurationSetDNSDomain メソッドを使用します。 Invoke-CimMethodQuery パラメーターは、WQL クエリ文字列を取ります。 このコマンドレットは、このクエリにより返される各インスタンスで指定したメソッドを呼び出します。

$wql = 'SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=True'
$args = @{ DnsDomain = 'fabrikam.com'}
Invoke-CimMethod -MethodName SetDNSDomain -Arguments $args -Query $wql

ネットワークで TCP/IP のみが使用されている場合でも、コンピューター上のネットワーク アダプター構成の一部が真の TCP/IP アダプターではないので、IPEnabled=True でフィルター処理する必要があります。 これらは、すべてのアダプターに対する RAS、VPN、QoS およびその他のサービスをサポートする一般的なソフトウェア要素であるため、独自のアドレスは持ちません。

DHCP の構成タスクの実行

DNS の構成と同様、DHCP 情報の変更には、一連のネットワーク アダプターに対する操作が伴います。 WMI を使って実行できる個別のアクションがいくつかあります。

DHCP 対応アダプターの検出

コンピューター上の DHCP 対応アダプターを検索するには、次のコマンドを使用します。

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=$true"

IP 構成の問題があるアダプターを除外するために、IP 対応アダプターだけを検索できます。

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=$true and DHCPEnabled=$true"

DHCP のプロパティの取得

通常、アダプターの DHCP 関連のプロパティは先頭に DHCP が付くため、Format-Table の Property パラメーターを使用することで、それらのプロパティだけを表示できます。

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter  "IPEnabled=$true and DHCPEnabled=$true" |
  Format-Table -Property DHCP*

各アダプターの DHCP の有効化

すべてのアダプターで DHCP を有効にするには、次のコマンドを使用します。

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE IPEnabled=True and DHCPEnabled=False'
Invoke-CimMethod -MethodName ReleaseDHCPLease -Query $wql

フィルター ステートメント IPEnabled=True and DHCPEnabled=False を使用すると、DHCP が既に有効になっている場合に、それの有効化を回避できます。

特定のアダプターの DHCP リースの解放および更新

Win32_NetworkAdapterConfiguration クラスのインスタンスには ReleaseDHCPLease および RenewDHCPLease メソッドがあります。 使用方法はどちらも同じです。 通常、これらのメソッドを使用するのは、特定のサブネット上に存在するアダプターのアドレスを解放または更新する必要がある場合だけです。 サブネット上のアダプターをフィルター処理する最も簡単な方法は、対応するサブネットのゲートウェイを使用したアダプター構成だけを選ぶことです。 たとえば、次のコマンドでは、DHCP リースを 192.168.1.254 から取得しているローカル コンピューターについて、アダプターの DHCP リースがすべて解放されます。

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE DHCPServer="192.168.1.1"'
Invoke-CimMethod -MethodName ReleaseDHCPLease -Query $wql

DHCP リースを更新する場合は、ReleaseDHCPLease メソッドの代わりに RenewDHCPLease メソッドを使用するだけです。

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE DHCPServer="192.168.1.1"'
Invoke-CimMethod -MethodName RenewDHCPLease -Query $wql

注意

これらのメソッドをリモート コンピューターに対して使用する場合は、接続に使用されているアダプターのリースが解放または更新されると、リモート システムへのアクセスが失われる可能性があることにご注意ください。

すべてのアダプターの DHCP リースの解放および更新

Win32_NetworkAdapterConfigurationReleaseDHCPLeaseAllRenewDHCPLeaseAll のメソッドを使用すれば、すべてのアダプターを対象に DHCP アドレスをグローバルに解放または更新できます。 ただし、リースの解放と更新をグローバルに実行する場合、実行の対象は、特定のアダプターではなく、WMI クラスになります。したがって、コマンドは特定のアダプターに適用するのではなく、WMI クラスに適用する必要があります。 Invoke-CimMethod コマンドレットを使用すると、クラスのメソッドを呼び出すことができます。

Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName ReleaseDHCPLeaseAll

RenewDHCPLeaseAll メソッドも、同じコマンド形式で呼び出すことができます。

Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName RenewDHCPLeaseAll

ネットワーク共有の作成

ネットワーク共有を作成するには、Win32_ShareCreate メソッドを使用します。

Invoke-CimMethod -ClassName Win32_Share -MethodName Create -Arguments @{
    Path = 'C:\temp'
    Name = 'TempShare'
    Type = [uint32]0 #Disk Drive
    MaximumAllowed = [uint32]25
    Description = 'test share of the temp folder'
}

これは、Windows の次の net share コマンドと同等です。

net share tempshare=c:\temp /users:25 /remark:"test share of the temp folder"

パラメーターを受け取る WMI クラスのメソッドを呼び出すとき、使用できるパラメーターと、それらのパラメーターの型を知っている必要があります。 たとえば、Win32_Class のメソッドを一覧表示するには、次のコマンドを使用します。

(Get-CimClass -ClassName Win32_Share).CimClassMethods
Name          ReturnType Parameters                                   Qualifiers
----          ---------- ----------                                   ----------
Create            UInt32 {Access, Description, MaximumAllowed, Name…} {Constructor, Implemented, MappingStrings, Stati…
SetShareInfo      UInt32 {Access, Description, MaximumAllowed}        {Implemented, MappingStrings}
GetAccessMask     UInt32 {}                                           {Implemented, MappingStrings}
Delete            UInt32 {}                                           {Destructor, Implemented, MappingStrings}

Create メソッドのパラメーターを一覧表示するには、次のコマンドを使用します。

(Get-CimClass -ClassName Win32_Share).CimClassMethods['Create'].Parameters
Name            CimType Qualifiers                                  ReferenceClassName
----            ------- ----------                                  ------------------
Access         Instance {EmbeddedInstance, ID, In, MappingStrings…}
Description      String {ID, In, MappingStrings, Optional}
MaximumAllowed   UInt32 {ID, In, MappingStrings, Optional}
Name             String {ID, In, MappingStrings}
Password         String {ID, In, MappingStrings, Optional}
Path             String {ID, In, MappingStrings}
Type             UInt32 {ID, In, MappingStrings}

Win32_Share クラスの Create メソッドのドキュメントも参照してください。

ネットワーク共有の削除

ネットワーク共有は Win32_Share を使用しても削除できますが、Win32_Share クラスではなく、削除対象となる特定の共有を取得する必要があるため、そのプロセスは共有を作成する場合と若干異なります。 次の例では、TempShare という共有を削除します。

$wql = 'SELECT * from Win32_Share WHERE Name="TempShare"'
Invoke-CimMethod -MethodName Delete -Query $wql

Windows でアクセス可能なネットワーク ドライブの接続

New-PSDrive コマンドレットで、ネットワーク共有にマップされた PowerShell ドライブを作成できます。

New-PSDrive -Name "X" -PSProvider "FileSystem" -Root "\\Server01\Public"

ただし、この方法で作成されたドライブは、それが作成された PowerShell セッションでのみ使用できます。 PowerShell 以外 (またはその他の PowerShell セッション) で使用できるドライブをマップするには、Persist パラメーターを使用します。

New-PSDrive -Persist -Name "X" -PSProvider "FileSystem" -Root "\\Server01\Public"

注意

昇格されたコンテキストで実行している場合は、永続的にマップされたドライブは使用できない場合があります。 これは Windows UAC の既定の動作です。 詳しくは、次の資料を参照してください。