2009-07-17 8 views
17

En PowerShell puede usar [xml] para significar [System.Xml.XmlDocument]. ¿Sabes dónde puedo encontrar una lista de estos tipos de aceleradores?¿Dónde puedo encontrar una lista de aceleradores de tipo .NET Powershell?

¿Estos aceleradores son específicos de PowerShell o .NET?

+2

estos no son estrictamente alias, sino espacios de nombres implícitos.Buena pregunta sin embargo. –

+3

He reemplazado el uso de la palabra alias con los aceleradores de tipo. En PowerShell, los alias son un animal completamente diferente; son accesos directos para comandos, funciones y scripts. –

+1

@Steven: Probablemente una buena llamada; sin embargo, * Type name aliases * también es un término apropiado en mi opinión. – Noldorin

Respuesta

7

Consulte la sección titulada Alias ​​de nombre de tipo en this blog post. Creo que esta es una lista completa de los alias.

 
PowerShell Type Alias Corresponding .NET Type 
[int]     System.Int32 
[int[]]     System.Int32[] 
[long]     System.Int64 
[long[]]    System.Int64[] 
[string]    System.String 
[string[]]    System.String[] 
[char]     System.Char 
[char[]]    System.Char[] 
[bool]     System.Boolean 
[bool[]]    System.Boolean[] 
[byte]     System.Byte 
[byte[]]    System.Byte[] 
[double]    System.Double 
[double[]]    System.Double[] 
[decimal]    System.Decimal 
[decimal[]]    System.Decimal[] 
[float]     System.Single 
[single]    System.Single 
[regex]     System.Text.RegularExpression.Regex 
[array]     System.Array 
[xml]     System.Xml.XmlDocument 
[scriptblock]   System.Management.Automation.ScriptBlock 
[switch]    System.Management.Automation.SwitchParameter 
[hashtable]    System.Collections.Hashtable 
[psobject]    System.Management.Automation.PSObject 
[type]     System.Type 
[type[]]    System.Type[] 
+0

[wmi] parece ser uno que falta en la lista –

+0

@Tyson: Sí, así que sospeché que faltaban uno o dos. Sin embargo, eso te ayudará a comenzar. Solo busca los más específicos si te parece que quieres un alias. :) – Noldorin

+5

Faltan muchos (incluidos todos los 2.0) y la mayoría de los que están aquí no son técnicamente aceleradores de todos modos. Use el método en la publicación de Keith Hill para obtener una lista (y opcionalmente, para modificarla). Cualquier tipo que esté en el espacio de nombres "Sistema" puede parecer un acelerador, pero es solo porque siempre puede * dejar * "Sistema". fuera del frente de un tipo ... Las anotaciones de matriz tampoco son aceleradores separados, porque la notación de matriz está automáticamente disponible para cualquier tipo, incluidos los aceleradores de tipo. – Jaykul

3

@Noldorin tiene una buena lista de algunos de los aceleradores de tipo, con algunos.

PowerShell también le permite usar literales de tipo para emitir objetos, llamar a métodos estáticos, acceder a propiedades estáticas, reflexionar y cualquier otra cosa que pueda hacer con una instancia de un objeto System.Type.

Para usar un tipo literal, simplemente encierre el nombre completo (nombre y nombre de clase) de la clase (o struct o enum) (con un período que separa el espacio de nombres y el nombre de clase) entre corchetes como:

[System.Net.NetworkInformation.IPStatus] 

PowerShell también proporcionará un "sistema" líder. en su intento de resolver el nombre, por lo que no necesita usarlo explícitamente si está utilizando algo en un espacio de nombres System *.

[Net.NetworkInformation.IPStatus] 

Oisin Grehan (a PowerShell MVP) also has a blog post about creating your own type accelerators.

+0

Interesante, gracias. –

+0

Ver la publicación más reciente de Oisin sobre el tema vinculado en la respuesta de Keith Hill. – JasonMArcher

12

La forma definitiva es hacer lo que Oisin demontrates en este excellent blog post:

PS> $acceleratorsType = [type]::gettype("System.Management.Automation.TypeAccelerators") 
PS> $acceleratorsType 

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
False False TypeAccelerators       System.Object 


PS> $acceleratorsType::Add("accelerators", $acceleratorsType) 
PS> [accelerators]::Get 

Key               Value 
---               ----- 
int               System.Int32 
... 

Tenga en cuenta que hay que añadir el nuevo acelerador 'aceleradores' al diccionario porque el tipo TypeAccelerators no es pública. Es increíble lo que puedes hacer con .NET Reflector y mucho tiempo libre. :-) ¡Te gusta Oisin!

+0

Esta es una publicación mucho mejor que la publicación anterior de Oisin (que es una especie de hack). – JasonMArcher

+2

Escribí un módulo para enumerar, agregar y eliminar aceleradores de tipo personalizado hace un rato ... Acabo de publicar una actualización en PoshCode: http://poshcode.org/1398 – Jaykul

12

Dado que esta pregunta fue hecha y respondida hace cuatro años, PowerShell ha seguido evolucionando. La respuesta concisa de @ KeithHill lamentablemente ya no funciona. Hice una pequeña excavación y descubrí que la clase requerida está un poco menos expuesta. En el lado positivo, la lista de los aceleradores de tipo ahora puede aparecer con sólo esta línea uno de código ...

[psobject].assembly.gettype("System.Management.Automation.TypeAccelerators")::Get 

... atribuirse a Jaykul en este Connect post.

Aquí es una salida parcial:

 
Key     Value 
---     ----- 
Alias     System.Management.Automation.AliasAttribute 
AllowEmptyCollection System.Management.Automation.AllowEmptyCollectionAttribute 
AllowEmptyString  System.Management.Automation.AllowEmptyStringAttribute 
AllowNull    System.Management.Automation.AllowNullAttribute 
array     System.Array 
bool     System.Boolean 
byte     System.Byte 
char     System.Char 
CmdletBinding   System.Management.Automation.CmdletBindingAttribute 
datetime    System.DateTime 
decimal    System.Decimal 
adsi     System.DirectoryServices.DirectoryEntry 
adsisearcher   System.DirectoryServices.DirectorySearcher 
double     System.Double 
float     System.Single 
single     System.Single 
guid     System.Guid 
hashtable    System.Collections.Hashtable 
int     System.Int32 
. . . 

2014.03.15 actualización

A partir de PowerShell Community Extensions (PSCX) versión 3.1.0, ahora se puede utilizar un acelerador de tipo para listar todos los aceleradores de tipo y acaba de invocar este:

[accelerators]::get 
1

Aquí está una lista más completa:

Key     Value 
---     ----- 
adsi     System.DirectoryServices.DirectoryEntry 
adsisearcher   System.DirectoryServices.DirectorySearcher 
array     System.Array 
bigint    System.Numerics.BigInteger 
bool     System.Boolean 
byte     System.Byte 
char     System.Char 
cimclass    Microsoft.Management.Infrastructure.CimClass 
cimconverter   Microsoft.Management.Infrastructure.CimConverter 
ciminstance   Microsoft.Management.Infrastructure.CimInstance 
cimtype    Microsoft.Management.Infrastructure.CimType 
cultureinfo   System.Globalization.CultureInfo 
datetime    System.DateTime 
decimal    System.Decimal 
double    System.Double 
float     System.Single 
guid     System.Guid 
hashtable    System.Collections.Hashtable 
initialsessionstate System.Management.Automation.Runspaces.InitialSessionState 
int     System.Int32 
int16     System.Int16 
int32     System.Int32 
int64     System.Int64 
ipaddress    System.Net.IPAddress 
long     System.Int64 
mailaddress   System.Net.Mail.MailAddress 
powershell   System.Management.Automation.PowerShell 
psaliasproperty  System.Management.Automation.PSAliasProperty 
pscredential   System.Management.Automation.PSCredential 
pscustomobject  System.Management.Automation.PSObject 
pslistmodifier  System.Management.Automation.PSListModifier 
psmoduleinfo   System.Management.Automation.PSModuleInfo 
psnoteproperty  System.Management.Automation.PSNoteProperty 
psobject    System.Management.Automation.PSObject 
psprimitivedictionary System.Management.Automation.PSPrimitiveDictionary 
psscriptmethod  System.Management.Automation.PSScriptMethod 
psscriptproperty  System.Management.Automation.PSScriptProperty 
psvariable   System.Management.Automation.PSVariable 
psvariableproperty System.Management.Automation.PSVariableProperty 
ref     System.Management.Automation.PSReference 
regex     System.Text.RegularExpressions.Regex 
runspace    System.Management.Automation.Runspaces.Runspace 
runspacefactory  System.Management.Automation.Runspaces.RunspaceFactory 
sbyte     System.SByte 
scriptblock   System.Management.Automation.ScriptBlock 
securestring   System.Security.SecureString 
single    System.Single 
string    System.String 
switch    System.Management.Automation.SwitchParameter 
timespan    System.TimeSpan 
type     System.Type 
uint16    System.UInt16 
uint32    System.UInt32 
uint64    System.UInt64 
uri     System.Uri 
version    System.Version 
void     System.Void 
wmi     System.Management.ManagementObject 
wmiclass    System.Management.ManagementClass 
wmisearcher   System.Management.ManagementObjectSearcher 
xml     System.Xml.XmlDocument 
Cuestiones relacionadas