You are on page 1of 5

TEMA

about_Command_Precedence
DESCRIPCIN BREVE
Describe cmo determina Windows PowerShell qu comando se ejecutar.
DESCRIPCIN DETALLADA
En este tema se explica cmo determina Windows PowerShell qu
comando se va a ejecutar, sobre todo cuando una sesin contiene
ms de un comando con el mismo nombre.
Tambin se explica cmo ejecutar los comandos que no se ejecutan
de forma predeterminada y cmo evitar los conflictos de nombres
de comandos en una sesin.

PRECEDENCIA DE LOS COMANDOS


Cuando una sesin incluye comandos que tienen el mismo nombre,
Windows PowerShell utiliza las reglas siguientes para decidir qu
comando se ejecutar.
Estas reglas cobran mucha importancia si se agregan comandos a la
sesin desde mdulos, complementos y otras sesiones.
-- Si se especifica la ruta de acceso a un comando, Windows
PowerShell ejecuta el comando en la ubicacin especificada por
la ruta de acceso.
Por ejemplo, el siguiente comando ejecuta el script
FindDocs.ps1 que se encuentra en el directorio C:\TechDocs:
C:\TechDocs\FindDocs.ps1
Como caracterstica de seguridad, Windows PowerShell no
ejecuta comandos ejecutables (nativos), ni siquiera scripts de
Windows PowerShell, a menos que el comando se encuentre en una
ruta de acceso incluida en la lista en de la variable de
entorno Path ($env:path) o que se especifique la ruta de
acceso al archivo de script.
Para ejecutar un script que se encuentra en el directorio
actual, se escribe la ruta de acceso completa o bien se usa un
punto (.) para representar el directorio actual.
Por ejemplo, para ejecutar el archivo FindDocs.ps1 en el
directorio actual, escriba:
.\FindDocs.ps1

-- Si no se especifica una ruta de acceso, Windows PowerShell


utiliza el orden de precedencia siguiente al ejecutar los comandos:
1. Alias
2. Function
3. Cmdlet

4. Comandos nativos de Windows


Por consiguiente, si escribe "help", Windows PowerShell busca en primer
lugar los alias que se denominan "help", a continuacin, una funcin
denominada "Help" y, por ltimo, un cmdlet denominado "Help".
Ejecuta el primer elemento "help" que encuentra.
Por ejemplo, supongamos que existe una funcin denominada Get-Map.
A continuacin, se agrega o importa un cmdlet denominado Get-Map.
De forma predeterminada, Windows PowerShell ejecutar dicha funcin al
escribir "Get-Map".

-- Cuando la sesin contiene elementos del mismo tipo que tienen


el mismo nombre, como dos cmdlets con el mismo nombre, Windows
PowerShell ejecuta el elemento que se agreg a la sesin ms
recientemente.
Por ejemplo, supongamos que tenemos un cmdlet denominado Get-Date.
A continuacin, Windows PowerShell ejecutar el ltimo cmdlet que se ha
importado, cuando se escribe "Get-Date".

ELEMENTOS OCULTOS Y REEMPLAZADOS


A causa de estas reglas, es posible que algunos elementos queden
ocultos o sean reemplazados por otros elementos con el mismo nombre.
-- Los elementos se "ocultan" o quedan "en la sombra" si
todava puede tener acceso al elemento original, por
ejemplo, cualificando el nombre del elemento con el
nombre de un mdulo o complemento.
Por ejemplo, si importa una funcin que tiene el mismo
nombre que un cmdlet de la sesin, el cmdlet se oculta
pero no se reemplaza, porque se ha importado desde un
complemento o mdulo.
-- Los elementos se "reemplazan" o "sobrescriben" si ya no
puede tener acceso al elemento original.
Por ejemplo, si importa una variable que tiene el mismo
nombre que una variable de la sesin, se reemplaza la
variable original y deja de estar accesible. Una variable
no se puede cualificar con el nombre de un mdulo.
Adems, si se escribe una funcin en la lnea de comandos
y, a continuacin, se importa una funcin con el mismo
nombre, se reemplaza la funcin original y deja de estar
accesible.

EJECUTAR COMANDOS OCULTOS


Es posible ejecutar comandos concretos especificando propiedades
de elemento que diferencian el comando de otros comandos que
podran tener el mismo nombre.

Este mtodo se puede utilizar para ejecutar cualquier comando,


pero resulta especialmente til para ejecutar comandos ocultos.
Utilizar este mtodo es un procedimiento recomendado cuando se
escribe script que se va a distribuir, puesto que no se puede
predecir qu comandos podran estar presentes en la sesin donde
se ejecutar el script.
NOMBRES COMPLETOS
Es posible ejecutar comandos importados desde un complemento
o mdulo de Windows PowerShell o de otra sesin, cualificando
el nombre del comando con el nombre del mdulo o del
complemento donde se origin.
Los comandos se pueden cualificar, pero no las variables ni
los alias.
Por ejemplo, si un alias, una funcin o un cmdlet ocultan el
cmdlet Get-Date del complemento Microsoft.PowerShell.Utility
con el mismo nombre, se puede ejecutar mediante el nombre
completo del cmdlet que incluya el nombre del complemento:
Microsoft.PowerShell.Utility\Get-Date
Para ejecutar un comando New-Map agregado por el mdulo
MapFunctions, se utiliza su nombre completo con el mdulo:
MapFunctions\New-Map
Para buscar el complemento o el mdulo desde el que se
import un comando, se utiliza el formato del comando
Get-Command siguiente:
get-command <nombre-del-comando> | format-list -property
Name, PSSnapin, Module
Por ejemplo, para buscar el origen del cmdlet Get-Date, escriba:
get-command get-date | format-list -property Name,
PSSnapin, Module
Name
: Get-Date
PSSnapIn : Microsoft.PowerShell.Utility
Module :
OPERADOR DE LLAMADA
Tambin puede utilizar el operador de llamada (&) para
ejecutar cualquier comando que se pueda obtener mediante un
comando Get-ChildItem (el alias es "dir"), Get-Command o Get-Module.
Para ejecutar un comando, se incluye el comando Get-Command entre
parntesis y se utiliza el operador de llamada (&) para ejecutar el
comando.
&(get-command ...)

- o bien,
&(dir ... )
Por ejemplo, si hay una funcin denominada Map que est
oculta por un alias denominado Map, se puede utilizar el
comando siguiente para ejecutar la funcin.
&(get-command -name map -type function)
- o bien,
&(dir function:\map)
Tambin se puede guardar el comando oculto en una variable
para facilitar su ejecucin.
Por ejemplo, el comando siguiente guarda la funcin Map en la
variable de $myMap y, a continuacin, utiliza el operador de
llamada para ejecutarlo.
$myMap = (get-command -name map -type function)
&($myMap)
Si un comando se origina en un mdulo, se puede utilizar el
formato siguiente para ejecutarlo:
& <objeto-PSModuleInfo> <comando>
Por ejemplo, para ejecutar el cmdlet Add-File en el mdulo
FileCommands, utilice el script siguiente:
$FileCommands = get-module -name FileCommands
& $FileCommands Add-File

ELEMENTOS REEMPLAZADOS
Los elementos que no se han importado desde un mdulo o
complemento, como las funciones, las variables y los alias que se
crean en la sesin, o que se agregan mediante un perfil, se
pueden reemplazar por los comandos que tienen el mismo nombre. Si
se reemplazan, no se puede tener acceso a ellos.
Las variables y los alias siempre se reemplazan, aunque se hayan
importado desde un mdulo o complemento, porque no es posible
utilizar un operador de llamada ni un nombre completo para ejecutarlos.
Por ejemplo, si escribe una funcin Get-Map en la sesin y se
importa una funcin denominada Get-Map, la funcin original se
reemplaza y no se puede recuperar en la sesin actual.

EVITAR CONFLICTOS DE NOMBRES


La mejor manera de administrar los conflictos de nombres de

comandos es evitarlos. Al asignar nombres a los comandos, se


deben utilizar nombres que sean muy especficos o con una
probabilidad elevada de ser nicos. Por ejemplo, puede ser
conveniente agregar las iniciales del usuario o las siglas de la
empresa a los nombres que se utilicen en los comandos.
Adems, al importar los comandos a la sesin desde un mdulo de Windows
PowerShell o desde otra sesin, se utiliza el parmetro Prefix del cmdlet
Import-Module o Import-PSSession para agregar un prefijo a los sustantivos
de los nombres de comandos.
Por ejemplo, el comando siguiente evita cualquier conflicto con
los cmdlets Get-Date y Set-Date que se incluyen en Windows
PowerShell cuando se importa el mdulo DateFunctions.
import-module -name DateFunctions -prefix ZZ
Para obtener ms informacin, vea el tema de Ayuda correspondiente
a los cmdlets Import-Module e Import-PSSession.
VEA TAMBIN
about_Path_Syntax
about_Aliases
about_Functions
Alias (proveedor)
Funcin (proveedor)
Get-Command
Import-Module
Import-PSSession

You might also like