2017-04-13 8 views
0

を返します。私のハードドライブのアクセス権と、私は次のようなアプローチはかなり良い動作することが見つかりました:ここ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:

答えて

0

\これはおそらく、あなたが期待する以上に簡単です。これはプロバイダのためです。用語c:は、指定されたドライブでプロバイダが使用している現在のフォルダの場所を示します。 c:\は、そのドライブのルートフォルダを参照しています。

私はこれを別の方法で入れてみましょう。私がコンピュータを使い始めると、緑色と黒色以外の画面が表示され、私たちはフロッピーディスクをかなり使いました。フロッピーディスクからc:\ tempにいくつかのファイルをコピーしたい場合は、最初にハードドライブの一時フォルダに変更してから、フロッピードライブに変更して、ファイルをc:ドライブにコピーします。

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

これは、すべてのファイルをa:ドライブから、私がc:ドライブ上にあった最後のフォルダにコピーすることになります。

c:を参照しているときに、コマンドを実行している現在のフォルダを参照している可能性があります。

「アクセス」プロパティをただちに展開していないと、ベースオブジェクトがあなたに権利を見ているフォルダの名前を教えてくれたため、これははるかに明白になります。

+0

あなたは100%正しいです。私はDOSを使い、かなりの年の間ソフトウェアを開発しました。それ以前に聞いたことはありませんでした。C:実際にあなたのコマンドを実行していたフォルダへの参照です。ちょうどあなたのポイントを証明するために、私は "C:\ Users \ lopezcha"からコマンドを実行していたフォルダのアクセス権を取得し、 "C:"を使用していたのとまったく同じアクセス権を得ました。レッスンをありがとう、私はこの質問の答えとしてあなたの応答をマークしました。 よろしく –

関連する問題

 関連する問題