を返します。私のハードドライブのアクセス権と、私は次のようなアプローチはかなり良い動作することが見つかりました:ここPowerShellのGetAccessControlは、私は、タイトルは少し誤解を招くかもしれない知っているが、ので、ここで私は行く、テキストの10行を入力しなくても良いことを書くことは不可能であった、一貫性のない結果
$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;
ドライブ名パラメータとして$のdrive.Nameを通過させることによって、
((Get-Item $drive.Name).GetAccessControl('Access')).Access}
を各ドライブに与えられたACL権限を印刷
今日、私はかなりファンキーなものに気付きました...私が前に述べたコマンドを実行すると、このような6つの異なるACL項目を持つエントリが得られます:
PS C:\Users\lopezcha> $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}
C:
FileSystemRights : Modify, Synchronize
AccessControlType : Allow
IdentityReference : NT AUTHORITY\Authenticated Users
IsInherited : False
InheritanceFlags : ContainerInherit, ObjectInherit
PropagationFlags : InheritOnly
FileSystemRights : AppendData, Synchronize
AccessControlType : Allow
IdentityReference : NT AUTHORITY\Authenticated Users
IsInherited : False
InheritanceFlags : None
PropagationFlags : None
FileSystemRights : ReadAndExecute, Synchronize
AccessControlType : Allow
IdentityReference : NT AUTHORITY\Authenticated Users
IsInherited : False
InheritanceFlags : ContainerInherit, ObjectInherit
PropagationFlags : None
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 : ReadAndExecute, Synchronize
AccessControlType : Allow
IdentityReference : BUILTIN\Users
IsInherited : False
InheritanceFlags : ContainerInherit, ObjectInherit
PropagationFlags : None
私が代わりに$ 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の項目を取得誰もがこの現象が発生した理由として手掛かりを持っています?
編集:私は "C:"をドライブ名として使用すると3つのACLを取得しますが、 "C:\"を使用すると6つのACLが得られます。これは部分的に私の質問に答えるが、私は依然として許可の量の違いが返ってきた理由を知りたい。
$ drive.DriveLetter = C: $ drive.Name = C:
あなたは100%正しいです。私はDOSを使い、かなりの年の間ソフトウェアを開発しました。それ以前に聞いたことはありませんでした。C:実際にあなたのコマンドを実行していたフォルダへの参照です。ちょうどあなたのポイントを証明するために、私は "C:\ Users \ lopezcha"からコマンドを実行していたフォルダのアクセス権を取得し、 "C:"を使用していたのとまったく同じアクセス権を得ました。レッスンをありがとう、私はこの質問の答えとしてあなたの応答をマークしました。 よろしく –