2017-04-13 3 views
0

내가 제목이 약간 오해의 소지가있을 수 있습니다 알고 일치하지 않는 결과를 반환하지만 텍스트 10 줄을 입력 할 필요없이 더 잘 쓸 불가능했다 여기PowerShell을 GetAccessControl는

$drives = get-wmiobject win32_volume | ? { ($_.DriveType -eq 3) -and ($_.DriveLetter -ne $null) }; ForEach($drive in $drives) {$drive.DriveLetter; ((Get-Item $drive.Name).GetAccessControl('Access')).Access} 

내가 스크립트의 각 부분이 무엇 설명 : 내 하드 드라이브의 권한과 나는 다음과 같은 접근 방식은 꽤 잘 작동하는지 발견

스토어 모든 하드 드라이브 항목을 $ 드라이브로

$drives = get-wmiobject win32_volume | ? { ($_.DriveType -eq 3) -and 
($_.DriveLetter -ne $null) } 

각 하드 드라이브의 예를 통해 사이클 및

ForEach($drive in $drives) {$drive.DriveLetter; 

인쇄가 ACL 권한을 각 드라이브에 주어진 하드 드라이브의 이름을 인쇄, 드라이브 이름 매개 변수

((Get-Item $drive.Name).GetAccessControl('Access')).Access} 
로 $ drive.Name을 전달하여

오늘 나는 꽤 펑키 한 것으로 나타났습니다. 전에 언급 한 명령을 실행하면 다음과 같은 6 가지 ACL 항목이 있습니다 :

내가 대신 $의 drive.Letter를 사용하여 텍스트로 직접 드라이브 이름을 전달하면

그러나, 내가 대신 6

PS C:\Users\lopezcha> ((Get-Item 'C:').GetAccessControl('Access')).Access 


FileSystemRights : FullControl 
AccessControlType : Allow 
IdentityReference : NT AUTHORITY\SYSTEM 
IsInherited  : False 
InheritanceFlags : ContainerInherit, ObjectInherit 
PropagationFlags : None 

FileSystemRights : FullControl 
AccessControlType : Allow 
IdentityReference : BUILTIN\Administrators 
IsInherited  : False 
InheritanceFlags : ContainerInherit, ObjectInherit 
PropagationFlags : None 

FileSystemRights : FullControl 
AccessControlType : Allow 
IdentityReference : AMERICAS\lopezcha 
IsInherited  : False 
InheritanceFlags : ContainerInherit, ObjectInherit 
PropagationFlags : None 

의 3 ACL 항목은 사람이 문제가 발생하는 이유에 대한 단서가 있습니까 얻을 ?

EDIT : 흥미로운 것을 발견했습니다 ... 드라이브 이름에 "C :"를 사용하면 3 개의 ACL이 다시 생기지 만 "C : \"를 사용하면 6 개의 ACL이 생깁니다. 이 부분적으로 내 질문에 대답하지만 여전히 사용 권한의 차이가 반환 된 이유를 알고 싶습니다.

$ drive.DriveLetter = C : $ drive.Name = C :

답변

0

\이 아마도 당신이 기대하는 것보다 더 간단합니다. 이것은 공급자 때문입니다. c:이라는 용어는 공급자가 지정된 드라이브에서 사용중인 현재 폴더 위치를 나타냅니다. c:\은 해당 드라이브의 루트 폴더를 나타냅니다.

더 나은 참조를 위해 다른 방법을 사용하겠습니다. 뒤로 컴퓨터를 사용하기 시작했을 때, 그리고 녹색과 검정색이 아닌 화면은 플로피 디스크를 꽤 많이 사용했습니다. 이제 플로피 디스크의 일부 파일을 c : \ temp에 복사하려면 먼저 하드 드라이브의 임시 폴더로 변경 한 다음 플로피 드라이브로 변경하고 파일을 c : 드라이브에 복사하십시오 . 다음과 같이 보일 것입니다 :

C:\> cd temp 
C:\temp> cd a: 
A:\> copy *.* c: 

그러면 모든 파일이 a : 드라이브에서 내가 c : 드라이브에 있던 마지막 폴더로 복사됩니다.

우리가 c:을 참조 할 때 명령을 실행중인 현재 폴더를 (거의 확실하게)보고있을 때와 동일합니다.

'액세스'속성을 바로 확장하지 않은 경우 기본 개체가 권한을보고있는 폴더의 이름을 말했기 때문에 훨씬 더 분명 해집니다.

+0

당신은 100 % 정확합니다. 나는 도스를 사용하여 꽤 오랫동안 소프트웨어를 개발했으며, 그 전에는 C라는 사실을 들어 보지 못했습니다. 실제로는 명령을 실행하는 폴더에 대한 참조였습니다. 요점을 증명하기 위해 "C : \ Users \ lopezcha"에서 명령을 실행하고있는 폴더의 사용 권한을 테스트하고 "C :"를 사용하는 것과 동일한 권한을 얻었습니다. 교훈을 가져 주셔서 감사합니다. 귀하의 답변을이 질문의 답으로 표시했습니다. 감사합니다. –