Function Provider
Nombre de proveedor
Function
Unidades
Function:
Descripción breve
Proporciona acceso a las funciones definidas en Windows PowerShell.
Descripción detallada
El proveedor Function de Windows PowerShell permite obtener, agregar, cambiar, borrar y eliminar las funciones y los filtros en Windows PowerShell.
Una función consiste en un bloque de código con nombre que realiza una acción. Cuando se escribe el nombre de la función, el código que ésta contiene se ejecuta. Un filtro consiste en un bloque de código con nombre que establece las condiciones para una acción. Se puede escribir el nombre del filtro en lugar de la condición, como en un comando Where-Object.
En la unidad Function:, las funciones van precedidas de la etiqueta "Function" y los filtros, de la etiqueta "Filter". No obstante, funcionan correctamente cuando se usan en el contexto correcto independientemente de la etiqueta.
El proveedor Function es un espacio de nombres sin formato que contiene únicamente los objetos de las funciones y los filtros. Tanto las funciones como los filtros no tienen elementos secundarios.
Cada función es una instancia de la clase System.Management.Automation.FunctionInfo. Cada filtro es una instancia de la clase System.Management.Automation.FilterInfo.
En los ejemplos de esta sección se muestra cómo administrar funciones, pero pueden usarse los mismos métodos con filtros.
El proveedor de funciones expone su almacén de datos en la unidad Function:. Para trabajar con funciones, se puede cambiar la ubicación a la unidad Function: ("set-location function:"). También es posible trabajar desde otra unidad de Windows PowerShell. Para hacer referencia a una función desde otra ubicación, se incluye el nombre de la unidad (Function:) en la ruta de acceso.
El proveedor Function admite todos los cmdlets cuyos nombres contienen el sustantivo Item (los cmdlets Item), salvo Invoke-Item. Además, admite los cmdlets Get-Content y Set-Content. Sin embargo, no admite los cmdlets cuyos nombres contienen el sustantivo ItemProperty (los cmdlets ItemProperty), ni el parámetro Filter de ningún cmdlet.
Todos los cambios realizados en las funciones afectan únicamente a la consola actual. Para guardar los cambios, hay que agregar la función al perfil de Windows PowerShell, o bien utilizar Export-Console para guardar la consola actual.
Ejemplos
Tener acceso a la unidad Function:
-------------------------- EJEMPLO 1 --------------------------
Cambia la ubicación actual a la unidad Function:. Puede usar este comando desde cualquier unidad de Windows PowerShell. Para volver a una unidad del sistema de archivos, escriba el nombre de la unidad. Por ejemplo, escriba "set-location c:".
set-location function:
Obtener funciones
-------------------------- EJEMPLO 1 --------------------------
Este comando obtiene la lista de todas las funciones de la sesión actual. Puede usar este comando desde cualquier unidad de Windows PowerShell.
get-childitem -path function:
-------------------------- EJEMPLO 2 --------------------------
Este comando obtiene la función "man" desde la unidad Function:. Usa el cmdlet Get-Item para obtener la función. El operador de canalización (|) envía el resultado a Format-Table.
El parámetro Wrap dirige a la siguiente línea el texto que no cabe en esta línea. El parámetro Autosize cambia el tamaño de las columnas de la tabla para dar cabida al texto.
get-item -path man | format-table -wrap -autosize
Si se encuentra en otra unidad, agregue el nombre de la unidad (Function:) a la ruta de acceso.
-------------------------- EJEMPLO 3 --------------------------
Estos dos comandos obtienen la función llamada "c:". El primer comando se puede usar en cualquier unidad, mientras que el segundo se usa en la unidad Function:.
Como el nombre termina en un signo de dos puntos, que es la sintaxis de una unidad, es necesario calificar la ruta de acceso con el nombre de unidad. En la unidad Function:, se puede usar cualquiera de los dos formatos. En el segundo comando, el punto (.) representa la ubicación actual.
c:\PS> get-item -path function:c:
PS Function> get-item -path .\c:
Crear una función
-------------------------- EJEMPLO 1 --------------------------
Este comando usa el cmdlet New-Item para crear la función "HKLM:". La expresión especificada entre llaves es el bloque de script que representa el nombre de la función.
new-item -path function:hklm: -value {set-location hklm:}
También se puede crear una función con solo escribirla en la línea de comandos de Windows PowerShell. Por ejemplo, escriba "function:hklm: {set-location hklm:}". Si se encuentra en la unidad Function:, puede omitir el nombre de la unidad. Dado que no se puede especificar la etiqueta "Filter" en New-Item, los filtros se etiquetan como funciones, pero funcionan correctamente con cualquier etiqueta. Para crear un filtro con la etiqueta "Filter", escriba el filtro en la línea de comandos. Por ejemplo, escriba "filter:Running {$_.Status -eq "Running"}".
-------------------------- EJEMPLO 2 --------------------------
Este comando usa el cmdlet New-Item para crear la función Csrss. Usa el parámetro dinámico Options para especificar el valor ReadOnly para la propiedad Options de la función.
new-item -path function: -name csrss -options readonly -value {get-process csrss}
Este comando se puede usar desde cualquier ubicación. Si se encuentra en la unidad Function:, puede utilizar un punto (.) para especificar la ruta de acceso. El punto representa la ubicación actual.
Eliminar una función
-------------------------- EJEMPLO 1 --------------------------
Este comando elimina la función "hklm:" de la sesión actual.
remove-item function:hklm:
-------------------------- EJEMPLO 2 --------------------------
Este comando elimina todas las funciones de la sesión actual, excepto aquellas cuyo valor de la propiedad Options sea Constant. Sin el parámetro Force, el comando no elimina las funciones cuya propiedad Options tenga el valor ReadOnly.
remove-item function:* -force
Si se eliminan todas las funciones, el símbolo del sistema cambia porque se elimina la función prompt, que define el contenido del símbolo del sistema.
Mostrar las propiedades y los métodos de las funciones
-------------------------- EJEMPLO 1 --------------------------
Este comando usa el cmdlet Get-Item para obtener todas las funciones. El operador de canalización envía los resultados al cmdlet Get-Member, que muestra los métodos y las propiedades del objeto.
get-item -path function:* | get-member
Cuando se canaliza una colección de objetos a Get-Member (por ejemplo, la colección de funciones de la unidad Function:), Get-Member evalúa cada objeto de la colección por separado y devuelve información acerca de cada tipo de objeto que encuentra. Si todos los objetos son del mismo tipo, devuelve información acerca del único tipo de objeto. En este caso, todas las funciones son objetos FunctionInfo. Para obtener información acerca de la colección de objetos FunctionInfo, se utiliza el parámetro InputObject de Get-Member. Por ejemplo, escriba "get-member -InputObject (get-item function:*)". Si se usa el parámetro InputObject, Get-Member evalúa la colección, no los objetos que esta contiene.
-------------------------- EJEMPLO 2 --------------------------
Este comando enumera los valores de las propiedades de la función "prompt". Usa el cmdlet Get-Item para obtener un objeto que representa la función "prompt". El operador de canalización (|) envía los resultados al comando Format-List. El comando Format-List usa el parámetro Property con un carácter comodín (*) para dar formato y mostrar los valores de todas las propiedades de la función "prompt".
get-item function:prompt | format-list -property *
Cambiar las propiedades de una función
-------------------------- EJEMPLO 1 --------------------------
Se puede usar el cmdlet Set-Item con el parámetro dinámico Options para cambiar el valor de la propiedad Options de una función.
Este comando establece las opciones AllScope y ReadOnly de la función "prompt". Este comando usa el parámetro dinámico Options del cmdlet Set-Item. El parámetro Options está disponible en Set-Item únicamente cuando se usa con el proveedor Alias o Function.
set-item -path function:prompt -options "AllScope,ReadOnly"
-------------------------- EJEMPLO 2 --------------------------
Este comando usa el cmdlet Set-Item para cambiar la función "prompt" de manera que muestre la hora delante de la ruta de acceso.
set-item -path function:prompt -value {'PS '+ $(Get-Date -format t) + " " + $(Get-Location) + '> '}
El cambio afecta a las propiedades Definition y ScriptBlock del objeto FunctionInfo. Para ver el efecto del cambio, escriba "get-item -path function:prompt | format-list -property *".
-------------------------- EJEMPLO 3 --------------------------
Este comando usa el cmdlet Rename-Item para cambiar el nombre de la función "help" a "gh".
rename-item -path function:help -newname gh
Copiar una función
-------------------------- EJEMPLO 1 --------------------------
Este comando copia la función "prompt" en "oldPrompt", creándose así en realidad un nuevo nombre para el bloque de script que está asociado a la función "prompt". Puede usarlo para guardar la función "prompt" original, si tiene pensado cambiarla.
El valor de la propiedad Options de la nueva función es None. Para cambiar el valor de la propiedad Options, se utiliza Set-Item.
copy-item -path function:prompt -destination function:oldPrompt
Parámetros dinámicos
Los parámetros dinámicos son los parámetros de cmdlet que un proveedor de Windows PowerShell agrega y solo están disponibles cuando el cmdlet se utiliza en la unidad habilitada por el proveedor.
Options <System.Management.Automation.ScopedItemOptions>
Determina el valor de la propiedad Options de una función.
Value | Description |
---|---|
Ninguna |
Ninguna opción. "None" es el valor predeterminado. |
Constant |
No se puede eliminar la función ni se pueden cambiar sus propiedades. El valor Constant está disponible únicamente cuando se crea una función. No se puede cambiar la opción de una función existente a Constant. |
Private |
La función se muestra solo en el ámbito actual (no en los ámbitos secundarios). |
ReadOnly |
No se pueden cambiar las propiedades de la función, excepto con el parámetro Force. Se puede usar Remove-Item para eliminar la función. |
AllScope |
La función se copia en los nuevos ámbitos que se creen. |