前回の記事のおわりにで記載していましたNTFSアクセス権の表示も追加したバージョンをご紹介します。
簡単にできると思ったのですが結構苦労しました。。。
はじめに
以下環境を想定しています。
OS:Windows Server 2008 R2
Windows 10やWindows Server 2012 R2以降でも問題なく動くと思います。
PowerShell
PowerShellを起動して、以下ソースをコピペしてください。
管理者共有を除く共有フォルダーの以下5つの情報を出力しています。
[共有名]
[フォルダーパス]
[注釈]
[共有アクセス権]
[NTFSアクセス権]
$Securities = $null
$Securities = Get-WmiObject -Class Win32_LogicalShareSecuritySetting
foreach ($Security in $Securities) {
echo "====================================================================="
$ShareName = $Security.Name
$s = Get-WmiObject -Class Win32_Share | where {$_.Name -like $Sharename}
echo "[共有名]"$s.Name `n
echo "[フォルダーパス]"$s.Path `n
echo "[注釈]"$s.Description `n
echo "[共有アクセス許可]"
$Dacls = $Security.GetSecurityDescriptor().Descriptor.DACL
foreach ($Dacl in $Dacls) {
$Domain = $Dacl.Trustee.Domain
$Name = $Dacl.Trustee.Name
$AccessMask = $Dacl.AccessMask
switch ($AccessMask) {
2032127 {$Perm = "フルコントロール"}
1245631 {$Perm = "変更"}
1179817 {$Perm = "読み取り"}
}
If($Name -ne "Everyone"){
$shareacl = $Domain + "\" + $Name + ":" + $Perm
echo $shareacl
}else{
$shareacl = $Name + ":" + $Perm
echo $shareacl
}
}
echo `n
$ntfs = (Get-Item $s.Path).GetAccessControl().Access | Select-Object IdentityReference, AccessControlType, FileSystemRights | Format-Table -HideTableHeaders
echo "[NTFSアクセス権]"$ntfs `n | Out-String -Stream | ?{$_ -ne ""}
}
リダイレクトで結果を書き出せるように「Write-Host」を「echo」に変えました
こちらの記事で紹介した空白行を削除するっていうのも使ってますのでご参考にどうぞ
またスクリプトをファイルにして実行した結果をリダイレクトするとテキストできるので加工しやすいと思います。
おわりに
NTFSアクセス権の部分は特殊なアクセス権だと数字ででたりするので、本当は共有アクセス許可みたいに変換かけないといけないし
共有アクセス許可もNTFSの表示みたいに「許可/拒否」ステータスを表示しないとダメなんですが
今回私が調査する環境では拒否や特殊なNTFSアクセス権つけてないし、だいたいつけていないところが多いので今はこれでOKです!(笑)
ということでこのシリーズは終了にしたいと思います。