2011.8.25 Facebook PowerShell Module のバージョンアップに伴いリライトしました
CodePlex に以下の SDK とモジュールが公開されています。
後者を見てざわざわしたものを感じた方は、完全に PowerShell にやられていると言って過言ではないでしょう。
理屈は追って説明することにして、まずは使ってみましょう。
以下をクリックして、Facebook PowerShell Module をダウンロードしてください。SDK はひとまず必要ありません。
←クリックしてダウン��ード
ダウンロードしたファイルは ZIP形式になっているので、適当な場所(c:\tmp 等)に解凍したファイルを保存しましょう。
インストールは簡単です。
上記の FacebookPSModule Alpha 0.3.3.msi を実行するだけです。
インストールが完了すると、以下のように、プロファイル内に Facebook というフォルダが作成され、必要なファイルがコピーされます。
C:\Users\<ユーザー名>\Documents\WindowsPowerShell\Modules\Facebook
さて、ここまでできたらいよいよ触ってみましょう。
ISE を起動したら、まずは Import コマンドで Facebook コマンドレットを読み込みます。以下のコマンドを入力してください。
PS C:\> Import-Module facebook
さらに、以下を入力してコマンドレットの一覧を確認しましょう。「新規追加」と書いているのは、alpha v 0.2 から新たにサポートされたコマンドレットです。
PS C:\> Get-Command –Module facebook
CommandType Name Definition ----------- ---- ---------- Function Add-FBEvent ... Function Add-FBPhoto ... ← 新規追加 Function Clear-FBConnection ... Function Convert-FBJSON ... Function Convert-FBJSONHash ... Function Get-FBAlbums ... ← 新規追加 Function Get-FBAssociation ... Function Get-FBConnection ... Function Get-FBEvents ... Function Get-FBFeed ... Function Get-FBFriends ... Function Get-FBObjectData ... Function Get-FBPosts ... ← 新規追加 Function Get-FBRawData ... Function New-FBConnection ... Function New-FBFeed ... ← 新規追加 Function Read-FBConnection ... Function Write-FBConnection ...
ここまではOKでしょうか?
では Facebook に接続してみます。細かな理屈は追って解説します。
すると、Facebook へのログオン画面が表示されるのでログオンしましょう。
ユーザーの認証が完了すると、今度は以下の画面が表示されます。これはアプリケーションに自分自身のデータへのアクセスを認可する画面です。
ここで[許可する]をクリックすれば、以降、コマンドレットから Facebook 上に保存されている自分のデータにアクセスすることができます。
[拒否]すれば、もちろんアクセスできません。
Facebook から見ると、「Test_Application_jonn_msft」というアプリケーションに対して認可するように見えています。jonn とは、この Facebook PowerShell Module の作者です。
[許可する] をクリックすると、OAuth2 による認可プロセスが処理され、Facebook からアプリケーション(この場合は Facebook Powershell Module)に対して「アクセストークン」が返されます。
PS C:\> New-FBConnection
AccessToken --------------- 99999999999999|de66c7d65c96d39cd580aaa.xxxxxxxxxxxxxxxxxxxxxx...
「アクセストークン」とは、Facebook Powershell Module がユーザーの情報にアクセスするためのチケットのようなものです。このアクセストークンが無いと、ユーザー情報にはアクセスできません。
アクセストークンは %LOCALAPPDATA%\FacebookPowerShellModule_CachedToken.txt というファイル内に生テキストで保存されます。このファイルが流出すると他のプログラムから自分自身の情報にアクセスできてしまうので、くれぐれも取扱いには注意しましょう。
アクセストークンに関する詳細な解説は別の投稿で行うことにします。
さっそく ISE の画面から以下のコマンドレットを入力してみましょう。
>Get-FBFriends |Sort-Object name
id name -- ---- 1000017xxxxxxxx Ai xxxxxxx 100xxxxxxx Aki xxxxxxxx 183xxxxxxx Akihiro xxxxxxxx 112xxxxxxx Akiko xxxxxxxx 105xxxxxxx Akiko xxxxxxxx 10000090xxxxxxx Akiko xxxxxxxx ・ ・
何をしているかは一目瞭然ですよね。自分の Facebook 上の友達(なんか悲しい表現だな..)の一覧を取得して表示しています。その際に、Sort-Object を使用して、nameでソートしています。
[id] とは Facebook 上の ID です。Facebook 上の一切のオブジェクト(ユーザー、写真、投稿したコメント、その他もろもろ)には必ず識別するための ID がついています。友達の詳細な情報を取得するときにも、この ID を使用します。
PowerShell なので、当然、こんなこともできます。便利ですね。
PS C:\> (Get-FBFriends).count 315
友達の ID を取得できることがわかったので、今度は特定の友達の詳細な情報を見てみましょう。先ほど取得した ID を使用します。
PS C:\> Get-FBObjectData -Id "100002xxxxxxxx"
relationship_status : Single id : 100002xxxxxxxxx last_name : Taro name : Yamada Taro bio : SI屋でコードを書きたいのにかけなくてうずうずしながら若さゆえの情熱を持て余す日々。この熱くほてった体を誰かしずめてぇぇぇぇ! first_name : Yamada link : http://www.facebook.com/profile.php?id=100002xxxxxxxxxx updated_time : 2011-04-21T15:11:27+0000 locale : ja_JP gender : male
結果を見ると、独身の日本人男性で、少々変○であることがわかります。また、最終更新日が4月21日と、最近ごぶさたなこともわかりますね。こうした情報は、「友達」だから見えるのであって、誰でも彼でも見えるわけではありません。
なお、Facebook のプロフィールにはもっとたくさんの情報を登録することができます。この方の場合は、必要最小限の情報のみが登録されているようです。
例えば、私の情報を参照すると以下のように表示されます。-Id に “me” と指定していますが、Facebook では自分自身(認証済ユーザー)は”me” で表現することができます。便利ですね。
PS C:\> Get-FBObjectData -Id me
verified : True gender : male last_name : Anno hometown : @{id=11274xxxxxxxxxx; name=Utsunomiya-shi, Tochigi, Japan} email : junichia@xxxxxxxxxx birthday : 10/02/1968 link : http://www.facebook.com/profile.php?id=72xxxxxxx religion : 八百万の神々 locale : ja_JP updated_time : 2011-07-13T11:57:21+0000 name : Junichi Anno id : 72xxxxxxx languages : @{id=109549852396760; name=Japanese} work : {@{position=; start_date=2007-04; end_date=0000-00; employer=}, @{start_date=1991-04; end_date=2007-04; employer=}} education : {@{school=; year=; type=High School}, @{school=; type=College; year=; concentration=}} political : 秘密 first_name : Junichi favorite_athletes : @{id=175405739162732; name=いません} location : @{id=108279402527734; name=Oyama-shi, Tochigi, Japan} timezone : 9 bio : 日本マイクロソフトでエバンジェリストをやってます。どうぞよろしくお願いいたします。
全ての友達の全てのプロフィールと一気に取得する...なんて場合には以下のように記述することもできます。一度友だち全員のプロフィールを確認して、うかつに「承認」してしまったことを後悔してみるのも悪くありません。
さて、Facebook の醍醐味は、単に自分自身のプロフィールを登録するだけでなく、さまざまな付帯情報を管理できる点にあります。付帯情報とは、「友達」、「投稿」「好きな映画」「いいね!」などなど。これらはまとめて「Connection」と呼ばれています。
Connection には以下のようなタイプのデータがあります。
これ以外にもまだあるはずですが、ちょっと時間が無いのでここまで。
Connectionタイプの情報を取得するには、Get-FBAssociation コマンドレットを使用します。
以下は、私が過去に「いいね!」したオブジェクトの一覧です。「いいね!」した日付順に並べています。
id name created_time category -- ---- ------------ -------- 70424008437 Bing 2009-08-22T11:29:37+0000 Product/service 216311481960 Bill Gates 2010-01-19T23:19:28+0000 Business person 45043912843 The Official Microsoft MVP Community 2010-05-16T16:59:50+0000 Product/service 350065477608 Reading Books 2010-05-25T01:55:10+0000 Interest 109592195726412 Travel 2010-05-25T01:55:10+0000 Interest 115605528452545 New Technologies 2010-05-25T01:55:10+0000 Interest 105613102805639 Ancient Egypt 2010-05-25T01:55:11+0000 Interest 118998374823947 Agile_Cat 2010-10-26T06:16:51+0000 Website 167767416591965 Security-Talk by Cozax 2010-12-25T04:54:53+0000 Product/service 2231777543 Twitter 2011-01-07T09:53:58+0000 Application 129722657098394 パソナテック/エンジニアカフェ 2011-03-05T06:32:09+0000 Company 2345053339 Developer 2011-03-06T12:35:34+0000 Application 367560701743 Oasis Hotel in Luxor, Egypt 2011-04-10T02:16:50+0000 Hotel 186856198023415 インストールマニアックス 2011-04-24T23:22:20+0000 Product/service 162097640518419 cloud-girls-mix on Ustream 2011-04-24T23:28:45+0000 Website 126395117437023 Microsoft Developer Forum 2011 2011-05-19T06:51:11+0000 Software 185004258197188 Zero Day 2011-05-26T08:21:55+0000 Book 179334845437863 栃木県立宇都宮高等学校 2011-05-29T04:32:47+0000 School 147999988604983 WPdevday on Ustream 2011-06-08T04:30:48+0000 Website 115800991838559 ASUS Japan 2011-06-18T04:27:59+0000 Computers/technology 233115383381196 日本マイクロソフト UX チーム 2011-06-22T16:21:07+0000 Product/service 105787369511635 wp-arch on Ustream 2011-06-23T03:18:29+0000 Website 171192329606787 Microsoft Developer Forum 2011 Japan o... 2011-06-23T04:56:09+0000 Website 212572792111675 Tech Fielders セミナー on Ustream 2011-06-23T06:12:51+0000 Website 186400324743207 Imagine Cup Japan | イマジンカップジャパン 2011-06-30T05:01:46+0000 Community 198671676834275 宇都宮大学 2011-07-01T14:25:42+0000 University 102134986532994 Hideyuki Takano 2011-07-01T17:13:11+0000 Author 241912695820827 jazug-girls on Ustream 2011-07-09T07:08:05+0000 Website 107938752635074 日本マイクロソフト株式会社 ISV 2011-07-13T05:42:55+0000 Product/service 162171137156411 FB C# SDK 2011-07-13T05:48:25+0000 Product/service 179873125388138 Test Application jonn_msft 2011-07-13T08:11:44+0000 Application 164821313572981 ハングオーバー2 2011-07-13T10:48:44+0000 Movie 106879676011328 なんでも 2011-07-13T10:48:44+0000 Music 106310202730728 見ません 2011-07-13T10:50:00+0000 Tv 184363171581232 やりません 2011-07-13T10:50:01+0000 Games/toys 175405739162732 いません 2011-07-13T10:50:58+0000 Athlete
この結果を見て気づいたのですが、プロフィールに指定した「本」や「映画」は「いいね!」としてマークされてるんですね。うかつに変なものは入れておけないですね。
もちろん、友達の「いいね!」も表示することができます。
ここで、「人」ではないものも触ってみましょう。上の一覧に、「日本マイクロソフトUXチーム」というのが表示されています。赤文字の部分です。
これは人ではなく、Facebookページです。もちろんこいつにも ID が付与されており、以下のようにして関連情報を収集することができます。
以下は、Facebook ページのウォールに投稿されたFeedを収集しています。
id : 233115383381196_251158651576869 actions : {@{name=Comment; link=http://www.facebook.com/233115383381196/posts/251158651576869}, @{name=Like; link=http://www.facebook.com/233115383381196/posts/25 1158651576869}, @{name=@mswinux on Twitter; link=http://twitter.com/mswinux?utm_source=fb&utm_medium=fb&utm_campaign=mswinux&utm_content=910722076771696 65}} type : status created_time : 2011-07-13T09:11:21+0000 from : @{id=233115383381196; name=日本マイクロソフト UX チーム; category=Product/service} updated_time : 2011-07-13T09:11:21+0000 likes : @{id=146xxxxxxxx; name=Ryosuke xxxxxxxx} icon : http://photos-d.ak.fbcdn.net/photos-ak-snc1/v27562/23/2231777543/app_2_2231777543_9553.gif message : CLR/Hの勉強会でWindows Phone "Mango"とWPF系の話をします: マイクロソフトの田中達彦です。2011年7月16日(土)に、札幌で開催されるCLR/HでWindows PhoneとWPF/WPFリボン... http://bit.ly/qucu26 application : @{id=2231777543; name=Twitter}
上記の結果で、「likes」の行をご覧ください。これは、この投稿によせられた「いいね!」です。このようにして、投稿1つ1つからも関連した情報を引っ張ってくることができるのですね。
なお、Clear-FBConnection というコマンドレットはあるのですが、このバージョンでは Facebook からのログアウトがサポートされていません。よって、現時点では手動でログアウトする必要があります。
どうでしょう?
PowerShell が使えるとなると、Facebook が一気に身近なものに感じられますよね。
次回以降では、内部の動き、特に認証と認可まわりについて解説することにします。
前回の投稿では、Identity Developer Training Kit で発生する、日本語環境でのエラー回避方法について紹介しました。
【WP7 for IT Pro】Identity Developer Training Kit の前提条件チェックが通らないときの対処
エラー回避のキーとなるのは、Windows PowerShell スクリプトでした。
で、依存関係チェッカーが使用しているスクリプトを改めて眺めてみると、コレが結構勉強になる代物でして。簡単なスクリプトなんですけどね。
Identity Developer Training Kit で用意されている前提条件チェック用スクリプトは以下の通りです。ファイル名を見れば何をチェックしているか、一目瞭然ですよね。
PS C:\IdentityTrainingKitVS2010\Assets\DependencyChecker\scripts\dependencies\check> dir |ft name
Name ---- CheckASPNET4.ps1 CheckAzureMMC.ps1 CheckAzureTools13ForVS2010.ps1 CheckAzureTools14ForVS2010.ps1 CheckAzureToolsForVS2008.ps1 CheckAzureToolsForVS2010.ps1 CheckIIS7.ps1 CheckIis7AspNet.ps1 CheckIisRewrite.ps1 CheckIISStaticContent.ps1 CheckLoadUserProfile.ps1 CheckNET35SP1.ps1 CheckNET4.ps1 CheckNetServicesSDK.ps1 CheckSilverlight4ToolsForVS.ps1 CheckSilverlightDevTools.ps1 CheckSilverlightToolsForVS.ps1 CheckSqlServer.ps1 CheckSqlServer2008.ps1 CheckVistaSP2.ps1 CheckVS2008.ps1 CheckVS2010.ps1 CheckWCFHTTPAct.ps1 CheckWifRuntime.ps1 CheckWifSdk4.ps1 CheckWP7AddInVS2010.ps1 CheckWP7Emulator.ps1
ここで、CheckVS2010.ps1 の中身を見てみましょう。以下は CheckVS2010.ps1 の全体像です。
function SearchUninstall($SearchFor, $UninstallKey, $Version) { $uninstallObjects = ls -path $UninstallKey; $found = $FALSE;
foreach($uninstallEntry in $uninstallObjects) { $entryProperty = Get-ItemProperty -LiteralPath registry::$uninstallEntry if($entryProperty.DisplayName -like $searchFor -and $entryProperty.DisplayVersion -like $Version) { $found = $TRUE; break; } }
$found; }
function SearchAllUninstallKeys($SearchFor, $Version) { $os = Get-WMIObject win32_operatingsystem [bool] $found = $False; $SearchFor64bits = "$SearchFor (64-bit)" # Seach in uninstall folder $found = SearchUninstall -SearchFor $SearchFor -UninstallKey 'HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' -Version $Version; if($found) {return $found;} #Search in 64 bit keys folders if ($os.OSArchitecture -eq "64-bit") { #Wow folder $found = SearchUninstall -SearchFor $SearchFor -UninstallKey 'HKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\' -Version $Version; if($found) {return $found;} #Wow folder, 64 bits $found = SearchUninstall -SearchFor $SearchFor64bits -UninstallKey 'HKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\'-Version $Version; if($found) {return $found;} #32bit folder, 64 bits $found = SearchUninstall -SearchFor $SearchFor64bits -UninstallKey 'HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\'-Version $Version; if($found) {return $found;} } return $found; }
## SearchAllUninstallKeys -SearchFor 'Microsoft Visual Studio 2010*' -Version '10.0.30319'; SearchAllUninstallKeys -SearchFor 'Microsoft Visual Studio 2010*' -Version '10.0.40219';
一番最後の行が最初に実行されるコマンドで、ここで指定した文字列(製品名)とバージョン番号が SearchUninstall と SearchAllUninstallKeys という関数に渡されます。
SearchUninstall は引数として与えられたレジストリキー(Uninstall)の中から、製品名とバージョン番号を検索する関数です。エントリと値が存在していれば True が返されます。
SearchUninstall を呼び出しているのが SearchAllUninstallKeys 関数です。この関数では、以下の4つのパターンを想定して検索を行っており、いずれかが True になればインストールされていると判断しています。
(参考)32-bit and 64-bit Application Data in the Registry (Windows)
もう一つ、別のタイプのスクリプトを見てみましょう。CheckIIS7.ps1 です。ファイル名からわかるとおり、IIS7とASP.NETがインストールされているかどうかをチェックするスクリプトです。
function Check-RegistryValue($PropertyPath, $PropertyName, $PropertyValue) { if ((Test-Path -path $PropertyPath) -ne $True) { return $FALSE; }
$found = $FALSE; $entryProperty = Get-ItemProperty -path $PropertyPath
if($entryProperty.psobject.Properties -ne $null) { $registryValue = $entryProperty.psobject.Properties[$PropertyName].value;
if($registryValue -eq $PropertyValue) { $found = $TRUE; } }
$query = Get-WmiObject Win32_Service | where {$_.Name -eq "w3svc" }
$hasIIS = ($query -ne $null); $hasAspNet = Check-RegistryValue -PropertyPath "HKLM:\SOFTWARE\Microsoft\INETSTP\Components" -PropertyName "ASPNET" -PropertyValue "1";
$hasIIS -and $hasAspNet;
このスクリプトでは、はじめに Win32_Service を使用して IIS(w3csvc)のサービス状態を取得しています。ためしに、PowerShell のコンソールで、以下のコマンドを入力してみてください。
Get-WmiObject Win32_Service | where {$_.Name -eq "w3svc" }
IISが稼働しているかどうかにかかわらず、ただしくサービスとしてインストールされていれば、以下のような結果が返されます。
PS C:\> Get-WmiObject Win32_Service | where {$_.Name -eq "w3svc" }
ExitCode : 0 Name : W3SVC ProcessId : 3108 StartMode : Auto State : Running Status : OK
ASP.NET がインストールされているかどうかはサービスを見るだけでは判別できないため、例によってレジストリキーをチェックしています。ただし、これまでのように「製品」としてインストールされているわけでは無いので Uninstall キーをチェックしても意味がありません。そこで、Uninstall キーの代わりに \SOFTWARE\Microsoft\INETSTP\Components というキーをチェックしています。
最後に、IIS のインストール状態と ASP.NET のインストール状態を論理演算し、結果が True であればチェックをパスすることができます。
以前はこうしたスクリプトは VBSで提供されることが多かったのですが、ここ数年ですっかり Windows PowerShell にとって変わられました。こうした現状を見るにつけ、Windows の次のバージョン(なんて名前になるかは知りませんが)で VBS が使えなくなることは無いにしても、おそらく進化も望めないのだろうと、若干寂しくなる今日この頃です。
2011年7月より UX & Client Platform Evangelism Group に転属となりました。今後ともよろしくお願いいたします。
早速ですが新部署移動後、最初の投稿は、Windows Phone 7(WP7)用の Identity Developer Training Kit の日本語環境での非互換についてです。
Identity Developer Training Kit(ITK) は、Identity 周りのテクノロジーの実装方法を Step by Step で習得できるプログラマー向けのコンテンツです。あいにく英語なのですが、Step by Step なのでさほど難しくありません。
Identity Developer Training Kit(ITK)2011年4月版(英語)
Visual Studio を使用するため(ExpressでもOK)、IT Pro には少々敷居が高いのですが、マイクロソフトがサポートする Identity 系テクノロジーのアーキテクチャを理解するのにとても Good なコンテンツなのです。なので、私も無理して Visual Studio を使用しています。
ITK 2011年4月版には、全部で9つのシナリオが用意されており、その中の1つに Windows Phone 7 と Windows Azure AppFabric ACS を使用するシナリオがあります。このシナリオは、Windows Azure 上の WEBサービスを Windows Phone 7上のアプリから使用するに当たり、Windows Azure AppFabric ACS からセキュリティトークンを発行してもらう...というものです。
シナリオを学習するには、セットアップスクリプトを実行する必要があるのですが、そのまえに「依存関係チェッカー(Dependencies.dep)」と呼ばれるプログラムを実行しなければなりません。
依存関係チェッカーを実行すると、以下のように当該シナリオに必要なコンポーネントがインストールされているかどうかがチェックされます。以下の例の場合、「Microsoft Windows Phone 7 Add-in for Visual Studio 2010」がインストールされないというエラーが表示されていることがわかります。
本当にインストールされていない場合には「Download」をクリックしてコンポーネントをインストールすれば済むのですが、これが何度インストールしてもチェックを通過することができません。コントロールパネルで確認すると、以下のようにインストールされていることがわかります。
これは明らかに依存関係チェッカーの動作ミスに違いありません。
ということで、依存関係チェッカー(Dependencies.dep)を確認してみます。
Dependencies.dep をメモ帳で開くと以下の通りです。ちょっと長いですが、ずらずらっと眺めてみてください。なんとなく、何がしたいかはわかりますよね。
<?xml version="1.0" encoding="utf-8" ?> <DependencyCheckerConfiguration> <title>Access Control and Windows Phone 7</title> <previews> <preview name="Check dependencies" description="Check prerequisites for Authenticating Users in a Windows Phone 7 App via Access Control Service, OData Services and Windows Azure Lab"></preview> <preview name="Setup database" description="Setup database schema and sample data"></preview> <preview name="Install code snippets" description="Install Visual Studio 2010 Code Snippets for the lab"></preview> </previews> <tasks> <task description="Setup database" scriptName=".\Scripts\SetupDb.cmd" displayConsole="true" /> <task description="Install Visual Studio 2010 Code Snippets for the lab" scriptName=".\Scripts\InstallCodeSnippets.cmd" displayConsole="true" /> </tasks>
<dependencies> <os type="Vista" buildNumber="6000;6001"> <dependency value=".\Scripts\Dependencies\Check\CheckVistaSp2.ps1" enabled="true" optional="false" title="Vista SP2" explanation="Vista Service Pack 2 is required." scriptName="" downloadUrl="http://windows.microsoft.com/en-US/windows/downloads/service-packs" /> </os> <os type="Vista;Server" buildNumber="6002;7600;7601"> <dependency value=".\Scripts\Dependencies\Check\CheckVS2010.ps1" enabled="true" optional="false" title="Microsoft Visual Studio 2010" explanation="Install Microsoft Visual Studio 2010" scriptName="" downloadUrl="http://go.microsoft.com/fwlink/?LinkId=128752" /> <dependency value=".\Scripts\Dependencies\Check\CheckNET4.ps1" enabled="true" optional="false" title="Microsoft .NET Framework 4" explanation="Download and install the Microsoft .NET Framework 4" scriptName="" downloadUrl="http://www.microsoft.com/downloads/details.aspx?FamilyId=AB99342F-5D1A-413D-8319-81DA479AB0D7"/> <dependency value=".\Scripts\Dependencies\Check\CheckSqlServer.ps1" enabled="true" optional="true" title="Microsoft SQL Server Express 2008 (or later)" explanation="Install Microsoft SQL Server Express 2008 (or later)" scriptName="" downloadUrl="http://www.microsoft.com/express/sql/download/"/> <dependency value=".\Scripts\Dependencies\Check\CheckIIS7.ps1" enabled="true" optional="false" title="Microsoft IIS 7.0" explanation="Enable the Internet Information Services 7 feature." scriptName="Scripts\Dependencies\Setup\install-iis.bat" /> <dependency value=".\Scripts\Dependencies\Check\CheckIis7AspNet.ps1" enabled="true" optional="false" title="IIS7 ASP.NET" explanation="Enable the ASP.NET role." scriptName="Scripts\Dependencies\Setup\install-iis7aspnet.bat" /> <dependency value=".\scripts\dependencies\check\CheckAzureTools14ForVS2010.ps1" enabled="true" optional="false" title="Windows Azure SDK and Windows Azure Tools for Microsoft Visual Studio (March 2011)" explanation="Download and install Windows Azure SDK 1.4 and VS Tools" downloadUrl="http://go.microsoft.com/fwlink/?LinkId=128752" scriptName=""/>
<dependency value=".\scripts\dependencies\check\CheckWP7Emulator.ps1" enabled="true" optional="false" title="Microsoft Windows Phone Developer Emulator" explanation="Download and Install Windows Phone Developer Tools" scriptName="" downloadUrl="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=04704acf-a63a-4f97-952c-8b51b34b00ce" /> <dependency value=".\scripts\dependencies\check\CheckWP7AddInVS2010.ps1" enabled="true" optional="false" title="Microsoft Windows Phone 7 Add-in for Visual Studio 2010" explanation="Download and Install Windows Phone Developer Tools" scriptName="" downloadUrl="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=04704acf-a63a-4f97-952c-8b51b34b00ce" /> <dependency value=".\scripts\Dependencies\Check\CheckWifRuntime.ps1" enabled="true" optional="false" title="Windows Identity Foundation Runtime" explanation="Identity Labs require Windows Identity Foundation Runtime" scriptName="" downloadUrl="http://support.microsoft.com/kb/974405" />
<dependency value=".\scripts\Dependencies\Check\CheckWifSdk4.ps1" enabled="true" optional="false" title="Microsoft Windows Identity Foundation SDK" explanation="Identity Labs require Windows Identity Foundation SDK" scriptName="" downloadUrl="http://www.microsoft.com/downloads/details.aspx?familyid=C148B2DF-C7AF-46BB-9162-2C9422208504" /> </os> </dependencies> </DependencyCheckerConfiguration>
黄色でマークした部分が、「Windows Phone 7 Add-in for Visual Studio 2010」のチェック部分です。目を凝らしてみると、
.\scripts\dependencies\check\CheckWP7AddInVS2010.ps1
という PowerShell スクリプトが呼ばれていることがわかります。
...ということで、CheckWP7AddInVS2010.ps1 を見てみましょう。
C:\IdentityTrainingKitVS2010\Assets\DependencyChecker\scripts\dependencies\check の配下に格納されている CheckWP7AddInVS2010.ps1 を開くと以下の通りです。
SearchAllUninstallKeys -SearchFor 'Windows Phone 7 Add-in for Visual Studio 2010 - ENU' -Version '10.0.30319';
一番下の行を見てください。 -Version '10.0.30319' という記述が見えます。明らかにバージョン番号であることがわかりますね。この番号をコントロールパネルに表示された値と比較すると...合ってる。バージョン番号に問題はありません。
ではどこがおかしいのか...?
英語版のスクリプトをデバッグする場合には、文字列比較している部分を疑うのがコツです。ここで一番怪しいのは、黄色くマークした部分です。
if ($os.OSArchitecture -eq "64-bit") {
OSのアーキテクチャが “64-bit” の場合には...という判定をしているっぽい記述ですよね。かなり臭いです。
そこで、PowerShell のコンソールを開いて、以下のコマンドを入力してみてください。
なんと、OSArchitecture プロパティの値は「64 ビット」という日本語じゃないですか!
やってられーん...こともない!ということで、スクリプトを書き換えましょう。
↓以下のように書き換え
if ($os.OSArchitecture -eq "64 ビット") {
保存して、再度依存関係チェッカーを実行すると、以下の通り正常終了します。
Identity Developer Training Kit を使用する場合には、以下も参考にしてください。
【IDM】Identity Developer Training Kit がうまくインストールできないときの対処