He visto menciones de la sintaxis mejorada de PowerShell 3.0 pero aún no un ejemplo, ¿cómo se verá?Se supone que PowerShell 3.0 tiene una sintaxis más limpia, ¿cómo se ve?
Respuesta
Powershell ya tiene una sintaxis bastante limpia, por lo que no hay mucho que deba mejorarse.
Una nueva adición que me gusta es el Hash Table as objects
, donde se puede crear objetos pasando hastable con sus propiedades:
[<ClassName>]$Variable = @{<Property>=<Value>;<Property>=<Value>}
Así que la forma más nueva, más sucinta de la creación de objetos personalizados es:
$obj = [PSCustomObject]@{a=1; b=2; c=3; d=4}
Se ha mejorado la redirección. Que tiene ahora corrientes de verbosa, depurar y señalización, además a la normalidad (tubería) y el error y lo que puede hacer redirecciones como 5>&1
Puede utilizar variables $PSDefaultParameterValues
preferencia para establecer los valores de los parámetros por defecto para los cmdlets.
No es el nuevo [ordered]
acelerador para crear hastable ordenado (diccionario):
$a = [ordered]@{a=1;b=2;d=3;c=4}
De otra respuesta aquí en SO, me di cuenta de que era nuevo en -in
Powershell v3.0:
hacer algo como 1 -in 1,2,3
. Anteriormente sólo teníamos -contains
Cmdlets:
Puede actualizar ayuda con Update-Help
cmdlet. Hay cmdlets relacionados con la web como Invoke- WebRequest
. También puede manejar JSON usando los cmdlets ConverTo-JSON
y ConvertFrom-JSON
.
"ordenado hastable (diccionario)": pensé 'diccionario' y 'tabla hash' eran sinónimo. Tal vez me estoy confundiendo con los dictados de Python, pero los diccionarios no imponen orden, ¿verdad? ¿Puedes aclarar eso? –
He aquí un ejemplo:
dir | where length -lt 10
Antes de 3.0, que habría sido
dir | where {$_.length -lt 10}
edición: otro ejemplo, esta vez con foreach a objetos
dir | foreach-object length
+1 - Ni siquiera me di cuenta de esto antes. – manojlds
Estoy de acuerdo con el remitente. Esto es algo sobre lo que esperaba ver algunas publicaciones, porque hace que las secuencias de comandos sean un poco más fáciles de leer. Aunque no creo que me guste. –
Algunos de los cmdlets *-Object
comunes utilizan conjuntos de parámetros múltiples para lograr la sintaxis simplificada. Echar un vistazo a esto en V3:
C:\PS> Get-Command Where-Object -Syntax
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] [-EQ] [<CommonParameters>]
Where-Object [-FilterScript] <scriptblock> [-InputObject <psobject>] [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CGT [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CNE [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -LT [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CEQ [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -NE [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -GT [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CLT [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -GE [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CGE [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -LE [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CLE [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -Like [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CLike [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -NotLike [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CNotLike [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -Match [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CMatch [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -NotMatch [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CNotMatch [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -Contains [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CContains [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -NotContains [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CNotContains [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -In [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CIn [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -NotIn [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -CNotIn [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -Is [<CommonParameters>]
Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject <psobject>] -IsNot [<CommonParameters>]
NOTA: Salida los nuevos operadores -NotIn
y -In
por ejemplo:
C:\PS> 1 -In 1..5
C:\PS> 10 -NotIn 1..5
Así que la sintaxis simplificada es agradable para el caso "común", pero cuidado con lo puedes caer fácilmente en las rocas afiladas y la lava, por ejemplo:
C:\PS> Get-ChildItem | Where LastWriteTime.Year -eq 2010
Esto devuelve nada y lo que es peor, no hay error por lo que cree que el conjunto de resultados es "correcta" vacío cuando, de hecho, esta sintaxis simplemente no funciona como se podría esperar. Es decir, no puede acceder a una propiedad de una propiedad. En lo anterior, PowerShell busca una propiedad llamada LastWriteTime.Year
que no existe.
También tenga en cuenta que, como parte de la sintaxis simplificada ahora se puede utilizar en lugar del $PSItem
$_
en caso de que o los que se escribe guiones para tener algún tipo de reacción alérgica a $_
. :-)
Y si bien esto no es necesariamente ligada a la sintaxis simplificada encuentro que simplifica mi vida y lo amo:
C:\PS> Get-ChildItem -Directory
C:\PS> Get-ChildItem -File
C:\PS> dir -ad
C:\PS> Get-ChildItem -Attributes System+Hidden+Directory+!Archive
+1 para '$ PSItem'. Por cierto, ¿cómo puedes saber sobre estas cosas? ¿Está todo documentado? – manojlds
Sí, no me gusto la sintaxis simplificada con el lugar donde etc ... más problemas que ganar creo. – manojlds
Estoy un poco preocupado por la sintaxis simplificada. Entiendo el deseo de hacer que sea más fácil para los administradores para llegar a PowerShell, pero no estoy seguro de que esto es algo más que un cebo y 'switch'. El tiempo dirá, supongo. En cuanto a enterarse de estas cosas, ser un MVP tiene sus privilegios. :-) En serio, la interacción entre el equipo de PowerShell y sus MVP ha sido muy buena desde que empezaron a adjudicar los MVP de PowerShell en el 2006. ' –
- 1. ¿Cómo se supone que se usa RedirectToRoute?
- 2. ¿Qué se supone que debe hacer esta sintaxis?
- 3. MVC, no "se supone" que usará HttpContext.Current nunca más?
- 4. ¿Cómo se supone que scala.util.parsing.ast.Binders se debe usar?
- 5. ¿Para qué se supone que se utiliza la anotación javax.inject.Named?
- 6. Clang: ¿Cómo se ve AST (árbol de sintaxis abstracta)?
- 7. ¿Se supone que 'eval' es desagradable?
- 8. WPF: ¿Se supone que soy un diseñador?
- 9. ¿Se supone que los comentarios Pascal anidan?
- 10. ¿Cómo se ve una solicitud HTTPS?
- 11. ¿Cómo se ve tu .conkerorrc?
- 12. PowerShell - cadenas que se añaden
- 13. ¿Qué se supone que significa una "aplicación" de Django?
- 14. Jquery - Referencia por ID - ¿Se supone que devuelve una matriz?
- 15. ¿Cómo se supone que scrollTop en JQuery funciona?
- 16. ¿Cómo se usa PowerShell?
- 17. ANR errors - SCREEN OFF - ¿Cómo se supone que debo manejarlos?
- 18. Ejemplo que muestra cómo sobrescribir TabExpansion2 en Windows PowerShell 3.0
- 19. La propiedad se supone atómica por defecto
- 20. Sólo hay una gota de elemento que se ve
- 21. ¿Cómo se ve la sintaxis Alter Table para agregar una columna DATETIME?
- 22. La imagen dentro de una aplicación WPF se muestra más pequeña que cuando se ve en el visor externo
- 23. ¿Cómo se ve un Data Mapper?
- 24. ¿Por qué STL set tiene count() cuando se supone que todos los elementos son únicos?
- 25. ¿Se supone que los constructores variados ocultan los generados implícitamente?
- 26. css sin usar: ¿cómo se limpia?
- 27. ¿Qué ocurre si call_user_func se supone que devuelve false?
- 28. jquery varios selectores que incluyen 'esto' - sintaxis mejor limpia
- 29. ¿Cómo se limpia un árbol en ExtJs?
- 30. Hibernate EntityManager, ¿se supone que debe usarse como singleton?
¿Qué parte de esto no era útil? Parece que puedes descargarlo. http://social.technet.microsoft.com/Forums/en-AU/ITCG/thread/4807949e-58e6-4533-b35d-580d938dfbb2 –