Para la mayoría de las interfaces de línea de comandos, hay que dedicar mucho tiempo a aprender los nombres de comandos y parámetros. El problema es que hay muy pocos patrones que seguir, por lo que la única manera es memorizar cada comando y cada parámetro que se vaya a utilizar con frecuencia.
Cuando se trabaja con un comando o parámetro nuevo, no se puede usar normalmente lo que ya se conoce; es necesario buscar y aprender un nombre nuevo. Si observa cómo aumentan de tamaño las interfaces, desde un pequeño conjunto de herramientas con adiciones progresivas hasta funciones, es fácil entender por qué la estructura no está normalizada. En lo que respecta a los nombres de comandos en concreto, esto puede parecer lógico puesto que cada comando es una herramienta independiente, pero hay una manera mejor de tratar los nombres de comandos.
La mayoría de los comandos se crean para administrar elementos del sistema operativo o aplicaciones, como servicios o procesos. Los comandos tienen nombres diversos, que pueden ajustarse o no a un grupo. Por ejemplo, en sistemas de Windows, se pueden utilizar los comandos net start y net stop para iniciar y detener un servicio, respectivamente. También hay otra herramienta de control de servicios más generalizada para Windows con un nombre totalmente distinto, sc, que no se ajusta al patrón de nomenclatura de los comandos de servicio net. Para la administración de procesos, Windows tiene el comando tasklist para enumerar procesos y el comando taskkill para eliminar procesos.
Los comandos con parámetros tienen especificaciones irregulares para estos últimos. No se puede usar el comando net start para iniciar un servicio en un equipo remoto. El comando sc inicia un servicio en un equipo remoto pero, para especificar este último, es necesario escribir dos barras diagonales inversas como prefijo del nombre. Por ejemplo, para iniciar el servicio de administrador de trabajos en cola en un equipo remoto denominado DC01, debe escribir sc \\DC01 start spooler. Para obtener una lista de las tareas que se están ejecutando en DC01, deberá utilizar el parámetro /S (de "sistema") y proporcionar el nombre DC01 sin barras diagonales inversas, como por ejemplo: tasklist /S DC01.
Aunque hay importantes diferencias técnicas entre un servicio y un proceso, ambos son ejemplos de elementos fáciles de administrar en un equipo con un ciclo de vida bien definido. Quizá desee iniciar o detener un servicio o proceso, u obtener una lista de todos los servicios o procesos en ejecución actualmente. En otras palabras, aunque un servicio y un proceso son cosas distintas, las acciones que realizamos en un servicio o proceso son a menudo las mismas, conceptualmente hablando. Además, las elecciones que realicemos para personalizar una acción mediante parámetros pueden ser también conceptualmente parecidas.
Windows PowerShell aprovecha estas similitudes para reducir el número de nombres distintos que el usuario necesita conocer para entender y usar los cmdlets.
Los cmdlets utilizan nombres con verbo y sustantivo para reducir la memorización de comandos
Windows PowerShell utiliza un sistema de nombres con la estructura "verbo-sustantivo": el nombre de cada cmdlet consta de un verbo estándar y un sustantivo concreto unidos por un guión. Los verbos de Windows PowerShell no siempre están en inglés, pero expresan acciones concretas en Windows PowerShell. Los sustantivos son muy parecidos a los de cualquier idioma, ya que describen tipos de objetos concretos que son importantes para la administración del sistema. Resulta muy fácil entender cómo estos nombres que constan de dos partes reducen el esfuerzo de aprendizaje si observamos varios ejemplos de verbos y sustantivos.
Los sustantivos están menos limitados, pero deben describir siempre a qué se aplica un comando. Windows PowerShell tiene comandos como Get-Process, Stop-Process, Get-Service y Stop-Service.
En el caso de dos sustantivos y dos verbos, la coherencia no simplifica tanto el aprendizaje. No obstante, en el caso de un conjunto estándar de 10 verbos y 10 sustantivos, tendría solamente 20 palabras que aprender, pero éstas se pueden usar para formar 100 nombres de comandos distintos.
A menudo se reconoce la función de un comando con sólo leer su nombre, y suele ser evidente el nombre que debe utilizarse para un comando nuevo. Por ejemplo, un comando que apaga el equipo podría ser Stop-Computer. Un comando que enumera todos los equipos de una red podría ser Get-Computer. El comando que obtiene la fecha del sistema es Get-Date.
Puede obtener una lista de todos los comandos que incluyen un verbo concreto con el parámetro -Verb de Get-Command (trataremos Get-Command detenidamente en la sección siguiente). Por ejemplo, para ver todos los cmdlets que utilizan el verbo Get, escriba:
PS> Get-Command -Verb Get CommandType Name Definition ----------- ---- ---------- Cmdlet Get-Acl Get-Acl [[-Path] <String[]>]... Cmdlet Get-Alias Get-Alias [[-Name] <String[]... Cmdlet Get-AuthenticodeSignature Get-AuthenticodeSignature [-... Cmdlet Get-ChildItem Get-ChildItem [[-Path] <Stri... ...
El parámetro -Noun es incluso más útil porque permite ver un conjunto de comandos que se aplican al mismo tipo de objeto. Por ejemplo, si desea ver qué comandos están disponibles para administrar servicios, escriba el siguiente comando:
PS> Get-Command -Noun Service CommandType Name Definition ----------- ---- ---------- Cmdlet Get-Service Get-Service [[-Name] <String... Cmdlet New-Service New-Service [-Name] <String>... Cmdlet Restart-Service Restart-Service [-Name] <Str... Cmdlet Resume-Service Resume-Service [-Name] <Stri... Cmdlet Set-Service Set-Service [-Name] <String>... Cmdlet Start-Service Start-Service [-Name] <Strin... Cmdlet Stop-Service Stop-Service [-Name] <String... Cmdlet Suspend-Service Suspend-Service [-Name] <Str... ...
Un comando no es necesariamente un cmdlet simplemente porque tenga un esquema de nomenclatura “verbo-sustantivo”. Un ejemplo de un comando nativo de Windows PowerShell que no es un cmdlet pero que tiene un nombre con verbo y sustantivo es el comando para borrar el contenido de una ventana de consola, Clear-Host. El comando Clear-Host es en realidad una función interna, como puede observarse si se ejecuta Get-Command respecto a este comando:
PS> Get-Command -Name Clear-Host CommandType Name Definition ----------- ---- ---------- Function Clear-Host $spaceType = [System.Managem...
Los cmdlets utilizan parámetros estándar
Como se ha indicado anteriormente, los nombres de los parámetros de los comandos utilizados en las interfaces tradicionales de línea de comandos no suelen ser coherentes. Algunos parámetros no tienen nombre. Si tienen nombre, suele ser una palabra abreviada o de un solo carácter que se pueden escribir rápidamente, pero que los usuarios nuevos no entienden fácilmente.
A diferencia de la mayoría de las interfaces tradicionales de línea de comandos, Windows PowerShell procesa los parámetros directamente y usa este acceso directo a los parámetros, junto con las directrices del programador, para normalizar los nombres de parámetros. Aunque esto no garantiza que todos los cmdlets se ajusten siempre a los estándares, sí lo fomenta.
Nota: | |
Los nombres de parámetros se utilizan siempre con un guión (-) como prefijo, para que Windows PowerShell los identifique claramente como parámetros. En el ejemplo de Get-Command -Name Clear-Host, el nombre del parámetro es Name, pero se escribe como -Name. |
A continuación se describen algunas de las características generales de los usos y nombres de parámetros estándar.
Parámetro Help (?)
Cuando se especifica el parámetro -? en cualquier cmdlet, el cmdlet no se ejecuta, sino que Windows PowerShell muestra la Ayuda correspondiente.
Parámetros comunes
Windows PowerShell tiene varios parámetros conocidos como parámetros comunes. Como estos parámetros se controlan mediante el motor de Windows PowerShell, se comportan siempre de la misma manera cada vez que un cmdlet los implementa. Los parámetros comunes son WhatIf, Confirm, Verbose, Debug, Warn, ErrorAction, ErrorVariable, OutVariable y OutBuffer.
Parámetros recomendados
Los cmdlets principales de Windows PowerShell utilizan nombres estándar para parámetros similares. Aunque el uso de nombres de parámetros no es obligatorio, existen unas directrices de uso explícitas a fin de fomentar la normalización.
Por ejemplo, estas directrices recomiendan denominar ComputerName a un parámetro que haga referencia a un equipo por su nombre, en lugar de Server, Host, System, Node u otras palabras alternativas comunes. Algunos nombres de parámetros importantes recomendados son Force, Exclude, Include, PassThru, Path y CaseSensitive.