액세스 마스크를 사용하여 Get-ACL Access Control Entries와 표준 Windows 권한을 일치시키는 PowerShell script이 있습니다. 이상하게도, "ReadAndExecute, Synchronize"와 같은 ACE는 "FullControl"의 허가를 얻는 것처럼 보입니다. 다음은 스크립트입니다.Odd PowerShell Get-ACL 권한 변환
#Match current ACE permissions to regular permissions via access mask comparison (binary and/-band)
$acl = Get-Acl "C:\Program Files (x86)"
$accesses = $acl.Access
#Enumerate current directory's access rights
foreach ($access in $accesses) {
$Enumeration = $access.FileSystemRights
$keys = @()
[System.Enum]::GetValues($Enumeration.GetType()) | Where-Object { $Enumeration -band $_; write-host ($Enumeration -band $_) -ForegroundColor Red} | % {write-host -ForegroundColor Green $_;} | Select-Object -Unique | ForEach-Object { write-host -ForegroundColor Cyan $_; $keys += $_ }
$keys
}
아마도 이러한 액세스 제어 항목을 적절히 번역하는 방법을 완전히 이해하지 못했습니다. "수정, 동기화"가 어떻게 든 "FullControl"의 권한 설정으로 끝나는 것은 이상하게 보입니다.
또한이 스크립트가 사용자 시스템에서 실행되는 경우 현재보고있는 다소 복잡한 디버그 형식을 알 수 있습니다. "0"은 바이너리 "and"에서 단순히 일치하지 않는 결과입니다. 녹색 값은 지정된 Windows 권한 (예상대로)에 대해 일치하는 액세스 마스크가있는 ACE의 결과 Windows 권한입니다.
나는이 질문으로 무엇이든 반복하지 않기를 바랍니다. 나는 파헤 치고 나의 현재의 이해 수준에서 이것을 나에게 설명하는 답을 찾지 못했다.
'$ Enumeration -band $ _;'($ Enumeration -band $ _) -eq $ _;'줄에
-eq $_
이 추가됩니다. – PetSerAl@PetSerAl 감사합니다! 나는 아직도 이것에 아주 새롭다; 바이너리의 결과와 전달 된 원래 유형 세트를 비교하면 무엇을 얻을 수 있습니까? 도움을 감사하십시오 – Shrout1
@PetSerAl 좋아요. 알 겠어요. :) 전달되는 마스크와 평가되는 마스크 사이에 이상한 충돌이 일어나고 있습니다. 바이너리와 Full Control, Read와 Execute는 Read와 Execute와 동일하게 발생합니다. 이상한 우연의 충돌. – Shrout1