En la primera parte, le mostré algunas cosas interesantes que puede hacer con PowerShell, cubrí la historia de PowerShell y exploré en profundidad las capacidades de PowerShell como un lenguaje de secuencias de comandos fuerte que admite programación de procedimientos, funcional y orientada a objetos..
En la segunda parte, discutiré la shell interactiva, el perfil y el indicador, y compararé PowerShell con Bash.
PowerShell fue diseñado desde el inicio como un shell interactivo para los administradores de sistemas de Windows y los usuarios avanzados. Se centra en un pequeño número de conceptos., muy experiencia consistente, y un canal de objetos para encadenar y combinar comandos, filtrarlos y formatearlos. Su sistema de ayuda fuerte, que también se adhiere a un formato consistente, es un placer utilizar.
Veamos algo de eso en acción..
El sistema de ayuda integral es accesible a través de Consigue ayuda
.
PS C: \ WINDOWS \ system32> Ayuda Invoke-WebRequest NAME Invoke-WebRequest SYNOPSIS Obtiene contenido de una página web en Internet. SYNTAX Invoke-WebRequest [-Uri][-Cuerpo
Para obtener ayuda más detallada y ver ejemplos, use los interruptores adecuados: -ejemplos
, -detalles
, o -completo
.
Si no está seguro de cuál es el nombre del comando, solo use palabras clave y PowerShell le mostrará todos los comandos disponibles que contienen esta palabra clave. Veamos que cmdlets relacionados con CSV están disponibles:
PS C: \ Users \ the_g> Get-Help -Category Cmdlet csv | seleccione nombre Nombre ---- ConvertFrom-Csv ConvertTo-Csv Export-Csv Import-Csv
Creé una pequeña tubería en la que limité la llamada Get-Help solo a la categoría Cmdlet y luego la canalicé a "select" (alias para Select-Object) para obtener solo la propiedad "name".
Puede hacer casi todo lo que está acostumbrado a: navegar a varios directorios, listar archivos y subdirectorios, examinar el contenido de los archivos, crear directorios y archivos, etc..
PS C: \ Users \ the_g> mkdir test_dir | seleccione nombre Nombre ---- test_dir PS C: \ Users \ the_g> cd. \ test_dir PS C: \ Users \ the_g \ test_dir> "123"> test.txt PS C: \ Users \ the_g \ test_dir> ls | nombre Nombre ---- test.txt PS C: \ Users \ the_g \ test_dir> get-content. \ test.txt 123
Con PowerShell, puede tratar muchas cosas como sistemas de archivos y navegarlos usando discos compactos
y verifica su contenido usando ls / dir
. Aquí hay algunos proveedores adicionales:
Proveedor Unidad de datos Almacén -------- ----- ---------- Alias Alias: alias de Windows PowerShell Certificado: certificados x509 para firmas digitales Entorno de entorno: variables de entorno de Windows Función Función: Registro de funciones de Windows PowerShell HKLM :, HKCU: Variable de registro de Windows Variable: variables de Windows PowerShell WSMan WSMan: información de configuración de WS-Management
Revisemos el entorno y veamos qué variables de entorno relacionadas con Go están disponibles (en mi máquina):
PS C: \ Users \ the_g> ls env: GO * Nombre Valor ---- ----- GOROOT C: \ GO \ GOPATH C: \ Users \ the_g \ Documents \ Go
PowerShell fomenta la composición de cmdlets con switches estándar y la creación de tuberías. El formateo es un concepto explícito en el que al final de una canalización se coloca un formateador. PowerShell de forma predeterminada examina el tipo de objeto u objetos al final de la tubería y aplica un formateador predeterminado. Pero puede anularlo especificando un formateador usted mismo. Los formateadores son solo cmdlets. Aquí está la salida anterior mostrada en formato de lista:
PS C: \ Users \ the_g> ls env: GO * | Nombre de la lista de formatos: GOROOT Valor: C: \ Go \ Nombre: GOPATH Valor: c: \ Users \ the_g \ Documents \ Go
Los usuarios avanzados que utilizan la línea de comandos con frecuencia tienen muchas tareas, canalizaciones y combinaciones favoritas de comandos con los interruptores predeterminados que prefieren. El perfil de PowerShell es un archivo de script de PowerShell que se carga y ejecuta cada vez que inicia una nueva sesión. Puedes poner todas tus golosinas favoritas allí, crear alias y funciones, establecer variables de entorno y casi todo lo demás.
Me gusta crear alias de navegación para directorios profundamente anidados, activar entornos virtuales de Python y crear accesos directos a comandos externos que ejecuto con frecuencia, como git y docker.
Para mí, el perfil es indispensable porque los comandos e interruptores muy legibles y consistentes de PowerShell a menudo son demasiado detallados, y los alias integrados a menudo son más problemas que ayuda (lo comento más adelante). Aquí hay un fragmento parcial de mi perfil:
# --------------------------- # # DOCKER # # ----------------- ---------- Set-Alias -Name d -Value docker function di d images # ------------------------ --- # # GIT # # --------------------------- Set-Alias -Name g -Value git function gs g status función gpu g pull --rebase # ------------------------- # # CONDA # # ---------- --------------- función a enable.ps1 $ args [0] # ---------------------- - # # NAVEGACIÓN # # ------------------------ function cdg cd $ github_dir # MVP function cdm a ov; cdg; cd MVP # backend function cdb a ov; cdg; backend cd # scratch function cds a ov; cdg; cd scratch # la función de paquetes backend cdbp cdb; paquetes de cd # Función de ir al espacio de trabajo cdgo cd $ go_src_dir
PowerShell te permite personalizar tu símbolo del sistema. Necesitas definir una función llamada rápido()
. Puedes ver la función de aviso incorporada:
PS C: \ Users \ the_g> gc function: prompt "PS $ ($ecutionContext.SessionState.Path.CurrentLocation) $ ('>' * ($ nestedPromptLevel + 1))"; # .Link # http://go.microsoft.com/fwlink/?LinkID=225750 # .ExternalHelp System.Management.Automation.dll-help.xml PS C: \ Users \ the_g>
Aquí hay una función de solicitud personalizada que muestra la hora actual además del directorio actual:
PS C: \ Users \ the_g> indicador de función "$ (get-date) $ (get-location)>"
10/09/2016 12:42:36 C: \ Users \ the_g>
Puede volverse loco, por supuesto, y agregar colores y verificar varias condiciones, como si está en un repositorio particular de git o si es administrador.
PowerShell se equivocó de alias, en mi opinión, en dos frentes separados. Primero el alias
El comando solo permite el cambio de nombre de los comandos. No puede agregar indicadores u opciones comunes para hacer que los comandos sean más útiles al crear un alias para ellos mismos..
Por ejemplo, si desea buscar en línea de texto por línea, puede usar la Cadena selecta
cmdlet:
# Cree un pequeño archivo de texto con 3 líneas "@ ab cd ef @"> 1.txt # Busque una línea que contenga d Get-Content 1.txt | Select-String d cd
Eso funciona, pero a muchas personas les gustaría cambiar el nombre. Cadena selecta
a grep
. Pero grep
por defecto es sensible a mayúsculas, mientras que Cadena selecta
no es. No es gran cosa, solo añadiremos el -Distingue mayúsculas y minúsculas
bandera, como en
Set-Alias-Name grep -Value "Select-String -CaseSensitive"
Desafortunadamente, eso no funciona:
16:19:26 C: \ Users \ the_g> Get-Content 1.txt | grep D grep: el término 'Select-String -CaseSensitive' no se reconoce como el nombre de un cmdlet, función, archivo de secuencia de comandos o programa operable. Verifique la ortografía del nombre, o si se incluyó una ruta, verifique que la ruta sea correcta e intente nuevamente. En la línea: 1 personaje: 21 + Get-Content 1.txt | grep D + ~~~~ + CategoryInfo: ObjectNotFound: (Select-String -CaseSensitive: String) [], CommandNotFoundException + FullyQualifiedErrorId: CommandNotFoundException
El valor de un alias debe sea un cmdlet, una función, un script o un programa. No se permiten banderas ni argumentos.
Ahora, puede hacerlo muy fácilmente en PowerShell, pero tendrá que usar funciones y no alias. Eso restringe bastante los alias al cambio de nombre simple, que también puede hacerse mediante funciones.
En el lado de shell interactivo, PowerShell y Bash son bastante iguales. Bash es más conciso de forma predeterminada, pero la canalización de objetos de PowerShell hace que las tuberías complicadas sean más manejables. ,
Dicho esto, probablemente puedas lograr cualquier cosa con cualquiera de los dos y si eres un usuario avanzado, tendrás tus propios alias, funciones y accesos directos para tareas comunes. En lo que respecta a las secuencias de comandos, PowerShell va mucho más allá de Bash, y para fines de administración del sistema incluso supera a Python, Ruby y sus amigos.
Un aspecto importante es la disponibilidad. Bash viene preinstalado con la mayoría de las distribuciones * nix (a menos que estén específicamente despojadas) incluyendo macOS. También se puede instalar en Windows a través de cygwin, git-bash o msys. PowerShell viene preinstalado en Windows y recientemente se hizo disponible en Mac y Linux.
Si utiliza Windows como una máquina de desarrollo o si administra máquinas de Windows, PowerShell es una herramienta indispensable. Es realmente un superconjunto bien pensado de las carcasas de Unix, y viene preinstalado.
PowerShell es una gran ingeniería de software en el trabajo. Evolucionó a lo largo de una década y siguió innovando mientras mantenía su integridad conceptual original. El reciente cambio a código abierto y multiplataforma indica que todavía hay mucho más que esperar.