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


PowerShellのGet-Aclで角括弧[]を含むフォルダ・ファイルのアクセス許可情報する方法

Windows 7にデフォルトインストールされているPowerShellのバージョンは2.0になります。
このバージョンでは、Get-Aclに-LiteralPathオプションがなく、角括弧[]を含むファイルやフォルダのアクセス許可設定を取得することができません。
以下、PowerShell 2.0で角括弧を含むフォルダやファイルのアクセス許可設定情報の取得方法を記します。
(PowerShellのバージョンを上げれば、Get-Aclのオプションに-LiteralPathが使用できるようになります。
バージョンアップができるのであれば、バージョンアップをお勧めします。
会社の端末などで、PowerShellのバージョンアップができない場合など、本資料が役に立つと思います。)


追記

手元にあるマシン(Windows10)にインストールされている、PowerShell5.0のGet-Aclには、以下の通り-LiteralPathオプションが使用可能です。

PS E:\> Get-Help Get-Acl

名前
    Get-Acl

構文
<省略>
   Get-Acl [-LiteralPath <string[]>] [-Audit] [-AllCentralAccessPolicies] [-Filter <string>] [-Include <string[]>] [-E
   xclude <string[]>] [-UseTransaction]  [<CommonParameters>]

したがって、-LiteralPathオプションをサポートしているPowerShellバージョン(Get-Aclコマンドレット)であれば、以下に紹介するような記述は不要です。
直接角括弧を含むファイルやフォルダを指定することができます。

e.g.
Get-Acl -LiteralPath [test]

関連記事

PowerShell2.0で角括弧[]を含むフォルダ・ファイルのアクセス許可情報を取得してみる

以下のようにすれば、角括弧を含むフォルダやファイルのアクセス許可設定情報を取得することができます。

実行例を記すため、E:\に[test]フォルダを作成します。

PS E:\> mkdir [test]


    ディレクトリ: E:\


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2016/03/14     20:00                [test]

失敗する実行例(PowerShell2.0)

PowerShell2.0には、-LiteralPath がないので、普通にGet-Aclコマンドレットを実行してみます。

PS E:\> Get-Acl [test]
PS E:\> Get-Acl "[test]"
PS E:\> Get-Acl '[test]'

何も返却されません。

Windows10のPowerShell5.0で-LiteralPathをつけて実行(成功例)

PowerShell5.0には、LiteralPathオプションがあるので、このオプションを指定して実行すると成功します。

PS E:\> Get-Acl -LiteralPath [test]


    ディレクトリ: E:\


Path   Owner           Access
----   -----           ------
[test] TPE430\Sakura   Everyone Allow  FullControl

成功する実行例(PowerShell2.0)

Get-Itemコマンドレットに-LiteralPathオプションと[test]フォルダを指定します。
返却されたオブジェクトのGetAccessControl()メソッドを使用してアクセス許可設定を取得します。

PS E:\> $d = Get-Item -LiteralPath [test]
PS E:\> $d.GetAccessControl()

Path Owner           Access
---- -----           ------
     TPE430\Sakura   Everyone Allow  FullControl

一行で記述する場合は以下のようになります。

PS E:\> (Get-Item -LiteralPath [test]).GetAccessControl()

Path Owner           Access
---- -----           ------
     TPE430\Sakura   Everyone Allow  FullControl

注意点として、Pathが空になっています。
上記のGet-Aclの例では、Pathに値が入っています。

尚、Get-ChildItemコマンドレットで複数のファイルやディレクトリを取得し、foreachなどでループする場合は、"$_"のように"で囲めばよいでしょう。

以上、PowerShell2.0のGet-Aclコマンドレットに-LiteralPathオプションがないため、Get-ItemとGetAccessControl()メソッドを使用してアクセス許可設定を取得方法でした。
上記でも記しましたが、最近のPowerShellでは、Get-Aclコマンドレットに-LiteralPathオプションがあるので、そのままGet-Aclでアクセス許可設定を取得することができます。



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-04-01 (金) 11:44:40