SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Windows 8 / Windows Server 2012 の展開イメージに .NET Framework 3.5 を含める

leave a comment

[Dism /online /Get-Features] や [Get-WindowsFeature] を実行すると確認できるのですが、Windows 8 / Windows Server 2012 では .NET Framework 3.5 を機能として追加することはできますが、追加に必要なパッケージは含まれていない状態になっています。

image
image

技術情報としては Windows 8 または Windows Server 2012 で NET Framework 3.5 をインストールしようとするとエラー コードが表示される が該当します。

この状態ですが、オンデマンド機能の構成で不要なパッケージが削除されている状態となっています。
Windows Server でのオンデマンド機能の構成
Windows の機能を有効または無効にする方法

このため、.NET Framework 3.5 をインストールするためには、インターネットに接続した状態にするか代替ソースパスを使用して、OS のインストールメディアを参照する方法をとることが多いかと思います。

インストールメディアをローカルにコピーして Windows の修復ソースを構成する で書かれている [オプション コンポーネントのインストールおよびコンポーネントの修復のための設定を指定する] グループポリシーを使用するという方法もありますね。

2013/6/15 追記

以前に記載した方法を実施した場合、OS インストール直後に設定されている PowerShell レジストリキーが削除されてしまいます。
.NET Framework 3.5 を削除した際には、[Windows PowerShell 2.0 エンジン] も削除されますが、このタイミングで [HKLMSOFTWAREMicrosoftPowerShell1] 以下のレジストリで削除されるものがあります。

インストール直後の状態は以下のようになっていますが、
image

.NET Framework 3.5 をサーバーマネージャーからインストール → 削除したあとは以下の状態になります。
image

レジストリのキーが一部削除されていますね。
この状態だと一部のソフトのインストールでエラーが発生してしまう可能性があるようです。

たとえば、SQL Server 2008 R2 のインストーラーでは、[HKLMSOFTWAREMicrosoftPowerShell1] の [Install] 値を使用して PowerShell をインストールするかの判断しています。
PowerShell がインストールされていない場合は、[c:WindowsSystem32ServerManagercmd.exe /install PowerShell] でインストールされるのですが、Windows Server 2012 の場合は ServerManagercmd は Dism になっていますので、PowerShell のインストールができずインストール中に [指定したファイルが見つかりません] というエラーになります。
この方法で .NET Framework 3.5 をイメージに含めた場合に、PowerShell 2.0 を使用する必要がある場合には、[PowerShell 2.0 エンジン] を明示的に追加する必要があります。

この状態にならないようにするためには以下の方法で .NET Framework 3.5 を追加するとよさそうです。
インストールについては Windows 8 and .Net Framework 3.5 が参考に。
# How to reliably redistribute and automatically install .NET 3.5 on Windows Server 2012? も参考になります。

  • 以下のいずれかの方法で、.NET Framework 3.5 の追加 / 削除を行い再起動
Dism /online /enable-feature /featurename:NetFx3 /All /Source:D:sourcessxs /LimitAccess
Dism /online /disable-feature /featurename:NetFx3
Dism /online /disable-feature /featurename:NetFx3ServerFeatures
作業終了後、再起動

または PowerShell で以下のコマンドレットを実行します。

Install-WindowsFeature ?name NET-Framework-Core ?source D:sourcessxs
Disable-WindowsOptionalFeature -Online -FeatureName NetFx3
Disable-WindowsOptionalFeature -Online -FeatureName NetFx3ServerFeatures
作業終了後、再起動

 

.NET Framework 3.5 のコンポーネントは NetFx3 なのですが、これだけを削除しても .NET Framework 3.5 Features が残ってしまいます。
これを無効にするために、NetFx3 / NetFx3ServerFeatures の両方を無効にしています。
# この方法で削除する場合は、PowerShell 2.0 エンジンの削除が発生しません。
image

この方法で .NET Framework 3.5 をインストールした場合には、レジストリは設定されたままですので SQL Server のインストールにも影響は出ない環境となりますのでこの方法で含めたほうがよさそうですね。
image

以下以前の公開内容

インターネットに接続できない / ローカルにメディアのコピーを含めない環境下で大量展開をした際に .NET Framework 3.5 のインストーラーをシンプルに入れる方法が何かないかと思い、考えてみたところ一度インストールをして削除する方法が手っ取り早いのではと考えました。

Windows Server 2012 の場合は、サーバーマネージャーで一度 .NET Framework 3.5 をインストールします。
image

このタイミングでは、インターネットに接続するか代替ソースパスを使用してインストールする必要があります。
image

インストールが完了したらサーバーマネージャーで .NET Framework 3.5 を削除し再起動します。
imageimage

再起動が完了したら [Get-WindowsFeature] を実行して状態を確認してみます。
インストール直後は [Removed] になっていたものが上記の操作をすることで [Available] になっていることが確認できます。
image

[Dism /online /Get-Features] の結果も変わっています。
[ペイロードの削除によって無効] となっていたものが [無効] に変わっています。
image

再度インストールをしようとした場合には、インターネットの接続 / 代替ソースパスは不要でインストールができるようになります。

Windows 8 の場合はコントロールパネルから [Windows の機能の有効化または無効化] から有効にします。
# Windows 8 の場合は代替ソースパスはグループポリシーか Dism で設定する必要があるのでインターネットに接続して Windows Update 経由でインストールしてしまったほうが早いかもしれないですね。
image

インストールが完了したら機能を無効化します。
image

無効にすると Windows Server 2012 と同様に [ペイロードの削除によって無効] となっていたものが [無効] に変わっています。
image
この状態であれば、インターネットに接続されていない状態でも機能を有効化することができます。

[Uninstall-WindowsFeature ] や [Dism /online /Disable-Feature /Remove] を使用することでオンデマンドインストール用のモジュールを削除することができますが、インストールをせずにモジュールだけを追加する方法が見つからなかったのですよね。。。

もう少しスマートな方法があるとよいのですが。

Share

Written by Masayuki.Ozawa

6月 6th, 2013 at 11:35 pm

Leave a Reply