ファイル共有のアクセス許可を取得する
おなかがすいた。
Windows7に入ってるレベルのPowerShellでファイル共有のアクセス許可を取得してくるスクリプト。
ちょっときたないけどメモに残しておこうと思います。
これ、NTFSアクセス許可ではなく"ファイル共有アクセス許可"を取りに行く目的のスクリプトで、あまりネットで事例を見かけなくて苦労した。
ポイントは"Get-WmiObject win32_LogicalShareSecuritySetting"でファイル共有のセキュリティ設定をとってくるところ。
LogicalShareSecuritySettingで取れない管理共有とかは結果に出てこない。
$shares = Get-WmiObject win32_Share $result= @() foreach ($Share in $Shares){ $ShareSecuritySetting = Get-WmiObject win32_LogicalShareSecuritySetting ` -Filter ("Name='"+$Share.Name+"'") if(!($ShareSecuritySetting)){ continue } $acls = $ShareSecuritySetting.GetSecurityDescriptor().Descriptor.DACL foreach($ACL in $ACLS){ $Obj = @{} $obj["共有名"] = $Share.Name $obj["パス"] = $Share.Path $User = $ACL.Trustee.Name if(!($user)){$user = $ACL.Trustee.SID} $Domain = $ACL.Trustee.Domain switch($ACL.AccessMask) { 2032127 {$Perm = "Full Control"} 1245631 {$Perm = "Change"} 1179817 {$Perm = "Read"} } $Obj["アカウント"] = "$Domain\$user" $Obj["パーミッション"] = "$Perm" $result += New-Object PSObject -Property $Obj } } $result | Format-List
実行するとこんな感じ。
(前略) アカウント : lasty\bounoki パーミッション : Full Control 共有名 : test_share1 パス : R:\test_share1 アカウント : lasty\bounoki パーミッション : Full Control 共有名 : test_share2 パス : R:\test_share2 アカウント : BUILTIN\Administrators パーミッション : Full Control 共有名 : test_share2 パス : R:\test_share2 アカウント : lasty\motie パーミッション : Change 共有名 : test_share2 パス : R:\test_share2
参考にしたのはこちらのサイト。
http://www.waynezim.com/2014/03/powershell-file-sharing-permissions-report/