検索エンジン/リンクからいらした方へ
探し物が見つからないときは、ページ右のサイドバーにある「検索」ボックスをご利用ください。
最新の情報を見たい方は「最新の日記」をクリックすると、最新の更新日まで日記が移動します。
コメント・足跡・ネタ投稿 歓迎
現在、どなたでも日記にコメントを書くことが出来ます。
日付毎に「コメントを書く」が用意されていますので、書いてもらうと私が嬉しいです(笑
コメントの内容によって、私の判断で削除する場合もあります。
はてな関連リンク
はてな障害情報
ipv6 test
2003年10月24日~2004年2月28日 約14500カウント(だったはず^^;)
2004年2月29日~ (忍者カウンター)
(FC2カウンター/テスト中)
最新の日記情報はこちらへ

【Script】AD/File/Reg のアクセス権リストは Get-ACL にお任せ〜その1(フィールドSEあがりの安納です さん)

フォルダーとかファイルのアクセス権を一括で調べるツールとかを無料で使えるものを
探していると、ツールとして一番有名なのは「フォルダ-アクセス権マップ」だと思います。


フォルダ−アクセス権マップ
http://www.visio.jp/dl/accessright/accessright.html


このツールは結構いいんですが、今回はツール系を一切入れてはいけない環境なので
どうしようか考えないといけません。
標準コマンドとして「cacls」を使う手はありますが、サーバ台数が多くなったりすると
サーバに都度、ログインしないといけなかったりするので面倒かなと。


色々と調べていると PowerShell で使えるようになった「Get-ACL」を使う方法があるようです。
PowerShell ならネットワーク越しでも、権限さえあれば クライアントPC から打ち込めるので
サーバコンソールから実行しなくてもいいですし。
そんなわけで、上記の Technet Blog を参考に軽く実行文を作ってみました。

get-childitem -Path [\\Network] -Force –recurse | where { $_.mode -match "d" } | get-acl | Select-object @{Label="Path";Expression={Convert-Path $_.Path}}, Owner, AccessToString | export-csv "C:\output.csv" -encoding unicode



get-childitem は指定した場所のフォルダ・ファイルを表示するコマンドです。Dirコマンド高機能版。
-Force で隠し系のものを全表示、–Recurse でサブフォルダを含めたものを表示
where { $_.mode -match "d" } で、get-childitem で表示された「フォルダ」「ファイル」を
「フォルダ」に限定して出力しています。今回はファイル単位のアクセス権までは対象としてないので。
「ファイル単位」まで必要な場合は、where ごと削除します。


そして、get-childitem から渡されたフォルダ一覧を get-acl で解析します。
Select-object で表示させるオブジェクトを指定しています。
「フォルダパス」「フォルダのオーナー名」「アクセス権」となっています。


最後に CSV で出力させます。カンマ区切りのファイルとなっています。
-encoding を指定しないと、フォルダに日本語が含まれている場合に化けるので付けます。
途中で中断した場合でも、途中まで実行した結果は残ります。


私ではうまくフィルタ出来なかったんですが、下記のコマンドを併用すると
特定のアクセス権を持つ人のみ、抽出することができるそうです。


where {$_.AccessToString -contains "Domain\Group"}


where で使える演算子は下記の通り

-eq 等しい
-ne 等しくない
-gt より大きい
-ge 以上
-lt より小さい
-le 以下
-like ワイルドカードによる比較
-notlike ワイルドカードによる比較
-contains 含む
-notcontains 含まない
-match 正規表現による比較
-nomatch 正規表現による比較
-and 論理積
-or 論理和
-not 論理否定
! 論理否定



1点問題があって、get-childitem -Path で含まれるパス指定に
日本語を指定すると検索しない問題があります。
出力に日本語が含まれてても問題ないんですけどねぇ。。。
これは私も困りまして、色々と調べたんですが何処にも記載がないんですよね・・・
そこでちょっと閃いて、下記のよう実行したらうまくいった。

C:\> powershell
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.


PS C:\>CD \\TEST01\テスト01


PS Microsoft.PowerShell.Core\FileSystem::\\TEST01\テスト01>
get-childitem * -Force –recurse | where { $_.mode -match "d" } | get-acl | Select-object @{Label="Path";Expression={Convert-Path $_.Path}}, Owner, AccessToString | export-csv "C:\output.csv" -encoding unicode


PS Microsoft.PowerShell.Core\FileSystem::\\TEST01\テスト01>



また、出力された CSV ファイルをそのままExcelで開くと
形式が崩れて表示されます。これは Unicode のせいです。
なので1度、メモ帳で CSV を開き「ANSI」の文字コードで保存します。
保存後、Excel で開くと綺麗に見えると思います。


PowerShell は便利でいいですよねぇ〜
ファルダ・ファイル アクセス権一覧表示/出力ツールも無料でいいのが欲しいところ。