Operations Lab.

Archive for 12月 2012

Microsoft Update で PowerShell 3.0 が配信開始

leave a comment »

Microsoft Update (Windows Update) 経由で x64 ベース システム Windows 7 用 Windows Management Framework 3.0 (KB2506143) が配信開始されました。

20121212_wu01

x64 ベース システム Windows 7 用 Windows Management Framework 3.0
KB 2506143
ダウンロード サイズ 15.9 MB
再起動 必要
更新プログラムの種類 オプション
詳細 Windows Management Framework 3.0 は、Windows 7 および Windows Server 2008 R2 用の管理機能が更新された製品です。Windows Management Framework 3.0 には、Windows PowerShell 3.0、WMI、WinRM 3.0 など、さまざまな管理機能が含まれています。

PowerShell 3.0 をインストールしたい場合、これまではダウンロードセンターから  msu ファイル (Microsoft Update 更新プログラムパッケージ) をダウンロードしてインストールする必要がありましたが、今後は Microsoft Update から直接インストールできます。(オプションの更新なので、Microsoft Update で「Windows の更新時に Microsoft 製品の更新プログラムを入手し、新しいオプションの Microsoft ソフトウェアについて確認する」オプションを有効にしていないと、更新対象として表示されないかもしれません。)

広告

Written by kazu

2012/12/12 at 13:27

Windows 7 で RDP 8.0 を使用する

leave a comment »

Windows 8 の発売が開始されましたが、それに合わせて Windows 7 / Windows Server 2008 R2 用の更新プログラム(KB2592687)が公開されました。

この更新プログラムを適用すると、Windows 7 や Windows 2008 R2 上で RDP 8.0 を使用できます。

RDP 8.0 の新機能

RDP 8.0 の新機能は以下の通りです。

  • RemoteFX for WAN
  • RemoteFX ネットワーク自動検出
  • RemoteFX Adaptive Graphics
  • RemoteFX メディアストリーミング
  • RemoteFX USBリダイレクション
  • ネストされたセッションのサポート
  • ユーザエクスペリエンス用のパフォーマンスカウンタの追加

また、リモートデスクトップ接続(リモートデスクトップクライアント / mstsc.exe ) 8.0 の新機能は以下の通りです。

  • RDP 8.0 のサポート
  • RDP セッション開始後に、動的に USB リダイレクションを設定可能
  • Remote Desktop Web アクセスのシングルサインオン
  • RemoteApp 及びデスクトップセッションの再接続
  • RemoteFX Media Redirection API のサポート
  • ネストされたセッションのサポート

尚、RDP 8.0 の新機能は Windows Server 2008 R2 では利用できません。(有効に機能しません。) KB2592687 を適用した場合、Windows Server 2008 R2 のリモートデスクトップ接続(クライアント)は上記の機能を利用できますが、KB2592687 を適用した Windows Server 2008 R2 へ Windows 8 等の RDP 8.0 が有効なクライアントから接続しても、RDP 8.0 の新機能は利用できません。

利用できなくなる機能

RDP 8.0 を有効化する事で利用できなくなる機能や制限事項について、既知の問題として公開されています。

  • RemoteFX の仮想 GPU がインストールされた仮想デスクトップ環境では RDP 8.0 を有効化できない。
  • Shadow セッションが利用できない。
  • Aero Glass が利用できない。
  • Windows Virtual PC のドライブマッピングが使用できない。

また、RDP 8.0 の有効化のみを行うと、以下の様な問題が発生します。

  • Windows 7 SP1 で RDP 8.0 を有効化しても、UDP が使用されない。
    • これは、デフォルトで UDP を使用しない設定となっている為。UDP を使用したい場合は、明示的に構成する必要がある。
  • Administrators グループのユーザが RDP 経由でログインできなくなる。
    • RDP 8.0 を有効化すると、Remote Desktop Users に所属しているユーザのみが RDP でログインできる状態となる。従来、Administrators グループのユーザには、暗黙的に RDP ログインができる様な権限が付与されていたが、RDP 8.0 を有効化した場合は、たとえ Administrators グループのユーザでも、Remote Desktop Users に所属していない限り RDP ログインできない。

特に、2つ目はハマると悲しい事になりそうです…。

インストール手順

KB2592687 の更新プログラムをインストールする前に、KB2574819 の更新プログラムを適用する必要があります。

win7rdp8-01

Windows Update (Microsoft Update)経由でインストールできますので、オプションの更新プログラムから KB2592687 と KB2574819 を選択してインストールするとお手軽です。(同時にインストールできます。)

win7rdp8-02

インストールを行うとプログラムやライブラリは更新されますが、RDP 8.0 は無効化されており、そのままでは使用できません(使用されません)。RDP 8.0 を使用する場合は、グループポリシーやローカルセキュリティポリシーを構成し、RDP 8.0 を明示的に有効化する必要があります。

コンピューターの構成\管理用テンプレート\Windowsコンポーネント\リモートデスクトップサービス\リモートデスクトップセッションホスト\リモートセッション環境\リモートデスクトッププロトコル 8.0 を有効にする

また、RDP 8.0 で UDP を使用したい場合は、以下のポリシーも併せて構成します。

コンピューターの構成\管理用テンプレート\Windowsコンポーネント\リモートデスクトップサービス\リモートデスクトップセッションホスト\接続\RDPトランスポートプロトコルの選択

追記(2012/12/11)

RDP 8.0 を使うメリット、デメリットや結局使った方が良いの?といった話は、MVP の 山市さんによる記事で細かく解説されています。

これから利用を検討される方は、参考にされると良いと思います。

Written by kazu

2012/12/11 at 21:37

PowerShell を使用して IPv6 アドレスを設定する

leave a comment »

※この投稿は、PowerShell Advent Calendar 2012 に参加しています。

Windows は(以前から) IPv6 をサポートしています。最近は IPv6 接続が行える ISP も増えてきていますので、サーバに IPv6 アドレスをアサインする機会も、今後増えてくるかもしれません。

Windows Server 2012 を GUI付きでインストールを行った場合(又は、GUIを後からインストールした場合)は、通常通りインタフェースのプロパティから IPv6 アドレスを構成できます。Server Core インストールの場合は、残念ながら sconfig は IPv6 を十分にサポートしていない為、PowerShell 又は netsh を使用して IPv6 を構成する必要があります。

事前準備

PowerShell を使う場合も netsh を使う場合も同じですが、設定対象となるインタフェースのインデックス番号を把握しておくと、スムーズに設定が行えます。(インタフェースの名前(エイリアス名)でも指定は可能ですが、日本語を入力するのが面倒なので個人的にはインデックス番号がお勧めです。)

インタフェースの一覧は、Get-NetIPInterface で取得できます。

PS C:\Users\Administrator> Get-NetIPInterface

ifIndex InterfaceAlias                  AddressFamily NlMtu(Bytes) InterfaceMetric Dhcp     ConnectionState PolicyStore
------- --------------                  ------------- ------------ --------------- ----     --------------- -----------
12      イーサネット                    IPv6                  1500              10 Enabled  Connected       ActiveStore
14      Teredo Tunneling Pseudo-Inte... IPv6                  1280              50 Disabled Connected       ActiveStore
13      isatap                          IPv6                  1280              50 Disabled Disconnected    ActiveStore
1       Loopback Pseudo-Interface 1     IPv6            4294967295              50 Disabled Connected       ActiveStore
12      イーサネット                    IPv4                  1500              10 Enabled  Connected       ActiveStore
1       Loopback Pseudo-Interface 1     IPv4            4294967295              50 Disabled Connected       ActiveStore

ifIndex がインタフェースのインデックス番号です。イーサネットはインデックス番号 12 であることが分かります。

PS C:\Users\Administrator> Get-NetIPInterface -InterfaceIndex 12

ifIndex InterfaceAlias AddressFamily NlMtu(Bytes) InterfaceMetric Dhcp     ConnectionState PolicyStore
------- -------------- ------------- ------------ --------------- ----     --------------- -----------
12      イーサネット   IPv6                  1500              10 Enabled  Connected       ActiveStore
12      イーサネット   IPv4                  1500              10 Enabled  Connected       ActiveStore

ちなみに、IP アドレスの情報は Get-NetIPAddress で取得する事が出来ます。

PS C:\Users\Administrator> Get-NetIPAddress -InterfaceIndex 12

IPAddress         : fe80::299e:cf78:8834:ada0%12
InterfaceIndex    : 12
InterfaceAlias    : イーサネット
AddressFamily     : IPv6
Type              : Unicast
PrefixLength      : 64
PrefixOrigin      : WellKnown
SuffixOrigin      : Link
AddressState      : Preferred
ValidLifetime     : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource      : False
PolicyStore       : ActiveStore

IPAddress         : 2001:db8::299e:cf78:8834:ada0
InterfaceIndex    : 12
InterfaceAlias    : イーサネット
AddressFamily     : IPv6
Type              : Unicast
PrefixLength      : 64
PrefixOrigin      : RouterAdvertisement
SuffixOrigin      : Link
AddressState      : Preferred
ValidLifetime     : 29.23:56:18
PreferredLifetime : 6.23:56:18
SkipAsSource      : False
PolicyStore       : ActiveStore

IPAddress         : 192.168.24.241
InterfaceIndex    : 12
InterfaceAlias    : イーサネット
AddressFamily     : IPv4
Type              : Unicast
PrefixLength      : 24
PrefixOrigin      : Dhcp
SuffixOrigin      : Dhcp
AddressState      : Preferred
ValidLifetime     : 20:17:25
PreferredLifetime : 20:17:25
SkipAsSource      : False
PolicyStore       : ActiveStore

IPv4 アドレスと IPv6 アドレスが両方表示されます。

ちなみに、IPv6 アドレス 2001:db8::/32 は、ドキュメント記載用の IP アドレスです。実際の運用環境では利用できません。詳細は RFC3849: IPv6 Address Prefix Reserved for Documentation を参照して下さい。

IPv6 アドレスの設定

IPv6 アドレスの設定は、New-NetIPAddress を使用します。

New-NetIPAddress [-IPAddress] <String> -InterfaceIndex <UInt32> [-AddressFamily <AddressFamily> ] [-AsJob] [-CimSession <CimSession[]> ] [-DefaultGateway <String> ] [-PolicyStore <String> ] [-PreferredLifetime <TimeSpan> ] [-PrefixLength <Byte> ] [-SkipAsSource <Boolean> ] [-ThrottleLimit <Int32> ] [-Type <Type> ] [-ValidLifetime <TimeSpan> ] [-Confirm] [-WhatIf] [ <CommonParameters>]

ここでインタフェース番号、IP アドレス、プレフィックス長、デフォルトゲートウェイを指定するのですが、環境によってはコマンドの実行に失敗します。

例えば、IP アドレスとしてグローバルユニキャストアドレスである 2001:db8::55、デフォルトゲートウェイのアドレスにリンクローカルアドレスである fe80::1 を指定すると、以下の様なエラーが表示されます。

PS C:\Users\Administrator> New-NetIPAddress -InterfaceIndex 12 -IPAddress 2001:db8::55 -PrefixLength 64 -DefaultGateway fe80::1
New-NetIPAddress : DefaultGateway fe80::1 is not on the same network segment (subnet) that is defined by the IP address 2001:db8::55 and PrefixLength 64.
発生場所 行:1 文字:1
+ New-NetIPAddress -InterfaceIndex 12 -IPAddress 2001:db8::55 -PrefixLength 64 -De ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (MSFT_NetIPAddress:ROOT/StandardCimv2/MSFT_NetIPAddress) [New-NetIPAddress]、CimException
    + FullyQualifiedErrorId : Windows System Error 87,New-NetIPAddress

どうやら、インタフェースにアサインする IP アドレスとデフォルトゲートウェイのアドレスが、同じネットワークセグメント上に無いと(つまり、同じネットワークプレフィックスを持っていないと)、登録ができないようです。

IPv4 では、インタフェースのアドレスとデフォルトゲートウェイのアドレスは、同一のネットワークプレフィックスを持つ事が一般的です。しかし、IPv6 は一つのインタフェースに複数のアドレスが付与され、用途に応じてアドレスを使い分けることが一般的です。リンクローカルアドレスはリンク上で重複しなければ問題ない為、ゲートウェイとなるルータの全インタフェースに fe80::1 をアサインする事が出来ます。(これにより、どのセグメントでもデフォルトゲートウェイを fe80::1 に固定でき、運用負荷を軽減できます。)

TechNet を参照すると以下の記載があります。

The New-NetIPAddress cmdlet creates IP address and the configuration properties of that IP address. To create a specific IP address object, the required parameters include an IP address (IPv4 or IPv6) and an interface (InterfaceIndex or InterfaceAlias). It is also recommended to define the prefix length, also known as a subnet mask, and default gateway.

デフォルトゲートウェイの指定を推奨するような記載がありますので、New-NetIPAddress から fe80::1 等が設定できるべきだと思いますが、できないものは仕方がないので一旦 IP アドレスのみを登録します。

PS C:\Users\Administrator> New-NetIPAddress -InterfaceIndex 12 -IPAddress 2001:db8::55 -PrefixLength 64

IPAddress         : 2001:db8::55
InterfaceIndex    : 12
InterfaceAlias    : イーサネット
AddressFamily     : IPv6
Type              : Unicast
PrefixLength      : 64
PrefixOrigin      : Manual
SuffixOrigin      : Manual
AddressState      : Tentative
ValidLifetime     : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
SkipAsSource      : False
PolicyStore       : ActiveStore

IP アドレスのみであれば、問題なく登録できます。

PS C:\Users\Administrator> Get-NetIPAddress -InterfaceIndex 12 -AddressFamily IPv6 | Format-Table IPAddress

IPAddress
---------
fe80::299e:cf78:8834:ada0%12
2001:db8::299e:cf78:8834:ada0
2001:db8::55

デフォルトゲートウェイの設定

IPv6 アドレスは設定できましたが、このままではデフォルトゲートウェイが登録されていないのでセグメントを超えた通信ができません。

デフォルトゲートウェイの設定には、New-NetRoute を使用します。

New-NetRoute [-DestinationPrefix] <String> -InterfaceIndex <UInt32> [-AddressFamily <AddressFamily> ] [-AsJob] [-CimSession <CimSession[]> ] [-NextHop <String> ] [-PolicyStore <String> ] [-PreferredLifetime <TimeSpan> ] [-Publish <Publish> ] [-RouteMetric <UInt16> ] [-ThrottleLimit <Int32> ] [-ValidLifetime <TimeSpan> ] [-Confirm] [-WhatIf] [ <CommonParameters>]

ここで、インタフェース番号、デスティネーションアドレス(IPv6 デフォルトルートの場合は ::/0)、ゲートウェイのアドレスを指定すれば良いのですが、こちらも環境によっては失敗します。

PS C:\Users\Administrator> New-NetRoute -InterfaceIndex 12 -DestinationPrefix ::/0 -NextHop fe80::1
New-NetRoute : Instance MSFT_NetRoute already exists
発生場所 行:1 文字:1
+ New-NetRoute -InterfaceIndex 12 -DestinationPrefix ::/0 -NextHop fe80::1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (MSFT_NetRoute:ROOT/StandardCimv2/MSFT_NetRoute) [New-NetRoute]、CimException
    + FullyQualifiedErrorId : Windows System Error 87,New-NetRoute

既にルーティングが存在しているとのエラーが出ます。これは、RA で IPv6 アドレスを自動構成する際にデフォルトゲートウェイも構成される為です。

一般的に、IPv6 が有効なネットワークでは RA を使用してアドレスを自動構成しますが、その様なネットワークで一部のサーバのみ手動で IPv6 アドレスをアサインしようとすると、手動設定前に RA 経由でアドレスを自動構成している(デフォルトルートも構成している)為、同じルートを二重に登録しようとしてエラーになります。実際に登録したい情報が既に(自動構成で)登録されている状態ですのでこの瞬間は通信できますが、route コマンド等で確認すると「固定ルート」としては登録されていない事が分かります。(自動構成で取得したアドレスなので当たり前ですが。) IP アドレスが固定でルーティングが自動構成となっているのはトラブルの元ですので、ルーティングも手動構成に変更します。

変更は簡単で、既に自動構成されているルーティング情報を一旦削除し、同じ情報を再度登録するだけです。削除は Remove-NetRoute を使用します。

PS C:\Users\Administrator> Remove-NetRoute -DestinationPrefix ::/0

確認
この操作を実行しますか?

Performing operation "Remove" on Target "NetRoute -DestinationPrefix ::/0 -InterfaceIndex 12 -NextHop fe80::1 -Store
Active"
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"):

PS C:\Users\Administrator> New-NetRoute -InterfaceIndex 12 -DestinationPrefix ::/0 -NextHop fe80::1

ifIndex DestinationPrefix                              NextHop                                  RouteMetric PolicyStore
------- -----------------                              -------                                  ----------- -----------
12      ::/0                                           fe80::1                                          256 ActiveStore
12      ::/0                                           fe80::1                                          256 Persiste...

PS C:\Users\Administrator> Get-NetRoute -DestinationPrefix ::/0 | Format-List

DestinationPrefix : ::/0
InterfaceIndex    : 12
InterfaceAlias    : イーサネット
AddressFamily     : IPv6
NextHop           : fe80::1
Publish           : No
RouteMetric       : 256
ValidLifetime     : Infinite ([TimeSpan]::MaxValue)
PreferredLifetime : Infinite ([TimeSpan]::MaxValue)
PolicyStore       : ActiveStore

もう一度 route コマンド等でルーティングを確認すると、固定ルートとして設定されている事が確認できます。PowerShell で確認する場合は、Get-NetRoute を使います。

DNSサーバの設定

最後に、IPv6 用の DNS サーバ (DNS キャッシュサーバ)を設定します。まず、Get-DnsClientServerAddress で現在の設定を確認します。

PS C:\Users\Administrator> Get-DnsClientServerAddress -InterfaceIndex 12

InterfaceAlias               Interface Address ServerAddresses
                             Index     Family
--------------               --------- ------- ---------------
イーサネット                        12 IPv4    {}
イーサネット                        12 IPv6    {fec0:0:0:ffff::1, fec0:0:0:ffff::2, fec0:0:0:ffff::3}

IPv4、IPv6 ともに手動で構成した場合、DNS サーバが設定されていない状態となります。

設定には、Set-DnsClientServerAddress を使用します。

Set-DnsClientServerAddress -InterfaceIndex <UInt32[]> [-AsJob] [-CimSession <CimSession[]> ] [-PassThru] [-ResetServerAddresses] [-ServerAddresses <String[]> ] [-ThrottleLimit <Int32> ] [-Validate] [-Confirm] [-WhatIf] [ <CommonParameters>]

基本的に、インタフェース番号と DNS サーバのアドレスを指定するだけです。

PS C:\Users\Administrator> Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddresses 192.168.24.1
PS C:\Users\Administrator> Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddresses fe80::1
PS C:\Users\Administrator> Get-DnsClientServerAddress -InterfaceIndex 12

InterfaceAlias               Interface Address ServerAddresses
                             Index     Family
--------------               --------- ------- ---------------
イーサネット                        12 IPv4    {192.168.24.1}
イーサネット                        12 IPv6    {fe80::1}

IPv4 と IPv6 はエントリが分かれている為、個別に設定を行う事が出来ます。また、後から設定し直した場合は、設定したアドレスファミリ (IPv4/IPv6) のみが影響を受けます。

PS C:\Users\Administrator> Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddresses 8.8.8.8
PS C:\Users\Administrator> Get-DnsClientServerAddress -InterfaceIndex 12

InterfaceAlias               Interface Address ServerAddresses
                             Index     Family
--------------               --------- ------- ---------------
イーサネット                        12 IPv4    {8.8.8.8}
イーサネット                        12 IPv6    {fe80::1}

複数のサーバを指定する場合は、カンマ区切りで複数のアドレスを指定します。

PS C:\Users\Administrator> Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddresses "192.168.24.1,192.168.24.2"
PS C:\Users\Administrator> Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddresses "2001:db8::1,2001:db8::2"
PS C:\Users\Administrator> Get-DnsClientServerAddress -InterfaceIndex 12

InterfaceAlias               Interface Address ServerAddresses
                             Index     Family
--------------               --------- ------- ---------------
イーサネット                        12 IPv4    {192.168.24.1, 192.168.24.2}
イーサネット                        12 IPv6    {2001:db8::1, 2001:db8::2}

エントリは分かれていますが、一つのコマンドで IPv4 と IPv6 を同時に構成する事もできます。

PS C:\Users\Administrator> Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddresses "192.168.24.1,192.168.24.2,2001:db8::1,2001:db8::2"
PS C:\Users\Administrator> Get-DnsClientServerAddress -InterfaceIndex 12

InterfaceAlias               Interface Address ServerAddresses
                             Index     Family
--------------               --------- ------- ---------------
イーサネット                        12 IPv4    {192.168.24.1, 192.168.24.2}
イーサネット                        12 IPv6    {2001:db8::1, 2001:db8::2}

おわりに

PowerShell 3.0 でインタフェースや IP アドレスを構成するコマンドレットが充実し、IPv4/IPv6 アドレスをお手軽に構成・管理できるようになりました。IPv6 も IPv4 と(ほぼ)同じように構成ができますので、OS をインストールしたらまずは IPv6 を無効化する!のではなく、まずは色々とさわってみると面白いかもしれません。

Written by kazu

2012/12/10 at 23:19

カテゴリー: PowerShell

Tagged with , ,