2011-02-08 11 views
33

Cuando corro de Get-ChildItem en un directorio (o cualquier cmdlet que devuelve los elementos del sistema de archivos) PowerShell, se muestra una columna llamada Mode, así:¿Cuáles son los posibles valores de 'Modo' devueltos por el cmdlet Get-ChildItem de PowerShell?

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 

Busqué y busqué Google y mi libro PowerShell local, pero No pude encontrar ninguna documentación sobre el significado de la columna Mode.

¿Cuáles son los valores posibles de la columna Modo y qué significa cada una?

Respuesta

38

Tenga en cuenta que el modo que ves es sólo una representación de cadena de un campo de bits enum que se esconde en la propiedad Attributes. Usted puede averiguar lo que significan las letras individuales simplemente mostrando tanto al lado del otro:

PS> gci|select mode,attributes -u 

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

En cualquier caso, la lista completa es:

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

PowerShell v5 tiene el sexto punto 'l' para el enlace (' ReparsePoint'). – PetSerAl

+0

@PetSerAl: Ah, bien. Tomó el tiempo suficiente (el valor del atributo estaba allí antes, creo que la cadena con los guiones se construyó solo para mostrar desde el archivo XML de tipos. – Joey

+0

Get-ChildItem en mi directorio de usuario reveló una gran cantidad de elementos que no puedo ver en Explorador de archivos a pesar de tener activados los "Elementos ocultos". Parece que la diferencia entre ellos y los elementos ocultos que veo como AppData es que tienen ese atributo del sistema. ¿Hay alguna forma de que pueda verlos en el Explorador de archivos? –

6

en mi humilde opinión, el más explicativo es el propio código:

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

¿Eh? ¿De dónde sacaste el código? –

+1

@splattered: reflector de los ensamblajes de PowerShell, supongo. – Joey

+0

Sí, genial, dulce Reflector. – stej

2

Estos son todo el archivo de nombres de atributos y significados allí se pueden encontrar here:

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

llamar a estos "atributos" es un nombre específico de Windows y se rompe de la tradición * nix de llamar a este "modo". Es decir. man chmod para "modo de cambio".

Parece que el diseño de la API de Windows se dobla (o acepta) hacia el término más popular en la industria en general: "Modo".

+1 de mí.

Cuestiones relacionadas