PowerShellでフォルダアクセス権をCSVに出力する
こんにちは、ICTLINKの笹岡です。月日が経つのは早いもので入社してから早くも半年が経ちました。相も変わらず分からない用語が舞い込み悪戦苦闘する日々が続いております。
先日、今まで全く触れてこなかったPowerShellについて触れてみようと思う機会があったので今回はPowerShellを使ってフォルダについているアクセス権をCSVに出力する手順を記事にしたいと思います。
Cドライブ直下に[テスト用フォルダ]を用意しました。フォルダ構成は以下の画像の通り。こちらのフォルダの配下にあるアクセス権情報を出力していきたいと思います。
そして、もう一つ準備として出力先となるCSVも必要になるため、Cドライブ直下に用意しました。
PowerShellを対象フォルダのパスにいる状態で起動させるため、そのフォルダを[Shift+右クリック]して[PowerShell ウィンドウをここで開く]からPowerShellを起動します。
対象とするフォルダのパスに移動した状態で、PowerShellが起動しました。
以下のコマンドを入力し、実行します。※出力先となるCSVのパスは各々変更してください。
PS C:\テスト用フォルダ> Get-ChildItem -Recurse | where-object {$_.mode -match "d"} | Get-Acl | Select-object Path,PSChildName,AccessToString |Export-Csv C:\list.csv -encoding Default
CSVにアクセス権情報が出力されました。
以下に今回のコマンドについて記載します。
■Get-ChildItem -Recurse
フォルダの情報が取得できますが、Get-ChildItemのみだとそのフォルダの情報しか取得できません。-Recurseを加えるとサブフォルダの配下の情報も取得できるようになります。
■where-object {$_.mode -match "d"}
出力対象をフォルダのみにします。
where-objectは比較演算子で条件にあった情報を取り出せるコマンドレットです。
$_でGet-ChildItemで取得した情報もってきて.mode -match "d"で属性をディレクトリに指定し比較することができ一致する情報を取得します。
■Get-Acl
アクセス権を取得できる情報の一覧に加えます。
■Select-object Path,PSChildName,AccessToString,AccessToString
Select-objectで取得する情報を指定できます。何も指定しないと多数の情報を取得してしまうため以下の3つを指定しました。
Path=パス情報
PSChildName=フォルダ名
AccessToString=アクセス権情報(Get-Aclにより追加されたもの)
■Export-Csv C:\list.csv -encoding Default
CSVに出力します。-encoding Defaultで日本語による文字化けを防ぎます。
今回の記事は以上となります。出力した情報でパスと一緒にMicrosoft.PowerShell.Core\FileSystem::も表示されており消す方法がよく分からず。。トントン拍子にはいかないものです。千里の道も一歩から、地道に精進して頑張りたいと思います。ここまでお読みいただきありがとうございました!