【PowerShell】フォルダアクセス権一覧を出力する方法

Windows7以降のOSには標準で搭載されているコマンドプロンプトに代わって開発された拡張可能なコマンドラインインターフェース (CLI) シェルおよびスクリプト言語・・・らしいです。

これが何かとサーバ管理で役に立つとのことで、まずはアクセス権一覧を出力するコマンドについて調べてみました。

備忘録的なブログです。

スポンサーリンク
レクタングル大

これが目的のコマンドです。

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

これをPowerShellの画面で実行するとCドライブにoutput.csvと言う名前でアクセス権情報が出力されますよ。

あとは簡単に説明をば・・・

Get-ChildItem

コマンドプロンプトで言うところのdirコマンドにあたる。

-Force・・・隠しフォルダ、隠しファイルも表示対象にする。

-Recurse・・・サブフォルダも表示対象にする。

|where { $_.mode -match “d” }・・・ディレクトリのみを表示対象にする。

Get-Acl

アクセス権を出力するコマンド。

Select-object・・・出力するオブジェクトを選択する。

Export-Csv

データをCSVに保存するコマンド。

出力結果が文字化けする場合は「-encoding」オプションを利用すると良い。

|(パイプ)

PowerShellではとても大切。

「|」の文字で処理を連結することができる。

今回のコマンドで言うと・・・

ディレクトリ情報を調べた(Get-ChildItem)内容を元にアクセス権を取得(Get-Acl)し、それをCSVに保存(Export-Csv)する。

ということを1文で行うことができる。うーん便利。

スポンサーリンク
レクタングル大
レクタングル大

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

『【PowerShell】フォルダアクセス権一覧を出力する方法』へのコメント

  1. 名前:スクリプト素人マン 投稿日:2018/02/11(日) 16:47:26 ID:60cad1efc 返信

    はじめまして。PowerShellに関する記事を拝見させていただきました。
    PowerShellにて指定したフォルダ配下の全てのフォルダとファイルのACL情報を出力したく、コマンドを参考にさせていただきました。何度かテストしてACL情報が出力されているようでしたが、どうも [ の文字がフォルダ名またはファイル名に含まれているパスはエラーとなってしまうようで困っております。Webで情報収集し何度かいじったりしてみましたが、どうしてもエラーになるようです。何らからの解決方法はあるのでしょうか? 一応実行したコマンドとエラーを以下の記載致します。

    ※実行コマンド
    Get-ChildItem D:\Test_Data -Force -Recurse | Get-Acl | Select-object @{Label=”Path”;Expression={Convert-Path $_.Path}}, Owner, AccessToString |Export-Csv D:\tools\ACL_Info.log -encoding Default

    ※以下エラー
    System.Management.Automation.WildcardPatternException: 指定されたワイルドカード文字パターンは無効です: [テストケース]テスト用エクセルファイル.xls
    場所 System.Management.Automation.WildcardPatternParser.Parse(WildcardPattern pattern, WildcardPatternParser parser)
    場所 System.Management.Automation.WildcardPatternMatcher.MyWildcardPatternParser.Parse(WildcardPattern pattern, CharacterNormalizer characterNormalizer)
    場所 System.Management.Automation.WildcardPatternMatcher..ctor(WildcardPattern wildcardPattern)
    場所 System.Management.Automation.WildcardPattern.Init()
    場所 System.Management.Automation.WildcardPattern.IsMatch(String input)
    場所 System.Management.Automation.LocationGlobber.IsChildNameAMatch(PSObject childObject, WildcardPattern stringMatcher, Collection`1 includeMatcher, Collection`1 excludeMatcher, String& childName)
    場所 System.Management.Automation.LocationGlobber.GenerateNewPathsWithGlobLeaf(List`1 currentDirs, String leafElement, Boolean isLastLeaf, ContainerCmdletProvider provider, CmdletProviderContext context)
    場所 System.Management.Automation.LocationGlobber.ExpandGlobPath(String path, Boolean allowNonexistingPaths, ContainerCmdletProvider provider, CmdletProviderContext context)
    場所 System.Management.Automation.LocationGlobber.ResolveProviderPathFromProviderPath(String providerPath, String providerId, Boolean allowNonexistingPaths, CmdletProviderContext context, CmdletProvider& providerInstance)
    場所 System.Management.Automation.LocationGlobber.ResolvePSPathFromProviderPath(String path, CmdletProviderContext context, Boolean allowNonexistingPaths, Boolean isProviderDirectPath, Boolean isProviderQualifiedPath, CmdletProvider& providerInstance)
    場所 System.Management.Automation.LocationGlobber.GetGlobbedMonadPathsFromMonadPath(String path, Boolean allowNonexistingPaths, CmdletProviderContext context, CmdletProvider& providerInstance)
    場所 System.Management.Automation.LocationGlobber.GetGlobbedProviderPathsFromMonadPath(String path, Boolean allowNonexistingPaths, CmdletProviderContext context, ProviderInfo& provider, CmdletProvider& providerInstance)
    場所 Microsoft.PowerShell.Commands.ConvertPathCommand.ProcessRecord()
    場所 System.Management.Automation.CommandProcessor.ProcessRecord()

    TargetObject :
    CategoryInfo : NotSpecified: (:) [Convert-Path], WildcardPatternException
    FullyQualifiedErrorId : RuntimeException,Microsoft.PowerShell.Commands.ConvertPathCommand
    ErrorDetails :
    InvocationInfo : System.Management.Automation.InvocationInfo

  2. 名前:スクリプト素人マン 投稿日:2018/02/11(日) 19:47:41 ID:60cad1efc 返信

    自力で解決できました…
    長文のコメント入れてしまい、申し訳ありません。

    以下のコマンドでエラーがでなくなり、[ を含まむパスも情報が出力できるようになりまいした。私のほうで、-literalpathを置く位置が分かっていなかったようです。

    Get-ChildItem D:\Test_Data -Force -Recurse | Get-Acl | Select-object @{Label=”Path”;Expression={Convert-Path -literalpath $_.Path}}, Owner, AccessToString |Export-Csv D:\tools\ACL_Info.log -encoding Default

    • 名前:バタチキ 投稿日:2018/02/13(火) 22:56:47 ID:d61298dd6 返信

      >スクリプト素人マンさん

      コメント遅れてすみませんでした。
      自己解決できたようで何よりです!