◆ActiveDirectoryグループごとのメンバー一覧を表示するで作った以下のようなスクリプト。結果をちょっとテキストに落としておきましょうと、7行目にリダイレクトを追加した。D:\Desktop\PCList.txtてな感じ。すると、結果はだいぶ悲しい事になる。グループタイトルとメンバー一覧が画面とテキストに泣き別れ。Write-Hostだもんね。いう事でこれまであまり気にせずに使っていたWrite-Hostだが、なるべくWrite-Outputを使うべきなのだろうと反省。◆ActiveDirectory、名前で検索してユーザーアカウントを無効にするこんな感じで良いみたい。$falseあとは以下のあたりをインプットにして定期的に整理してあげればよいかな・・・。◆Webページをダウンロードする2以前、Webページをファイルにダウンロードしてみたが、ダウンロードした内容を整形してファイルに落としたかったので、一旦文字列に取得してみた。DownloadFileの代りにDownloadStringを使うだけ。思っていたのだが、結果を見てみると日本語が文字化けしている。Webページのソースを見るとUTF8のようなのでUnicode(UTF16)に変換してあげれば良いのだろうと思い、一生懸命取得した文字列に対してコードを変換を試みたが、なんともかんともうまくいかない。変換の仕方がおかしいのか・・・。何か勘違いをしているような・・・。あちこち彷徨い、やっとWebClientにはEncodingプロパティがあり、こいつにUTF8を指定してやると上手くいくことが判った。(DownloadStringの引数にも用意してくれれば良いのに・・・)このプロパティのデフォルトは「Default」なので基本的にはS-JIS。UTF8をS-JISとして読み込んだ文字列をUTF8だと思って変換しようとしていたので上手くいかなかったのだろう。ネットワーク◆ActiveDirectory、コンピュータ一覧を取得するGet-ADComputerコマンドレットでActiveDirectoryのコンピュータ一覧を取得してみた。デスクトップにCSVで出力するサンプル。default未使用のPCを調べたかったのでlastlogonプロパティを取得してみたが、lastlogon日付はFileTime型のようで変換が必要。ナノ秒間隔の数を表します。事なので、[DateTime]::FromFileTime([Int64]::Parse($_.lastLogon))を使って変換してあげると良いみたいです。◆ActiveDirectory、Search-ADAccountで追加のプロパティを取得するSearch-ADAccountで取得されるのは名前のとおりADAccountオブジェクト。必要なユーザー情報が全部揃っているとは限らない。足りないときはどうするか?とりあえずGet-ADUserで取ってきてみた。過去2年間ログオンしていないユーザーの名前とメールアドレスを表示するサンプル。ActiveDirectory◆ActiveDirectoryグループごとのメンバー一覧を表示する2前回、信頼関係を結んだ先のユーザーが上手く表示できなかったのでこれを対策すべく調べてみた。さしあたって、PowerGUIをだしているQUESTがActiveDirectoryモジュールの拡張版みたいなやつをだしていて、それを使うと解決できそうだ。普通であればサードパーティモジュールは使いたくない所だが、今回は所詮限られたサーバーに対して限られたクライアントから使うスクリプトなので良しとした。(どのみちサーバーに追加サービスを入れているし、クライアントにもAD用の管理モジュールを追加しているし。)モジュールは以下からダウンロード出来る。気付きづらいが、真ん中辺りにあるチェックボックスをクリックするとダウンロードの一覧が表示される。インストールしたら、以下のスナップインを追加してあげると、XXX-QADXXXXコマンドレットが使えるようになる。quest.activeroles.admanagement後は単純に対応するコマンドレットに置き換えれば良いのかと思ったが、若干パラメータの指定も違うようだ。詳しくは調べていないのだがとりあえず以下の様にして目的は達成できた。ActiveDirectory◆ActiveDirectoryグループごとのメンバー一覧を表示するグループの一覧を取得して、そのそれぞれに所属するユーザーを表示してみる。"A*"}の様にFilterパラメータを追加してあげれば良い。基本的にはこれでOKなのだが、ユーザーの中に信頼関係を結んだ先のユーザーが含まれていると上手く表示できないようだ。「ActiveDirectory管理センター」でも表示できていないのでPowershellのActiveDirectoryモジュールでは対応していない気がする。◆ActiveDirectoryグループを表示する(Get-ADGroup)ビルトインユーザーグループを表示した例。ogv結果はこんな感じになる。OUを指定して配下のグループ一覧を表示してみる。以下はOU-Rootという名前のOU配下のグループを表示した例。コマンドレット◆Windows2008ServerR2より前のサーバーをPowershellで管理するActiveDirectoryモジュールを使ってR2より前のサーバーを管理するためには「ActiveDirectory管理ゲートウエイサービス」をサーバーにインストールする必要がある。今回は2008Serverのドメインコントローラにインストールしてみた。パッチを読み落として半日ほどハマってしまった。管理する側はWindows7かR2Serverになるようだ。Windows7から管理する場合は管理用のモジュールを入れておく必要がある。◆ActiveDirectoryをWindows7から管理する(ユーザ管理)ちなみに、この環境を作るとR2から追加された機能である「ActiveDirectory管理センター」も使えるようになる。ドメインコントローラが複数台あるときも、どれか1台で管理ゲートウエイサービスが動いていれば使えるようだ。◆XMLファイルを扱うではXML型にキャストしたが、Select-Xmlコマンドレットを使っても良さそうだ。{$_.node."#text"}ノードのそれぞれのプロパティを参照すると以上の様な感じになると思うのだが、実際にはExpandPropertyを使って以下のように書くと簡単そうである。◆変数とパイプラインの両方にオブジェクトを送る(Tee-Object)変数やファイルに出力しつつ画面にも表示させたいなんて時にはTee-Objectコマンドレットを使う。csrssここで、Tee-Objectは変数pにプロセスオブジェクトを突っ込みつつパイプラインにそのままおくっている。後続のしょりが無いので画面に表示されているといった感じだ。以下の様にするとプロセスオブジェクトは画面に表示されなくなる。◆サービスのログオンアカウントを取得、抽出Get-Serviceコマンドレットではログオンアカウントが拾えないっぽい。そこで、WMIオブジェクト(Win32_Service)を使って取得する。startnamePS>抽出するにはFilterを掛けてあげれば良い。OK抽出文字列に\がある場合はエスケープが必要なようなので注意が必要だ。自己紹介minminnana地方でSE(プログラマ)をやって20年。気づけばいつの間にやら窓際人生。このまま余生を過ごすには若干心残りな2児と2匹(ウサギ、犬)の父。SEと言っても窓際なのでブログやWEBなどにはめっぽう疎い・・・。独学で.NET系を弄ってみるがCOBOLプログラマーにはだいぶ敷居が高い。