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に関する記事を拝見させていただきました。
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