[WinRM/WinRS] 簡単リモート管理!WMI の代わりに使ってみませんか?

皆さんごきげんよう。ういこです。最近森ガールの後継の山ガールが流行ってるらしいですね。私もついカッとなってファーベストを試着したら山狩り上等なマタギ感溢れるコーデになってしまいそして僕は途方にくれるな秋ですが皆さま如何お過ごしでしょうか。 さて、今日は WinRM についてです。あんまり情報が無いので、おいしそうに見えませんが、毒キノコじゃないですよ。WinRM は食べて美味しいものですよ!食べず嫌いはもったいないです。というわけで、今日は本当に基本の基本になっちゃいますが、簡単な使い方を御紹介します。 能書き WinRM とは…というのを語ってるとすごく難しくて、色々語られつくされているのですがまあ要は DCOM 使わないで HTTP/HTTPS などでリモートコンピュータやらの管理ができる便利なインターフェースと思ってください。興味をもたれた方は後述の technet コンテンツなどご参照頂ければと思います。管理系インターフェースとしては、WMI が随分人口に膾炙している感がありますが、WinRM も基本同じような目的のものなので、ほとんど同じことが出来ます。むしろ、もっと出来ることあるかも。 ① WinRM のバージョンを見てみよう 2010 年 10 月 27 日現在、WinRM のバージョンは二つありますです。 ・Windows Vista / Windows Server 2008 … Version 1.x ・Windows 7 / Windows Server 2008 R2 … Version 2.x 実は、それぞれ微妙に違います。例えば、既定のポート番号が違ったりします。そこで、まずあなたの環境と、リモートでこっそりいじりまわしてやりたい環境と双方の WinRM のバージョンを確認してみたいと思います。 ローカルで実行してみる 1. PowerShell を管理者権限で実行します。 2. WinRM id…

0

[FIM国際化対応] ポータルは Client OS 側の IE あるいはコントロール パネルの [地域と言語] に設定されている言語で表示される (Ver 2.0)

(改稿 : 2010/11/02 By Uikou) 皆さんごきげんよう。ういこです。 羽田空港の国際化が始まったらしいです。(うろ覚え、2010/10/21 現在)これにあざとく便乗した ILM 一家が送る今日のコンテンツ、”FIM のポータルの国際化対応方法” についてご案内いたします。インストーラパッケージを見て頂くと判るように、FIM ポータルは、9 言語に対応しています。では、インストールした後、どうやってポータルの言語を変えればよいのでしょう?これより導入を検討頂いている方などは、ドキュメントも英語だし、判りづらいなと思っていらっしゃるのではないでしょうか。 結論からいうと、一台 FIM ポータルサーバを組んで頂くだけで複数言語対応を行うことが可能です。アクセス URL も一つで、クライアント側の設定を変更するだけでポータルの表示を変更することができます。一方サーバ側の設定は、ポータルの言語パックを別途ダウンロード サイトより入手後、FIM サーバ上でインストールを実施頂くのみとなります。 ただしインストールの際、"Custom Setup" フェーズにてインストール対象のリソースを選択する画面がありますが、対応したい言語パックはすべて対象としてインストールして頂く必要があります。 FIM ポータルの言語は、Client IE の "言語の優先順位" の最優先の言語 もしくは OS の [地域と言語] オプションの "形式" に設定されている言語形式と紐づいております。 例えば、日本語版 Windows であっても、形式が [スペイン語(スペイン)] が設定されている環境の Web ブラウザから FIM ポータルにアクセスした場合、FIM ポータルにスペイン語のリソースがインストールされていればブラウザ上の FIM ポータル表示はスペイン語になります。(図) 図 : FIM ポータルの URL はひとつだけで…

0

[WinRM] トラブルシュートはエラーとイベントビューアから確認を開始するべし

皆さんごきげんよう。ういこです。今日は「WinRM でトラブル発生したときは、表示されたエラーと、イベントビューアをじっくり見よう!」をお送りします。 WinRM というのは、"リモートコンピュータを管理を可能にする" 機構だと Web でご覧になった方もいらっしゃるかと思います。SOAP ベースとか何とか色々難しいことが良く書いてありますが、あの弊社の誇る素敵エバンジェリストの安納さんのブログにもございますように、要は HTTP (含む HTTPS) で WMI が使えちゃうぞーというステキテクノロジです。はて、WMI はリモート コンピュータを対象にしても使えるし、何をいまさらジロー?と思うそこのあなた!いえいえ、何がいいって、DCOM 使わなくていいんです。DCOM。 以前の記事にもちらっと触れたことがありますが、WMI は DCOM を基盤として動作しますので、動作前提として DCOM がきちんと構成されている必要があります。DCOM はさらに RPC を基盤として動作します。よって、WMI でリモート コンピュータを管理したいというときは、以下の三つが動作する必要があるのです。 ・RPC ・DCOM ・WMI 当然、そこにはリモートコンピュータへのアクセス権の他、RPC、DCOM が使うポートが外部から使える状態になっていなくてはいけません。 会社のイントラネットで使うならまだしも、例えばインターネット越しに操作してほしい!という端末で、RPC / DCOM などのポート解放は…怖いです。そうしたことに対する一つの答えとして、WinRM があります。WinRM は HTTP / HTTPS で WMI の動作が出来てしまうので、セキュリティ上の懸念が随分楽になります。 さて、そんないいことずくめに思える WinRM ですが、やっぱりなんか問題が起きた時は結構面倒です。 WMI もそうですが、使うに易しいからと言って、トラブルシュートや仕組みも易しいわけではないということを常に考える必要があります。ここを誤解すると、保守などのフェーズでとんでもないことになります。 …と、脅かしまくりですが、WinRM、どうも問題発生時の状況を把握するのが WMI と比べるとずっと楽になっているようです。 とにかく、失敗時にコンソールに出るメッセージも詳細だし、イベントログに出る情報が判りやすいこと。 WMI…

0

[ILM2007] インストール時のトラブル : “One or more the groups entered is invalid” エラーが発生したらあらかじめグループを手動で AD 上に用意しよう

皆さんごきげんよう、ういこです。 今日は久しぶりに ILM2007 のトラブルシュート初級編をお送りします。 【問題】 ILM 2007 をインストールしようとすると、グループの追加の際に以下のエラーが発生する。 One or more the groups entered is invalid. Group names cannot contain the characters ‘\/*:|<>+=;?*@’ except where the ‘\’ is user to separate the domain name from the group. Domain groups must already exist. Verify that each group name is correct, and then try again. MSI のログを取ってみても、はかばかしい情報がありません。以下は抜粋です。…

0

[ILM/FIM] Remote PowerShell/WinRM を用いて Exchange 2010 コマンドレットを投入にチャレンジする

いつもお世話になっております。ぴろとでございます。本日の記事ですが、PowerShell リモーティング 機能は、WinRM を用いてリモートコンピュータを操作できる機能を ILM/FIM の拡張ルールに実装してしまうという内容となります。主な用途としては、Exchange 2010 のコマンドレットを投入するといった部分になるかと思いますが、同期シナリオによっては必要な場面も出てくるかと思います。今回のサンプルでは、コンソールアプリケーションとなりますが C# で実装しますので、あまり変更を加えなくても、拡張ルールに反映することが可能となります! まずは、プログラムを作成するための前準備から行いましょう。 1) Windows SDK for Windows 7 をインストール ここについては、Tech Fielders のご紹介ページがよくできているので、こちらをご覧いただけますと幸いです。 http://www.microsoft.com/japan/powerpro/TF/column/mo_08_1.mspx 2) Visual Studio 2008 を起動し、C# のコンソール アプリケーションを選択します。   3) ソリューション エクスプローラーから、[参照設定] を右クリックし、[参照の追加] を選択します。 [参照] タブを選択し、 [C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0] フォルダを選び、 [System.Management.Automation.dll] を選択します。 4) プログラムのコーディングを行います。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Management.Automation;…

0

[S.DS] DNを指定してAD接続するとERROR_DS_LOCAL_ERROR(0x8007203B)発生

皆さんごきげんよう。ういこうです。最近秋の長雨が面倒くさい今日この頃ですが皆さんいかがお過ごしでしょうか。雨と言えば、息子(小2)が「雨は高速に走ることにより回避可能」という奇怪な持論を展開。そんなわけないだろう!と言ったものの、風速など条件によっては…とか思うんですが取りあえず今日は ERROR_DS_LOCAL_ERROR(0x8007203B) についてのお話です。 【問題の概要】 以下のように、DirectoryEntry のコンストラクタ第 2 引数のユーザ名に DN を指定し、AuthenticationTypes.Secure をセットしたプログラムを実行すると ERROR_DS_LOCAL_ERROR (0x8007203B) が発生することがあります。             DirectoryEntry dom = new DirectoryEntry(                 @"LDAP://uikou-dc1.uikoutest.microsoft.com/CN=Users,DC=uikoutest,DC=microsoft,DC=com",                 @"cn=Administrator,cn=Users,DC=uikoutest,DC=microsoft,DC=com", @"SQL4Ever!",             AuthenticationTypes.Secure);             System.Diagnostics.Debug.WriteLine(dom.Properties["cn"]); 【対処方法】 1. ユーザ名の指定方法は DN ではなく、ドメイン名\ユーザ名 (例 : uikoutest\administrator) 形式 あるいは UPN (administrator@uikoutest.microsoft.com) で実行する。 2. ユーザ名に DN を指定したい場合は、AuthenticationTypes.SecureSocketsLayer フラグを付与する。あるいは、AuthenticationTypes.None にする。 一般的に接続対象が Active Directory の場合は、Windows 認証が使用可能です。セキュリティ強度の観点から、接続先が AD の場合は…

0

[LDAP] LDAP v2 ではデータを Shift-JIS で扱うためサーバからの UTF-16 日本語データが文字化けする(Ver2.0)

皆さんごきげんよう。ういこうです。今日は先日作成したコンテンツを上げようと思ったときに公開ボタンを押すのを忘れていたコンテンツを発見しましたので、今日は豪華二本立てです。本当は九月分だったのに…。さて、今日はダブルバイトを使う民族がコンピュータ史上ずっと血涙を流し続ける問題…そう、「文字化け」についてお送りします。 【今日のお題】 LDAP サーバにアクセスしてダブルバイト文字を取ってこようとしたらなぜか文字化けが発生するときとしないときがある。 接続先も接続元もサーバから帰ってくるパケットデータも毎回バイナリレベルで同じなのになぜ故? 【詳細】 LDAP v3 ではなく、何らかの問題により、LDAP v2 で接続がなされた場合、クライアントサイドでは、クライアント端末内部でサーバから受け取ったデータを取り扱う際 ANSI (日本の場合は一般的に SHIFT-JIS) で文字を扱うことになります。しかしながら、実際にサーバから来る値は、UTF-16 となるため、ANSI:Shift-JIS – Unicode:UTF-16 の文字コード変換が発生し、結果的に文字化けが発生します。この際にネットワーク パケットのデータを見ても、文字化け発生時と正常時でサーバからのデータはバイナリ レベルで一切違いがありません。あくまでも問題は接続時に LDAP v2 としてバインドされることによって、クライアントがサーバから受け取ったデータを扱う際に余計な文字コード変換が発生することとなります。 こうした場合は、ネットワーク パケットでバインド状況を確認し、LDAP バージョンが v2 になっていないかを確かめてみてください。 現象発生時 : “Version  : 2” となっている 正常時 : “Version : 3” となっている 【まとめ】 ・サーバからのデータはネットワークパケットのバイナリレベルで正常時、異常時も変わらない ・LDAP v2 で接続されている ・LDAP v3 で接続されている場合は発生しない なかなか不思議な事象ですね。サーバからのデータ自体は変わりが無いのに、接続 LDAP プロトコルのバージョンが違うだけで文字化けするなんて…。ちなみに現象発生時は、正常時と比較して MultiByteToWideChar() がデータを扱うたびに呼ばれまくっていました。ANSI:Shift-JIS -…

0

dnsHostName属性が無いサーバがいる環境でS.DS.AD.Utils.Compare実行するとNullReferenceException

皆さんごきげんよう。ういこうです。某サイトで本ブログの人気記事ランキングを見たら上位 4 記事が全部 Windbg というあたりにアイデンティティクライシスを感じる今日この頃ですが皆様いかがお過ごしでしょうか。今日は ADSI の問題についてひとつ事例を御紹介します。 【今日のお題】 Windows NT 4 ドメインがひっそりいる環境で .NET Framework 3.5 までのバージョンの System.DirectoryServices.ActiveDirectory.DirectoryServer.GetDirectoryEntry() を実行された際に System.NullReferenceException が発生する場合があります。.NET Framework 4 では発生しません。 【問題の概要】 某雑誌の某漫画「女子だらけの人気絶好調のアイドルグループに男子一人がひそかにまぎれてドキッ★」のように、「Windows Server 2000 以降の OS のドメイン コントローラの中に一人だけまぎれた NT4 サーバちゃん」という環境など、dnsHostName 属性が無いドメイン コントローラがいる環境を対象とした  .NET Framework のバージョンが 3.5 までの環境上で上記メソッドを実行した場合に発生します。 — 例外発生時のコール スタック (マネージのスタック) 2010/9/26 08:06:23 System.NullReferenceException is System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。 場所 System.DirectoryServices.ActiveDirectory.Utils.Compare(String s1, String…

0