2011-02-08 7 views
33

Kiedy uruchomić PowerShell na Get-ChildItem w katalogu (lub apletu polecenia, które zwraca pozycje File System), to pokazuje kolumnę o nazwie Mode coś takiego:Jakie są możliwe wartości "Mode" zwracane przez cmdlet programu PowerShell Get-ChildItem?

Directory: C:\MyDirectory 


Mode    LastWriteTime  Length Name 
----    -------------  ------ ---- 
d----   2/8/2011 10:55 AM   Directory1 
d----   2/8/2011 10:54 AM   Directory2 
d----   2/8/2011 10:54 AM   Directory3 
-ar--   2/8/2011 10:54 AM  454 File1.txt 
-ar--   2/8/2011 10:54 AM  4342 File2.txt 

Szukałem i szukał Google i moją lokalną książkę PowerShell, ale Nie mogłem znaleźć żadnej dokumentacji dotyczącej znaczenia kolumny Mode.

Jakie są możliwe wartości kolumny Tryb i co oznacza każdy z nich?

Odpowiedz

38

Zauważ, że tryb widać to tylko ciąg znaków reprezentujący bitfield enum która ukrywa w nieruchomości Attributes. Można dowiedzieć się, co poszczególne litery oznaczają po prostu pokazując zarówno obok siebie:

PS> gci|select mode,attributes -u 

Mode    Attributes 
----    ---------- 
d-----    Directory 
d-r---  ReadOnly, Directory 
d----l Directory, ReparsePoint 
-a----     Archive 

W każdym razie, pełna lista to:

d - Directory 
a - Archive 
r - Read-only 
h - Hidden 
s - System 
l - Reparse point, symlink, etc. 
+1

PowerShell v5 ma szósty spot 'l' dla łącza (' ReparsePoint'). – PetSerAl

+0

@PetSerAl: Oh, miłe. Zająłem się nimi wystarczająco długo (wartość atrybutu była tam wcześniej, myślę, że ciąg znaków z myślnikami został skonstruowany tylko dla wyświetlania z pliku XML typów.) – Joey

+0

Get-ChildItem w moim katalogu użytkownika ujawniło wiele pozycji, których nie widzę w Eksplorator plików pomimo włączenia "Ukrytych przedmiotów" Wydaje się, że różnica między nimi a ukrytymi przedmiotami, które widzę tak jak AppData, polega na tym, że mają ten atrybut systemowy. Czy istnieje sposób, w jaki mogę je zobaczyć w Eksploratorze plików? –

6

IMHO, najbardziej objaśniający jest kod sama:

if (instance == null) 
{ 
    return string.Empty; 
} 
FileSystemInfo baseObject = (FileSystemInfo) instance.BaseObject; 
if (baseObject == null) 
{ 
    return string.Empty; 
} 
string str = ""; 
if ((baseObject.Attributes & FileAttributes.Directory) == FileAttributes.Directory) 
{ 
    str = str + "d"; 
} 
else 
{ 
    str = str + "-"; 
} 
if ((baseObject.Attributes & FileAttributes.Archive) == FileAttributes.Archive) 
{ 
    str = str + "a"; 
} 
else 
{ 
    str = str + "-"; 
} 
if ((baseObject.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) 
{ 
    str = str + "r"; 
} 
else 
{ 
    str = str + "-"; 
} 
if ((baseObject.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden) 
{ 
    str = str + "h"; 
} 
else 
{ 
    str = str + "-"; 
} 
if ((baseObject.Attributes & FileAttributes.System) == FileAttributes.System) 
{ 
    return (str + "s"); 
} 
return (str + "-"); 
+4

Huh? Skąd masz kod? –

+1

@splattered: Reflector ze złożeń PowerShella, tak myślę. – Joey

+0

Tak, świetny, słodki Reflektor. – stej

2

wszystkie atrybutami plików imiona i tam znaczeń można znaleźć here:

PS C:\> [enum]::GetNames("system.io.fileattributes") 
ReadOnly 
Hidden 
System 
Directory 
Archive 
Device 
Normal 
Temporary 
SparseFile 
ReparsePoint 
Compressed 
Offline 
NotContentIndexed 
Encrypted 
0

Połączenia te "atrybuty" jest nazwą specyficzną dla systemu Windows i zrywa z * nix tradycją wywoływania tego "trybu". To znaczy. man chmod dla "trybu zmiany".

Wygląda na to, że projekt interfejsu Windows API zgina się (lub akceptuje) w kierunku bardziej popularnego terminu w szerszej branży: "Tryb".

+1 ode mnie.

Powiązane problemy