作業項目の「残存作業」の気軽な使い方

今回は小ネタです。

TFSでは「作業項目」(他システムだと「チケット」「Issue」とかですかね)を登録・管理することができます。
VSSなどの純粋なバージョン管理システムから移行された方にはぜひ使ってほしい機能です。作業項目にリンクすることで、いろんな管理ができるようになります。
(「この作業項目で修正したソースファイルは?」など)

作業項目の中に「残存作業」という項目があります。
通常は、ウォーターフォール開発だと「作業見積時間」、アジャイル系だとチーム内で話し合った作業量(ベロシティ)を設定することになるかと思います。
(作業見積時間だと、単位は分・時間・日などプロジェクトで共通化されていればなんでもいいのですが、「時間」を設定すれば一番きれいに使えます。ベロシティを設定する場合は、単位なんてありません)
これを設定し、開発者が定期的に残存作業を更新していれば、TFSが持っているレポート機能で「バーンダウンチャート」を出力し、進捗度を簡単に捉えることができます。

ただ、「厳密な進捗管理は別管理なのでTFSで入力すると2重管理になる」といった理由がある場合、「残存作業」には何も入力しなくても作業項目は登録できるのですが、せっかくのレポート機能が生かせなくなります。

「ちょっともったいない」と感じた方、こんな使い方があります。
 ・作業項目作成時、「残存作業」に’1’をセットする
 ・開発者は残存作業は変更しない
 ・対象作業が完了した際は、「状態」を「作業完了」に変更する
こう使うことで、時間レベルでの残存作業管理ではなく、作業項目単位での残存作業管理となります。バーンダウンチャートは「どれだけの作業項目が消化できたか」という視点でのチャートになります。
また、「残存作業」は最初にセットするだけなので、開発者の負担が増えることはありません。
作業項目に対する作業量が一定量ではないので、「進捗管理はこれでバッチリ!」というわけにはいきませんが、進捗度合いを確認するきっかけには使えるかなと思います。

ワークスペースはどう作ればいいの?:具体例編

「ワークスペースはどう作ればいいの?:前提編」の続きです。
どの単位でワークスペースを作成するかは、「どの単位でソースコードの管理をしたいか?」に依存しますが、以下のような条件により、管理単位が変わると思います。

・端末を共有するか?
 複数の開発者で端末を共有するのであれば、最低限開発者単位でワークスペースは作成しないといけません。そうしないと、別の開発者が変更していたソースファイルをチェックインすることになります。
・複数のプロジェクトを兼任するか?
 変更中のプロジェクトとは別のプロジェクトで変更していたソースコードを間違ってチェックインさせないためには、ワークスペースを分離して作成しないといけません。
・分岐(ブランチ)を使うか?
 変更中の分岐を使用しているときに作業中ではない分岐で変更したソースコードをチェックインさせないためには、ワークスペースを分離する必要があります。

具体例だと、こんな感じになるかと。※あくまで例です。
1.1人の開発者が端末を独占し、関わるプロジェクトは1つだけ。ブランチも切らない。
  デフォルトで作成されるワークスペース(ローカルワークスペース/プライベートワークスペース、ワークスペース名がコンピュータ名)を使用。

2.1人の開発者が端末を独占し、関わるプロジェクトは複数あるけど。ブランチは切らない。
  チームプロジェクト毎にワークスペースを作成。(ローカルワークスペース/プライベートワークスペース、ワークスペース名はチームプロジェクト名か、それに関連する名称)

3.1人の開発者が端末を独占し、関わるプロジェクトは複数あり、分岐を使う。
  チームプロジェクト+分岐毎にワークスペースを作成。(ローカルワークスペース/プライベートワークスペース、ワークスペース名はチームプロジェクト名か、それに関連する名称+分岐名)

4.複数の開発者が端末を独占し、関わるプロジェクトは複数あり、分岐を使う。
  チームプロジェクト+分岐毎にワークスペースを作成。(ローカルワークスペース/プライベートワークスペース、ワークスペース名はチームプロジェクト名か、それに関連する名称+分岐名)
  これだと、3.と同じなので「複数の開発者が同じワークスペース名を使えないんじゃ?」という疑問が湧きますが、「ワークスペースは所有者(OSログインユーザ)毎に管理される」ので、同じワークスペース名でも問題ありません。
  但し、マッピングするローカルフォルダは開発者ごとに分けないといけません。

通常はこんな感じでいいのですが、これで対処できなかったパターンがあります。
それは、「Visual StudioとEclise(+Team Explorer Everywhere)を両方使用する」場合です。
実際にやってみると、
VS上でチームプロジェクトを作成する
 ↓
VS上でチームプロジェクトのルートフォルダを対象にしてワークスペースを作成する
 ↓
Eclipse上でチームプロジェクトに接続する
 ↓
Eclipse上でチームプロジェクトのルートフォルダを対象にしてワークスペースを作成しようとする
 ↓
「(ローカルフォルダは)別のワークスペースで既に使用されている」と怒られる( ;∀;)

015

という状態です。

ちょっと悩みましたが、どうもIDEが違うと別のワークスペースとしての管理になるっぽいです。
対処としては2パターンあるかと思います。
1.ワークスペースのアクセス許可をパブリックワークスペースに変更
  同じフォルダを使用することができますが、VSで変更中のソースがEclipse側でも検知されてしまいます。
  JNI作成のような、C++とJavaの変更を同期を取って作業する場合にはこれでもいいかもしれません。
  ただ、
   ・非同期の変更(変更内容が別々)
   ・TFS上の作業項目に対するチェックイン時関連付けが必須なプロジェクトで、Java側とC++側の作業項目が別々に作成されている
  ような場合は使いづらいと思います。
  →VS側でチェックインするときは、Java側の変更対象を除外しないといけない。(逆もそうです)

2.IDEごとに別々のワークスペースを割り当てる
  通常はこちらが使いやすい気がします。
  ※C++/.NET側とJava側で使用するフォルダをきれいに分ける必要がありますが、普通ごちゃまぜにはしないと思いますので...。

ちなみに、「ワークスペース」はTFVC(元々TFSで使用するバージョン管理システム)のみで使用するもので、Gitでは使用しません。
一人で調べものする際はあまり気にしないので、ちょうどいい整理になりました。

(そろそろ仕事場でも分岐は使いたいけど、VB6/VC++6がメインじゃ・・・orz)

ワークスペースはどう作ればいいの?:前提編

Visual StudioとEclipseを両方使う環境(例:JNIを使用するアプリを作成する)で、どうワークスペースを作ればいいかいろいろ悩んだので、メモ代わりに書いてみます。
まずはワークスペースの前提知識の整理です。

○ワークスペースについて
Team Foundation Serverを使用した開発で意識しないといけないものに「ワークスペース」があります。ワークスペースは、TFS上で管理されているソースコードをローカル環境のどのフォルダで変更するかのマッピングを管理するためのものです。

まっさらな環境で、1つのチームプロジェクトだけを対象に開発をするのであれば意識しなくてもよいのですが、複数のチームプロジェクトを対象にする場合、
 プロジェクトAの開発作業を行っている
  ↓
 プロジェクトBの緊急変更対応が入る
  ↓
 プロジェクトBの変更が完了したので、チェックインする
  ↓
 プロジェクトAの開発内容までチェックインされてしまう( ゚Д゚)
といったことが発生してしまいます。
チェックイン時にプロジェクトBの変更内容を対象外にすれば大丈夫なのですが、急いでいる場合はうっかりチェックインしてしまう可能性があります。

これを避けるには、ワークスペースをチームプロジェクト毎に作成し、ソースコードの変更管理がチームプロジェクト単位で分離できるようにします。
(分岐を使用する際にワークスペースを分岐ごとに作成するのもこのためです)
※チームプロジェクトコレクション配下をすべて1つのワークスペースに割り当てることもできますが、通常はチームプロジェクト単位、もしくは分岐するフォルダ単位で割り当てます。

○ワークスペースの種類
Team Foundation Server 2010/Visual Studio 2010以降は、
・サーバーワークスペース
・ローカルワークスペース
の2種類のワークスペースが作成可能です。
※Visual Studio 2010以前の環境で使用できるのはサーバーワークスペースだけです。

MSDNの「ローカル ワークスペースとサーバー ワークスペースのどちらを使用するかを決定する」(http://msdn.microsoft.com/ja-jp/library/bb892960.aspx)に詳細はありますが、大雑把には
・デフォルトはローカルワークスペース
・ワークスペース内に大量のファイルがある/Visual Studio 2010より前のバージョンを使用するときはサーバーワークスペース
・オフラインで作業することがある場合はローカルワークスペース
ということです。

○ワークスペースのアクセス許可
ワークスペースに対するアクセス許可として
・プライベートワークスペース
・パブリックワークスペース
・パブリックワークスペース(許可)
があります。
デフォルトはプライベートワークスペースですが、1台の端末で複数の開発者(OSログインユーザ)が同じワークスペースを使用する場合はパブリックワークスペースを使用します。
詳細はMSDNの「ワークスペースの作成と操作」(http://msdn.microsoft.com/ja-jp/library/ms181383.aspx)にあります。

次は本題の「ワークスペースをどう作ればいいか」についてです。

Windows Server 2003 インストール後のライセンス認証でエラーになる

珍しくOS系のネタです。2015年7月でWindows Server 2003のサポートも終了なので今更感たっぷりなのですが、引っかかったのでメモです。

(使い捨ての環境でなければ)通常、OSインストール後にライセンス認証が必要です。
インターネット経由での認証をしたところ、エラーになってしまいました。
IEで通常のサイトにはアクセスできるので、ネットワークの問題でないことは間違いないのですが、なぜか認証されません。

検索してみると、このページにたどり着きます。
○インターネット経由で Windows Server 2003 のライセンス認証の手続きを行うと "メッセージ番号: 32777" のエラー メッセージが表示される
http://support.microsoft.com/kb/816897/ja

しかし、IEのセキュリティ強化は外していましたし、プロキシも使ってません。

少し悩みましたが、先ほどのページにこう書かれていました。

「Internet Explorer セキュリティ強化の構成 ("Internet Explorer hardening" とも呼ばれます) では、証明書の取り消し (失効) を使用します。証明書の失効情報の参照中に、URL の取得が行われます。」

証明書のことが書いてあったので、ライセンス認証前に変更したことを1つ思い出しました。
Windowsコンポーネントの追加と削除で「Internet Explorer セキュリティ強化の構成」をOFFにしたときに、合わせて「ルート証明書の更新」もOFFにしていました。
これをONに変更してから再度ライセンス認証を実行すると、正常に認証されました。

TFS2013インストール(できるだけコマンドで) その7:Team Foundation Server 2013のインストール

やっとここまで来ました。Team Foundation Server 2013のインストールです。

やることは「Tfs_Server.exe /quiet」だけです。
だけなんですが、画面が全く表示されません。インストールが終わったかどうかを確認するためにはタスクマネージャーしかありませんw

ログは「C:\Users\[ユーザ名]\AppData\Local\Temp」にある「dd_tfs_server_[yyyymmddhhmmss].log」に出力されます。
最後に「Exit code: 0x0」とあれば(多分)正常終了です。
ちなみに、GUIでインストールし、キャンセル終了した場合は「0x642」と出力されます。

これで、TFSのインストールまで完了しました。
サーバの構成などは管理コンソールから「画面」で行います。
一度構築した構成を変更するのはコマンドでできるのですが、初期構築をコマンドで行う方法が今のところわかりません。どこかで見つけたときにはまとめたいと思います。

また、PowerShellをうまく使えば、放置状態で最後までインストールできるかもしれません。
(PowerShell勉強不足なもので・・・<(_ _)>)

これでTFS 2013 Update3の環境ができたので、本来の調べものに取り掛かれます。

TFS2013インストール(できるだけコマンドで) その6:SharePoint Foundation 2013のインストール

SharePoint Foundation 2013本体のインストールです。

前々回でイメージを「C:\Temp\Extract」に展開していますので、それを使います。

そろそろ飽きてきそうですが、実行するコマンドは「C:\Temp\Extract\Setup.exe /config [構成ファイル]」です。
詳しくはTechNetの「Config.xml リファレンス (SharePoint Server 2010)」にありますが、引数に指定する構成ファイルのテンプレートは、「C:\Temp\Extract\files」の下に4種類あります。(フォルダ別に格納されています)
今回は「setupfarmsilent\config.xml」をベースにします。
このままでもインストールできるのですが、画面が表示されないと寂しいので、Display要素を以下のように変更します。
<Display Level="basic" CompletionNotice="no" AcceptEURA="Yes" />

あとはsetupコマンドを実行するだけです。

次は、Team Foundation Server 2013のインストールです。

TFS2013インストール(できるだけコマンドで) その5:SQL Server 2014のインストール

SQL Server 2014のインストールです。

基本的には「Setup.exe
/ConfigurationFile=[構成ファイル名]」で終了です。

問題は、引数に指定されている構成ファイル(ConfigurationFile.ini)をどう作成するかです。
MSDNの「コマンド プロンプトからの SQL Server 2014 のインストール」「
構成ファイルを使用した SQL Server 2014 のインストール
」に記載がありますが、一番簡単に作成する方法は、「SQL Serverのインストールウィザードを途中まで実行してしまう」ことです。
ウィザードに従ってインストール画面を進めると、インストール内容の確認画面が表示されますが、この画面の下側に「構成ファイルのパス」という項目があります。
このファイルをコピーして、少しだけ項目を変更すれば簡単に構成ファイルが作成できます。

013

作成した構成ファイルに、以下の変更をします。
☆追加する項目
○SQL Serverエージェントサービスアカウントのパスワード
 AGTSVCPASSWORD="~"
○Analysis Servicesサービスアカウントのパスワード
 ASSVCPASSWORD="~"
○SQL Serverサービスアカウントのパスワード
 SQLSVCPASSWORD="~"
○Reporting Servicesサービスアカウントのパスワード
 RSSVCPASSWORD="~"
○ライセンス条項への同意をするか(=1:同意する)
 IACCEPTSQLSERVERLICENSETERMS="1"
○プロダクトキー
 PID="~"

☆変更する項目
○UIを使用して実行+入力不可+エラーメッセージを表示しない(コマンドライン引数の「/QS」)
 QUIETSIMPLE="True"

☆コメントアウトする項目
 UIMODE=~
 QUIET=~
 →「QUIETSIMPLE」と排他で使用する項目のため。

画面でパラメータファイルが作成できるのはいいですね。
次はSharePoint Foundation 2013のインストールです。

<参考>構成ファイルの例
;SQL Server 2014 Configuration File
[OPTIONS]

; INSTALL、UNINSTALL、UPGRADE などのセットアップ ワークフローを指定します。これは必須のパラメーターです。

ACTION="Install"

; ローカライズ版の Windows オペレーティング システムに英語版の SQL Server をインストールするには、/ENU パラメーターを使用します。

ENU="False"

; ユーザー インターフェイスの動作を制御するパラメーターです。有効な値は Normal (完全な UI の場合)、AutoAdvance (簡易 UI の場合)、および EnableUIOnServerCore (GUI ブロックをバイパスする Server Core セットアップの場合) です。

;UIMODE="Normal"

; ユーザー インターフェイスは表示されません。

;QUIET="False"

; ユーザー操作はなく、進行状況だけが表示されます。

;QUIETSIMPLE="False"
QUIETSIMPLE="True"

; SQL Server セットアップで更新プログラムを検出して含める必要があるかどうかを指定します。有効な値は、True と False または 1 と 0 です。既定では、SQL Server セットアップには、検出された更新プログラムが含まれます。

UpdateEnabled="False"

; 今後のリリースの SQL Server の改善のため、Microsoft にエラーを報告できるようにするかどうかを指定します。この機能を有効にするには 1 または True を指定し、無効にするには 0 または False を指定します。

ERRORREPORTING="False"

; このパラメーターが指定された場合、このコンピューターでは Microsoft Update を使用して更新プログラムが確認されます。

USEMICROSOFTUPDATE="False"

; インストール、アンインストール、またはアップグレードを行う機能を指定します。最上位の機能には、SQL、AS、RS、IS、MDS、ツールなどがあります。SQL 機能では、データベース エンジン、レプリケーション、フルテキスト、および Data Quality Services (DQS) サーバーがインストールされます。ツール機能では、管理ツール、オンライン ブック コンポーネント、SQL Server Data Tools、その他の共有コンポーネントがインストールされます。

FEATURES=SQLENGINE,FULLTEXT,AS,RS,SSMS,ADV_SSMS

; SQL Server セットアップが更新プログラムを取得する場所を指定します。有効な値は、"MU" (Microsoft Update を検索)、有効なフォルダー パス、.\MyUpdates のような相対パス、または UNC 共有です。既定では、SQL Server セットアップは Microsoft Update を検索するか、Window Server Update Services を通じて Windows Update サービスを検索します。

UpdateSource="MU"

; コマンド ライン パラメーターの使用方法を表示します

HELP="False"

; 詳細なセットアップ ログをコンソールにパイプすることを指定します。

INDICATEPROGRESS="False"

; セットアップで WOW64 にインストールするよう指定します。このコマンド ライン引数は、IA64 や 32 ビット システム上ではサポートされません。

X86="False"

; 共有コンポーネントのルート インストール ディレクトリを指定します。このディレクトリは、共有コンポーネントのインストール後は変更されません。

INSTALLSHAREDDIR="C:\Program Files\Microsoft SQL Server"

; WOW64 共有コンポーネントのルート インストール ディレクトリを指定します。このディレクトリは、WOW64 共有コンポーネントのインストール後は変更されません。

INSTALLSHAREDWOWDIR="C:\Program Files (x86)\Microsoft SQL Server"

; 既定のインスタンスまたは名前付きインスタンスを指定します。既定のインスタンスは、Express 以外のエディションの場合は MSSQLSERVER、Express エディションの場合は SQLExpress です。SQL Server データベース エンジン (SQL)、Analysis Services (AS)、または Reporting Services (RS) のインストール時には、このパラメーターが必須です。

INSTANCENAME="MSSQLSERVER"

; SQL Server 機能の使用状況データを収集して Microsoft へ送信できるようにするかどうかを指定します。この機能を有効にするには 1 または True を指定し、無効にするには 0 または False を指定します。

SQMREPORTING="False"

; 指定した SQL Server 機能のインスタンス ID を指定してください。SQL Server のディレクトリ構造、レジストリ構造、およびサービス名には、SQL Server インスタンスのインスタンス ID が組み込まれます。

INSTANCEID="MSSQLSERVER"

; RSInputSettings_RSInstallMode_Description

RSINSTALLMODE="DefaultNativeMode"

; インストール ディレクトリを指定します。

INSTANCEDIR="C:\Program Files\Microsoft SQL Server"

; エージェント アカウント名

AGTSVCACCOUNT="TFS2013\TFSService"

; インストール後にサービスを自動的に開始します。

AGTSVCSTARTUPTYPE="Manual"

; Analysis Services サービスが実行されるアカウントの名前。

ASSVCACCOUNT="TFS2013\TFSService"

; サービスが作成された後に、サービスのスタートアップの種類に関する設定を制御します。

ASSVCSTARTUPTYPE="Automatic"

; Analysis Services で使用される照合順序。

ASCOLLATION="Japanese_CI_AS"

; Analysis Services のデータ ファイルの場所。

ASDATADIR="C:\Program Files\Microsoft SQL Server\MSAS12.MSSQLSERVER\OLAP\Data"

; Analysis Services のログ ファイルの場所。

ASLOGDIR="C:\Program Files\Microsoft SQL Server\MSAS12.MSSQLSERVER\OLAP\Log"

; Analysis Services のバックアップ ファイルの場所。

ASBACKUPDIR="C:\Program Files\Microsoft SQL Server\MSAS12.MSSQLSERVER\OLAP\Backup"

; Analysis Services の一時ファイルの場所。

ASTEMPDIR="C:\Program Files\Microsoft SQL Server\MSAS12.MSSQLSERVER\OLAP\Temp"

; Analysis Services の構成ファイルの場所。

ASCONFIGDIR="C:\Program Files\Microsoft SQL Server\MSAS12.MSSQLSERVER\OLAP\Config"

; MSOLAP プロバイダーがプロセスで実行可能かどうかを指定します。

ASPROVIDERMSOLAP="1"

; 準備する必要のある管理者アカウントの一覧を指定します。

ASSYSADMINACCOUNTS="TFS2013\Administrator" "TFS2013\TFSAdmin"

; Analysis Services インスタンスのサーバー モードを指定します。有効な値は MULTIDIMENSIONAL と TABULAR です。既定値は MULTIDIMENSIONAL です。

ASSERVERMODE="MULTIDIMENSIONAL"

; CM ブリックの TCP 通信ポート

COMMFABRICPORT="0"

; マトリックスでのプライベート ネットワークの使用方法

COMMFABRICNETWORKLEVEL="0"

; ブリック間の通信を保護する方法

COMMFABRICENCRYPTION="0"

; CM ブリックで使用される TCP ポート

MATRIXCMBRICKCOMMPORT="0"

; SQL Server サービスのスタートアップの種類。

SQLSVCSTARTUPTYPE="Automatic"

; FILESTREAM 機能を有効にするレベル (0、1、2、または 3)。

FILESTREAMLEVEL="0"

; SQL Server Express で RANU を有効にするには、"1" に設定します。

ENABLERANU="False"

; データベース エンジンに使用する Windows 照合順序または SQL 照合順序を指定します。

SQLCOLLATION="Japanese_CI_AS"

; SQL Server サービスのアカウント: ドメイン\ユーザーまたはシステム アカウント。

SQLSVCACCOUNT="TFS2013\TFSService"

; SQL Server のシステム管理者として準備する Windows アカウント。

SQLSYSADMINACCOUNTS="TFS2013\Administrator" "TFS2013\TFSAdmin"

; 現在のユーザーを %SQL_PRODUCT_SHORT_NAME% Express のデータベース エンジン システム管理者として準備します。

ADDCURRENTUSERASSQLADMIN="False"

; TCP/IP プロトコルを無効にするには 0 を、有効にするには 1 を指定します。

TCPENABLED="1"

; Named Pipes プロトコルを無効にするには 0 を、有効にするには 1 を指定します。

NPENABLED="0"

; Browser サービスのスタートアップの種類。

BROWSERSVCSTARTUPTYPE="Disabled"

; レポート サーバーの NT サービスが実行されるアカウントを指定します。省略した場合または値が空の文字列の場合は、現在のオペレーティング システムの既定のビルトイン アカウントです。
; RSSVCACCOUNT のユーザー名部分は最大 20 文字です。
; RSSVCACCOUNT のドメイン部分は最大 254 文字です。

RSSVCACCOUNT="TFS2013\TFSService"

; レポート サーバーの NT サービスのスタートアップ モードを指定します。
; Manual – サービスのスタートアップは手動モードです (既定値)。
; Automatic – サービスのスタートアップは自動モードです。
; Disabled – サービスは無効です。

RSSVCSTARTUPTYPE="Automatic"

; 入力引数 FTSVCACCOUNT の説明を追加します

FTSVCACCOUNT="NT Service\MSSQLFDLauncher"

AGTSVCPASSWORD="TFSService"
ASSVCPASSWORD="TFSService"
SQLSVCPASSWORD="TFSService"
RSSVCPASSWORD="TFSService"
IACCEPTSQLSERVERLICENSETERMS="1"
PID="~"

TFS2013インストール(できるだけコマンドで) その4:SharePoint Foundation 2013必須コンポーネント

今回はSharePoint Foundation 2013の必須コンポーネントをインストールします。
タイトルどおりコマンドでのインストールですが、
 ・オフラインでのインストール
 ・一部のコンポーネントは最新版に変更
に挑戦してみました。

ここで「なんでSharePointの必須コンポーネントのインストールが先なの? SQL Serverのインストールが先じゃないの?」と疑問に思った方、正解です。
普通はSharePointの前提となるSQL Serverを先にインストールします。
ところが、SQL Server 2014を先にインストールすると、OSの環境変数「PSModulePath」にスペース入りのフォルダがセットされてしまい、SharePoint 2013の必須コンポーネントインストール時に「PSModulePath」へフォルダを追加する際に失敗してしまいます。(インストーラーが「setx」コマンド実行時に、既存のフォルダに対してダブルクォーテーションを付けていないことが原因です)

これを回避するため、必須コンポーネントだけ先にインストールしてしまいます。

Windows Server 2012 R2にSharePoint Foundation 2013をインストールするためには、with SP1を入手する必要があります。入手先はこちら

オフラインでSharePoint Server 2013をインストールする方法については、Japan SharePoint Support Team Blogに掲載されていました。
→「インターネットに接続されていない環境に SharePoint Server 2013 をインストールする方法
基本的には掲載されている手順に従いますが、一部のコンポーネントを最新化するために内容を変更します。
まずは、オフラインインストール用にコンポーネントをダウンロードしておきますが、以下のコンポーネントについては最新版を使いたいので取得内容を変更します。
○Windows Management Framework
 バージョンを3.0から4.0に変更します。Windows Management Framework 4.0はここから入手できます。

○Windows Identity Foundation
 Windows Server 2012 R2では、機能の追加でインストールすることになります。

○SQL Server Native Client
 2014のNative Clientインストーラは公開されていませんので、SQL Server 2014インストールメディア内の「\1041_JPN_LP\x64\Setup\x64」にある「sqlncli.msi」を使います。

○AppFabric
 最新版は「Microsoft AppFabric 1.1 for Windows Server」になります。ここから入手できます。

○WCF Data Service 5.6
 WCF Data Services 5.0は上記Blogに記載されていますが、追加で5.6が必要になります。ここから入手できます。

○Cumulative Update Package 1 for Microsoft AppFabric 1.1 for Windows Server
 日本語版が公開されています。ここから「AppFabric1.1-RTM-KB2671763-x64-JPN.exe」を入手します。

入手したコンポーネントのインストールイメージは「C:\Temp\Images」に保存します。

ようやくインストールですが、いきなり手順追加です。
○.NET Framework 3.5の有効化
 
 オフラインではWindows Updateに接続できないと有効化に失敗しますので、OSのインストールメディアを入れた状態で以下のコマンドで有効化します。
 Add-WindowsFeature Net-Framework-Features -Source D:\sources\sxs
 ※DドライブにOSのインストールメディアが入っている場合です。

○Windows Identity Foundationの有効化
 Add-WindowsFeature Windows-Identity-Foundation

○SharePoint Foundation 2013 SP1 インストールイメージの展開
 Sharepoint.exe /extract:C:\Temp\Extract

○SharePoint 2013必須コンポーネントオフラインインストール用定義ファイルの作成
 SharePoint 2013の必須コンポーネントをオフラインでインストールさせるための定義ファイルを作成します。以下の内容を「1行」で記載したファイルを「C:\Temp\Extract\PrerequisiteInstaller.Arguments.txt」として保存します。
/NETFX:"C:\Temp\Images\dotNetFx45_Full_setup.exe" /PowerShell:"C:\Temp\Images\Windows8-RT-KB2799888-x64.msu" /Sync:"C:\Temp\Images\synchronization.msi"
/sqlncli:"C:\Temp\Images\sqlncli.msi" /AppFabric:"C:\Temp\Images\WindowsServerAppFabricSetup_x64.exe" /IDFX11:"C:\Temp\Images\MicrosoftIdentityExtensions-64.msi"
/WCFDataServices:"C:\Temp\Images\WcfDataServices.exe" /KB2671763:"C:\Temp\Images\AppFabric1.1-RTM-KB2671763-x64-JPN.exe" /MSIPCClient:"C:\Temp\Images\setup_msipc_x64.msi" /WCFDataServices56:"C:\Temp\Images\WcfDataServices56.exe"

○SharePoint 2013必須コンポーネントのオフラインインストール
 C:\Temp\Extract\prerequisteinstaller.exe
 残念ながら、ここで使用許諾確認があるので、少しだけGUIを操作する必要があります。
 ※オフラインインストールの詳細については、TechNetの「ネットワーク共有から SharePoint 2013 の必須コンポーネントをインストールする」にあります。
  また、一部注意点がありますが、その内容はJapan SharePoint Support Team Blogに詳しく記載されています。

○Microsoft Identity Extensionsのインストール
 なぜか自分の環境ではMicrosoft Identity Extensionsをダウンロードしようとしてしまうため、インストールが途中で中断してしまいました。仕方がないので、個別にインストールします。
 msiexec /i C:\Temp\Images\MicrosoftIdentityExtensions-64.msi /quiet /norestart

○もう一度SharePoint 2013必須コンポーネントのオフラインインストール
 再度「C:\Temp\Extract\prerequisteinstaller.exe」を実行すると、残りのコンポーネントのインストールを継続してくれます。

これで必須コンポーネントのインストールが完了です。
やっぱりSharePointってややこしいです。

次はSQL Server 2014のインストールです。

TFS2013インストール(できるだけコマンドで) その3:TFSサーバOS環境作成

TFSサーバのOS環境設定です。

○PowerShell設定
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine

○コンピュータ名の変更
Rename-Computer tfs2013sv01 -Restart

○ネットワークアダプタの名称変更
Get-NetAdapter | Rename-NetAdapter -NewName Public

○IPv6のアドレスを削除する
Get-NetAdapter | Remove-NetIPAddress -AddressFamily Ipv6

○IPv4のアドレスを設定する
Get-NetAdapter | New-NetIPAddress -IPAddress "192.168.0.202" -AddressFamily IPv4 -PrefixLength 24

○DNS設定
Get-NetAdapter | Set-DnsClientServerAddress -ServerAddress "192.168.0.201"

○AD参加
$cred = Get-Credential
Add-Computer -DomainName "tfs2013.localnet" -Credential $cred
→ADにコンピュータを参加させるためにAD管理者ユーザを入力します。

○(念のため)再起動
Restart-Computer

次は、SharePoint Foundation 2013の必須コンポーネントのインストールについてです。

TFS2013インストール(できるだけコマンドで) その2:ADサーバ作成

まずはADサーバの構築になります。
いきなり例外ですが、Windows自体のインストールはGUIベースで行います。
本当は「Windows アセスメント&デプロイメントキット」(Windows 7までは「Windows AIK」)でできればいいのですが、ちょっと大変そうだったのでまた今度にします。

Windowsのインストールが終了したら、まずはPowerShellのポリシー変更からです。
○実行ポリシー変更
 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
 ※管理者権限で実行
 ほかのユーザで都度ポリシー設定するのは面倒なので、「-Scope LocalMachine」をつけてます。

あとは、一般的な設定を行っていきます。
○コンピュータ名の変更
Rename-Computer tfs2013ad01 -Restart
→ここでリブートします

○ネットワークアダプタの名称変更
Get-NetAdapter | Rename-NetAdapter -NewName Public

○IPv6のアドレスを削除する
Get-NetAdapter | Remove-NetIPAddress -AddressFamily Ipv6

○IPv4のアドレスを設定する
Get-NetAdapter | New-NetIPAddress -IPAddress "192.168.0.201" -AddressFamily IPv4 -PrefixLength 24

○参照DNSサーバ設定
Get-NetAdapter | Set-DnsClientServerAddress -ServerAddress "192.168.0.201"

これからADに関するインストール/設定になります。
○ADDSのインストール
Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools

○フォレスト作成
Install-ADDSForest -DomainName "tfs2013.localnet" -DomainMode Win2012R2 -ForestMode Win2012R2 -InstallDns
 →Administratorパスワードを聞かれるので入力する。
  ここで自動リブートします。

○パスワード制限変更(履歴なし/パスワードの長さ=0/複雑度チェックなし)
Set-ADDefaultDomainPasswordPolicy -Identity tfs2013.localnet -PasswordHistoryCount 0 -MinPasswordLength 0 -ComplexityEnable $false

○OU作成
New-ADOrganizationalUnit -Name TeamFoundationServer

○ADへのグループ追加
New-ADGroup -Name TFSServices -Path "OU=TeamFoundationServer,dc=tfs2013,dc=localnet" -GroupScope Global

New-ADGroup -Name TFSDevelopers -Path "OU=TeamFoundationServer,dc=tfs2013,dc=localnet" -GroupScope Global

○ADへのユーザ追加(パスワード無期限/パスワード変更要求なし)
New-ADUser -Name TFSService -AccountPassword (ConvertTo-SecureString -AsPlainText "TFSService" -Force) -PasswordNeverExpires $true -PasswordNotRequired $true -Enabled $true -Path "OU=TeamFoundationServer,dc=tfs2013,dc=localnet"

New-ADUser -Name TFSAdmin -AccountPassword (ConvertTo-SecureString -AsPlainText "TFSAdmin" -Force) -PasswordNeverExpires $true -PasswordNotRequired $true -Enabled $true -Path "OU=TeamFoundationServer,dc=tfs2013,dc=localnet"

New-ADUser -Name TFSDev01 -AccountPassword (ConvertTo-SecureString -AsPlainText "TFSDev01" -Force) -PasswordNeverExpires $true -PasswordNotRequired $true -Enabled $true -Path "OU=TeamFoundationServer,dc=tfs2013,dc=localnet"

New-ADUser -Name TFSDev02 -AccountPassword (ConvertTo-SecureString -AsPlainText "TFSDev02" -Force) -PasswordNeverExpires $true -PasswordNotRequired $true -Enabled $true -Path "OU=TeamFoundationServer,dc=tfs2013,dc=localnet"

○ADグループへのユーザ登録
Add-ADGroupMember TFSServices TFSService
Add-ADGroupMember TFSDevelopers TFSAdmin
Add-ADGroupMember TFSDevelopers TFSDev01
Add-ADGroupMember TFSDevelopers TFSDev02

ここまで実行すれば、AD構築とユーザ作成が完了です。
次はTFSサーバのOS環境作成です。