• 【IDM】ユーザーの所属グループ数が 1015 以上だと Kerberos 認証でドメインにログオンできない

    なんでだろぉ~ マイクロソフトの社員ってエレベーターに乗るときPC開いたままにするのなんでだろぉ~ ハッキリ言って邪魔だよね。

    そんな話はおいといて、こんな制限があります。ご存知でしたか?私は某社の中尾氏にお聞きして知りました....はずかしい...

    ユーザーの所属グループ数が 1015 以上だと Kerberos 認証でドメインにログオンできない

    image

    この問題について解説されているのが、以下のKBです。

    Users who are members of more than 1,015 groups may fail logon authentication

    上記の KB によれば、ユーザーがドメインにログオンするときに LSA(Local Security Authority)が Kerberos のアクセストークンを生成するのですが、このときに所属している全てのセキュリティグループのSIDを収集してアクセストークンに書き込みます。しかし、アクセストークンに含むことができるセキュリティグループの SID 数には上限がハードコードされており、それが 1023 であるため、アクセストークンを生成することができず、上記のようなログオンエラーとなってしまいます。

    「あれ、1023?残り 9 は?」と思いますよね。残りの9つは LSA によって予約されていて、実質 ユーザーが所属できるグループの数は 1014 ということになります。

    この現象、はたして回避方法はあるのか?といえば...残念ながら現時点ではないようです。MaxTokenSize というレジストリ値を変更する方法というものが以下の KB でも紹介されていますが、

    New resolution for problems with Kerberos authentication when users belong to many groups

    (ご参考 TechNet Forum)
    MaxTokenSize の値のついて

    これは、「グループ数が 1015 未満のときに”認証”や"グループポリシーの適用”が正しく適用できない場合の解決策」であり、ハードコーディングされた 1023 という数字は、残念ながら超えることができません。(実際にテストしてみましたが解決することができませんでした)

    この現象が発生するのは、一般ユーザーだけではありません。管理者でも発生します。

    では、管理者で発生してしまった場合はどうするか...というとセーフモードで操作するようです。これについては、検証後にお知らせします。

  • 【WP7】Windows Phone から Office 365 の SharePoint Online を使用する場合の初期設定について

    ※今後仕様が変更される可能性がありますので、あくまでも現時点の「参考情報」としてご覧ください

    皆様ご存知の通り、8月25日に Windows Phone 7.5 が搭載されたスマフォ、Windows Phone がリリースされました。

    Windows Phone - Microsoft Windows
    Facebook マイクロソフト UX エバンジェリズムチーム
    Facebook Windows Phone 製品チーム

    先日、私も物欲に負け、5年間使用し続けた Softbank の携帯電話から au の富士通東芝製 IS12T に乗り換えました。キャリアメールも、モバイル Suica も、お財布携帯も、ましてやワンセグなんて使っていないので、なーんも不便がありません(もしかして人生的には負け組!? orz)。

    305256_10150291547574566_721589565_7627062_3768321_n[1]
    ※このすばらしいフォルム。もう手放せません。Need for Speed もやめられません。I love Katamari も最高です。

    さっそくいろいろと実験中なのですが、ちょっと設定方法に迷った点があったので、ここでご紹介します(正直かなりイライラして、IS12T を投げつけそうになりました)。

    Windows Phone を企業内で展開したいと考えていらっしゃる方は、Office 365 との連携も考えていらっしゃると思います。Office 365 には以下のサービスが提供されていることはご存知の通りです。

    • Exchange Online
    • SharePoint Online
    • Lync Online

    Lync のリリースは今後になるので、まだ Windows Phone 上では使用することができませんが、Exchange Online および SharePoint Online には接続して使用できます。

    Exchange Online と SharePoint Onilne を使用するには、Windows Phone 上でアカウントの設定を行う必要があるのですが、ここで1点だけ注意が必要です。

    設定は Office Hub で行ってください!

    Windows Phone の [設定] 画面には「メール & アカウント」という設定項目があり、この中で各種メールサーバーへの接続に使用するアカウントを設定することができます。Exchange や Hotmail や Google や Facebook やもろもろと....。

    でもって、「Office 365」とか書いてあるので、ついここで設定してしまいたくなるのが人情です。

    しかし、それをしてしまうと、Office Hub で SharePoint Online の設定をする際に、「既にアカウントが設定されています」というエラーが出て、先に進めなくなります。私は、何度パスワードを入れなおして試したことか...。

    もし「メール & アカウント」で Office 365 のアカウントを設定してしまった場合には、一度削除してください。

    正しく設定できると、以下のような画面が表示されて、Exchange Online と SharePoint Online の使用が可能になります。Lync が今後使えるようになる...なんてメッセージも出ていますね。

    image

    なんでこんな仕様なんだろう...と、ちょいと調べてみると、どうやら以下が原因なのかなと...(これは私の個人的な想像です)。

    ※2011年11月のUpdateで制限が解除されました
    Office 365 Small Business(プラン P)では、Windows Phone の Office ハブから SharePoint Online に接続できない
    という機能制限があるようなのです。つまり、プランPを使用している組織では「メール&アカウント」で設定してください...ってことなのでしょう。ご注意ください。

    Step 1: Plan sites and manage users - SharePoint Online for professionals and small businesses - Office.com
    image

  • 【IIS】ASP からの移行先に悩む ITPRO にお勧めの資料!~OITEC きよくら氏による ASP.NET Web Pages の解説

    ※MS 社員という立場を離れて 完全に フィールドSEモード です...とあらかじめお断りしつつ...

    ASP とはもちろん、Active Server Pages です。それ以外は知りません。

    まだ私が 30歳になる手前の頃です。ASP が発表された当時、私は大喜びしたものです。

    VBScript が WEB サービスで使用できる!なんと甘美な響きか!しかも、<% %> で囲むだけでアクティブなサイトが開発できる!とっても簡単!!と、Windows 製品を主に担当していたフィールド SE の私は涙を流しながら大喜びしたものです。PHP なんぼのもんじゃいと。

    しかし時は流れ、(MS的には)ASP.NET が主流になり...Silverlight が登場し、挙句の果てに PHP もサポートと流れてきたわけですが、こうなると、インフラを担当する SE の範疇を超えてしまった感があります。もちろん MS だって、私のようなインフラ SE にではなく開発者に対してメッセージを発信しているわけですけど。

    で、困ったのが過去の遺産の行き所です。ASP をどこに移行しようか?と悩んでいるフィールド SE はとても多いです。開発者も悩んでいるかもしれませんが、フィールドSE が悩んでいるということろがミソです。そりゃー金さえあればガツンと ASP.NET で作り直せばよいのですが、そうは言ってもねぇ...というのが正直なところです。仕方がないので ASP をだましだまし使っている...でもいつなくなるわからない恐怖。

    そんな折、とても素晴らしいプレゼンを見てしまいました。

    OITEC の きよくら ならみ さんが TechParty 2011 @ 広島 でお話しした、ASP.NET Web Pages のセッション。社員としてお恥ずかしいのですが、このあたり完全にノーマークでした(同じ部門の WEBチーム に怒られそうですが)。

    imageクリックしてダウンロード

    何が素晴らしいって、単なるテクノロジー解説ではなく、実際に移行を経験した裏付けのもとに解説されているという点。

    資料には、「こういう場合はこうしたほうが良い」という点が明確に記述されています。

    きよくらさんのセッションを見ていなかったら、私は一生知ることが無かったかもしれません(< おいおい)。

    全国の フィールドSEの皆さん。まずは上記資料を見てください。サンプルのスクリプトも提供されています。

    お勧めです。

    社内エバンジェリストだと、井上さんが担当しているのかな。以下もご覧ください。

    @IT さんにもデジアドの一色さんによる解説記事が掲載されています。

  • 【PowerShell】Facebook で”あいつ”と”あの娘”が友達かどうかをチェックする

    以前以下の記事を投稿しました。

    いやー Facebook + PowerShell 面白いですね。というか、Facebook の API が面白くてたまりません。

    さて、Facebook を使っていて一番気になるのは、

    「僕は彼女と友達だけど、あいつと彼女はどうだろう?」

    ということです。間違いありません。

    気になる二人が Facebook 上で友達かどうかを確認するには、以下のような FQL(Facebook Query Language)を使用します。

    Select uid1,uid2 From friend Where uid1 = ”<1人目のUID>” AND uid2 = “<2人目のUID>”

    例えば、「私」と私の上司である「長坂」が友達かどうかを確認するには、クエリーを以下のように書きます。

    Select uid1,uid2 From friend Where uid1 = ”721589565” AND uid2 = “100001127441425”

    ここで、721589565 は私の UID で、100001127441425 は長坂の UID です。

    実行すると、以下の通りです。

    PS C:\> $Query = "Select uid1,uid2 From friend Where uid1 = '721589565' AND uid2 = '100001127441425'"
    PS C:\> $(Get-FBConnection).query( $Query )

    Key                                                              Value                                                          
    ---                                                              -----                                                          
    uid1                                                             721589565
    uid2                                                             100001127441425

    結果が返されたときには「二人は友達である」ということです。

    例えば、著名なとある有名人(UID='100002120034593')とは当然友達ではないので、同じスクリプトを実行しても何も戻りません。

    PS C:\> $Query = "Select uid1,uid2 From friend Where uid1 = '721589565' AND uid2 = '100002120034593'"
    PS C:\> $(Get-FBConnection).query( $Query )

    UID を知るには、ユーザーのウォールを参照したときに表示される id=xxxxxxxxx の部分を参照します。UID の桁数は Facebook に参加した時期によって異なります。

    image

    一方、長坂のページを見てみると、以下のように UID ではなく「kazunorn」という Username が使われています。

    image

    Username では friend テーブルは検索することができません。friend テーブルには username が含まれていないからです。そんなと���は、Username から uid を引っ張ってくる必要があります。

    そのためには、以下のようなクエリーを実行して user テーブルを検索します。

    Select uid From user Where username='kazunorn'

    PS C:\> $Query = "Select uid From user Where username='kazunorn'"
    PS C:\> $(Get-FBConnection).query( $Query ) 

    Key                                                             Value                                                          
    ---                                                               -----                                                          
    uid                                                              100001127441425

    いかがでしょう?楽しくて仕方ないですね。

    WMI(Windows Management Instrumentation)と出会った時のように楽しいです。

    こんな投稿、まだまだ続きます。

  • 【PowerShell】Facebook の”友達リクエスト”一覧を取得する

    たったいま、Tech Party のセッションが終わりました。いろんな意味で終わりましたorz

    【IPv6コミュニティ勉強会のご案内】
    2011年10月15日  マイクロソフト品川オフィス にて
    詳細は 「IPv6勉強会」オフィシャルページ

    さて、先日以下の投稿をしました。

    【PowerShell】(更新)PowerShell から Facebook にアクセスしてみる ~ Facebook PowerShell Module

    これをさらに使いこんでみよう!ということで、今回は自分への「友達リクエスト」を取得してみます。

    「友達リクエスト」を PowerShell で取得するには、PowerShell に対して「友達リクエストにアクセス」ための特権(Permissions)が必要です。Facebook では何をするにも情報にアクセスするための特権が必要で、事前にアプリケーションに与えておく必要があります。各特権の識別子は、Facebook の SDK で厳密に決められています。

    https://developers.facebook.com/docs/reference/api/permissions/

    「友達のリクエストにアクセスする特権」は「read_requests」です。

    先日ご紹介した Facebook PowerShell Module は規定では友達リクエストにアクセスすることができません。理由はもちろん、「read_requests」を与えていないからです。

    そこで、Facebook PowerShell Module に read_requests 特権を与えてみます。

    %UserProfile%\Documents\WindowsPowerShell\Modules\Facebook 配下の「Facebook.ps1」をメモ帳で開いて、以下を追記しましょう。



    [string[]]$global:FB_DefaultExtendedPermissions = @(
    "user_about_me",
    "friends_about_me",
    "user_events",
    "friends_events",
    "user_groups",


    "user_education_history",
    "user_likes",
    "read_requests" ←これを追記する
    )

    追記したら保存して、PowerSell ISE を起動し、facebook module を読み込みましょう。

    PS C:\> Import-Module facebook

    さらに、Facebook へのコネクションを張ります。

    PS C:\> New-FBConnection

    ログオンしていなければ、以下のようにログオン画面が表示されます。

    image

    ログオンが完了すると、ユーザー情報にアクセスするための特権の承認画面が表示されます。

    既に、過去に Facebook PowerShell Module を使用したことがあれば、以下のように追加した特権だけを承認する画面が表示されるはずです。

    image

    「許可する」をクリックすれば、Facebook PowerShell Module に友達リクエストにアクセスするための特権が与えらえます。

    ここまでは OK でしょうか。

    さっそく友達リクエストを取得してみましょう。

    以下のスクリプトを実行してみてください(汚いスクリプトですみません)。

    $query = "SELECT uid_from FROM friend_request WHERE uid_to=me()"
    $Requests = $(Get-FBConnection).query( $query )
    $Requests = $Requests.ToString()
    $Requests = $Requests.Replace("[","")
    $Requests = $Requests.Replace("{","")
    $Requests = $Requests.Replace("}","")
    $Requests = $Requests.Replace("]","")
    $Requests = $Requests.Split(",")
    Foreach ($e in $Requests) {
        $uid_from = (($e.Split(":"))[1]).Replace("""","")
        $query = "select name from user where uid = '$uid_from'"
        $(Get-FBConnection).query( $query )
        }

    リクエストがあれば、以下のような結果が戻ってくるはずです。
    ※ご協力いただいた皆様、感謝です!心より感謝しつつ承認しちゃいました。

    Key                                      Value                                 
    ---                                        -----
    name                                    Yoshiko Honma                         
    name                                    Maki  Tokutake                        
    name                                    Ichiro Ota                            
    name                                    Tomoyuki Hirase                       
    name                                    Kishima Masakazu

    上記のスクリプトについて簡単に解説しておきましょう。

    1行目はクエリーを作成している文字列です。SELECT  ~ で始まっている通り、クエリーであることがわかります。これは、Facebook の情報にアクセスするためのクエリーで、Facebook Query Language(FQL)と呼ばれています。

    Facebook Query Language (FQL) - Facebook Developers

    考え方は、SQL とほぼ同じです。今回は、friend_request テーブルから uid_to が me の条件に合致するレコードを取得しています。

    uid_to とはリクエストの送信先であり、値には当然「私自身」を指定します。「私自身」は「me」と表現することができます。

    2行目ではクエリーを実行しています。Get-FBConnection コマンドレットで現在ログオンしているユーザーのセッションを取得し、それに対して Query メソッドを実行することでクエリーを実行できます。

    以下は、$(Get-FBConnection) のメンバーを取得したものです。Query 以外にも、Get や Put などのメソッドが提供されていることがわかります。

    PS C:\> $(Get-FBConnection) |get-member

    TypeName: Facebook.FacebookClient

    Name            MemberType Definition                                         
    ----            ---------- ----------                                         
    DeleteCompleted Event      System.EventHandler`1[Facebook.FacebookApiEventAr...
    GetCompleted    Event      System.EventHandler`1[Facebook.FacebookApiEventAr...
    PostCompleted   Event      System.EventHandler`1[Facebook.FacebookApiEventAr...
    Batch           Method     System.Object Batch(Params Facebook.FacebookBatch...
    BatchAsync      Method     System.Void BatchAsync(Facebook.FacebookBatchPara...
    Delete          Method     System.Object Delete(string path), System.Object ...
    DeleteAsync     Method     System.Void DeleteAsync(string path), System.Void...
    Equals          Method     bool Equals(System.Object obj)                     
    Get             Method     System.Object Get(string path), System.Object Get...
    GetAsync       Method     System.Void GetAsync(string path), System.Void Ge...
    GetHashCode    Method     int GetHashCode()                                  
    GetType         Method     type GetType()                                     
    Post            Method     System.Object Post(string path, System.Collection...
    PostAsync      Method     System.Void PostAsync(string path, System.Collect...
    Query           Method     System.Object Query(string fql), System.Object Qu...
    QueryAsync      Method     System.Void QueryAsync(string fql), System.Void Q...
    ToString        Method     string ToString()                                  
    AccessToken     Property   System.String AccessToken {get;set;}               
    UseFacebookBeta Property   System.Boolean UseFacebookBeta {get;set;}
     

    メソッドには Query だけでなく、Put も用意されているので、Feed に投稿したりメッセージを送ったり...なんてことも可能です。

    下から3行目をご覧ください。ここにもクエリーが書かれています。

    これは、friend_request テーブルには name が格納されていないので、取得してきた uid を使って user テーブルを検索しています。

    ただ、残念ながら 友達リクエストを自動承認する方法がどうしてもみつからず...ある事例では JavaScript で「承認する」ボタンを押す..なんてものがあったりしましたが...。

    ...なのできちんと友達かどうかを吟味し、問題ないことを確認してから手動で「承認」する必要があります。

    Facebook は今後企業のシステムの一部と化する可能性があります。そんなとき、IT Pro はこうしたコマンドレットを駆使して Facebook の情報を収集したり、逆にFacebookに投稿したりといったテクニックが求められるでしょう。