Export-PSSession

Exporta comandos desde otra sesión y los guarda en un módulo de PowerShell.

Syntax

Export-PSSession
      [-OutputModule] <String>
      [-Force]
      [-Encoding <Encoding>]
      [[-CommandName] <String[]>]
      [-AllowClobber]
      [-ArgumentList <Object[]>]
      [-CommandType <CommandTypes>]
      [-Module <String[]>]
      [-FullyQualifiedModule <ModuleSpecification[]>]
      [[-FormatTypeName] <String[]>]
      [-Certificate <X509Certificate2>]
      [-Session] <PSSession>
      [<CommonParameters>]

Description

El Export-PSSession cmdlet obtiene cmdlets, funciones, alias y otros tipos de comandos de otra sesión de PowerShell (PSSession) en un equipo local o remoto y los guarda en un módulo de PowerShell. Para agregar los comandos del módulo a la sesión actual, use el Import-Module cmdlet .

A diferencia Import-PSSessionde , que importa comandos de otra PSSession en la sesión actual, Export-PSSession guarda los comandos en un módulo. Los comandos no se importan a la sesión actual.

Para exportar comandos, use el New-PSSession cmdlet para crear una PSSession que tenga los comandos que desea exportar. A continuación, use el Export-PSSession cmdlet para exportar los comandos.

Para evitar conflictos de nombres de comando, el valor predeterminado para Export-PSSession es exportar todos los comandos, excepto los comandos que existen en la sesión actual. Puede usar el parámetro CommandName para especificar los comandos que se van a exportar.

El Export-PSSession cmdlet usa la característica de comunicación remota implícita de PowerShell. Al importar los comandos en la sesión actual, se ejecutan de manera implícita en la sesión original o en una sesión similar en el equipo de origen.

Ejemplos

Ejemplo 1: Exportación de comandos desde una PSSession

En este ejemplo se crea una nueva PSSession desde el equipo local al equipo Server01. Todos los comandos, excepto los que existen en la sesión actual, se exportan al módulo denominado Server01 en el equipo local. La exportación incluye los datos de formato de los comandos.

$S = New-PSSession -ComputerName Server01
Export-PSSession -Session $S -OutputModule Server01

El New-PSSession comando crea una PSSession en el equipo Server01. PsSession se almacena en la $S variable . El Export-PSSession comando exporta los comandos y los datos de formato de la $S variable al módulo Server01.

Ejemplo 2: Exportación de los comandos Get y Set

En este ejemplo se exporta todos los Get comandos y Set desde un servidor.

$S = New-PSSession -ConnectionUri https://exchange.microsoft.com/mailbox -Credential exchangeadmin01@hotmail.com -Authentication Negotiate
Export-PSSession -Session $S -Module exch* -CommandName Get-*, Set-* -FormatTypeName * -OutputModule $PSHOME\Modules\Exchange -Encoding ASCII

Estos comandos exportan los Get comandos y Set desde un complemento de Microsoft Exchange Server en un equipo remoto a un módulo de Exchange en el $PSHOME\Modules directorio del equipo local. Colocar el módulo en el $PSHOME\Modules directorio hace que sea accesible para todos los usuarios del equipo.

Ejemplo 3: Exportación de comandos desde un equipo remoto

En este ejemplo se exportan cmdlets desde una PSSession en un equipo remoto y se guardan en un módulo del equipo local. Los cmdlets del módulo se agregan a la sesión actual para que se puedan usar.

$S = New-PSSession -ComputerName Server01 -Credential Server01\User01
Export-PSSession -Session $S -OutputModule TestCmdlets -Type Cmdlet -CommandName *test* -FormatTypeName *
Remove-PSSession $S
Import-Module TestCmdlets
Get-Help Test*
Test-Files

El New-PSSession comando crea una PSSession en el equipo Server01 y la guarda en la $S variable . El Export-PSSession comando exporta los cmdlets cuyos nombres comienzan por Test desde PSSession en $S al módulo TestCmdlets del equipo local.

El Remove-PSSession cmdlet elimina la PSSession de $S de la sesión actual. Este comando muestra que la PSSession no debe estar activa para usar los comandos que se importaron desde la sesión. El Import-Module cmdlet agrega los cmdlets del módulo TestCmdlets a la sesión actual. El comando se puede ejecutar en cualquier sesión en cualquier momento.

El Get-Help cmdlet obtiene ayuda para los cmdlets cuyos nombres comienzan por Test. Después de agregar los comandos de un módulo a la sesión actual, puede usar los Get-Help cmdlets y Get-Command para obtener información sobre los comandos importados. El Test-Files cmdlet se exportó desde el equipo Server01 y se agregó a la sesión. El Test-Files cmdlet se ejecuta en una sesión remota en el equipo desde el que se importó el comando. PowerShell crea una sesión a partir de la información almacenada en el módulo TestCmdlets.

Ejemplo 4: Exportar y comandos clobber en la sesión actual

En este ejemplo se exporta comandos almacenados en una variable en la sesión actual.

Export-PSSession -Session $S -AllowClobber -OutputModule AllCommands

Este Export-PSSession comando exporta todos los comandos y todos los datos de formato de PSSession de la $S variable a la sesión actual. El parámetro AllowClobber incluye comandos con los mismos nombres que los comandos de la sesión actual.

Ejemplo 5: Exportación de comandos desde una PSSession cerrada

En este ejemplo se muestra cómo ejecutar los comandos exportados con opciones especiales cuando se cierra la PSSession que creó los comandos exportados.

Si se cierra la sesión remota original cuando se importa un módulo, el módulo usará cualquier sesión remota abierta que se conecte al equipo de origen. Si no hay ninguna sesión actual en el equipo de origen, el módulo restablecerá una sesión.

Para ejecutar comandos exportados con opciones especiales en una sesión remota, debe crear una sesión remota con esas opciones antes de importar el módulo. Uso del New-PSSession cmdlet con el parámetro SessionOption

$Options = New-PSSessionOption -NoMachineProfile
$S = New-PSSession -ComputerName Server01 -SessionOption $Options
Export-PSSession -Session $S -OutputModule Server01
Remove-PSSession $S
New-PSSession -ComputerName Server01 -SessionOption $Options
Import-Module Server01

El New-PSSessionOption cmdlet crea un objeto PSSessionOption y guarda el objeto en la $Options variable . El New-PSSession comando crea una PSSession en el equipo Server01. El parámetro SessionOption usa el objeto almacenado en $Options. La sesión se almacena en la $S variable .

El Export-PSSession cmdlet exporta comandos de PSSession en $S al módulo Server01. El Remove-PSSession cmdlet elimina la PSSession en la $S variable .

El New-PSSession cmdlet crea una nueva PSSession que se conecta al equipo Server01. El parámetro SessionOption usa el objeto almacenado en $Options. El Import-Module cmdlet importa los comandos desde el módulo Server01. Los comandos del módulo se ejecutan en PSSession en el equipo Server01.

Parámetros

-AllowClobber

Exporta los comandos especificados, aunque tengan los mismos nombres que los comandos de la sesión actual.

Si exporta un comando con el mismo nombre que un comando en la sesión actual, el comando exportado oculta o reemplaza los comandos originales. Para obtener más información, vea about_Command_Precedence.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ArgumentList

Exporta la variante del comando que resulta de usar los argumentos especificados (valores de parámetro).

Por ejemplo, para exportar la variante del Get-Item comando en la unidad certificate (Cert:) de PSSession en $S, escriba Export-PSSession -Session $S -Command Get-Item -ArgumentList cert:.

Type:Object[]
Aliases:Args
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Certificate

Especifica el certificado de cliente que se usa para firmar los archivos de formato (*. Format.ps1xml) o archivos de módulo de script (.psm1) en el módulo que Export-PSSession crea. Introduzca una variable que contenga un certificado o un comando o una expresión que obtenga el certificado.

Para buscar un certificado, use el Get-PfxCertificate cmdlet o use el Get-ChildItem cmdlet en la unidad Certificado (Cert:). Si el certificado no es válido o no tiene autoridad suficiente, el comando genera un error.

Type:X509Certificate2
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CommandName

Exporta solo los comandos con los nombres o patrones de nombre especificados. Se permiten los caracteres comodín. Use CommandName o su alias, Name.

De forma predeterminada, Export-PSSession exporta todos los comandos de PSSession, excepto los comandos que tienen los mismos nombres que los comandos de la sesión actual. Esto impide que los comandos se oculten o reemplacen por comandos en la sesión actual. Para exportar todos los comandos, incluso aquellos que ocultan o reemplazan otros comandos, use el parámetro AllowClobber .

Si usa el parámetro CommandName , los archivos de formato de los comandos no se exportan a menos que use el parámetro FormatTypeName . Del mismo modo, si usa el parámetro FormatTypeName , no se exportan comandos a menos que use el parámetro CommandName .

Type:String[]
Aliases:Name
Position:2
Default value:All commands in the session.
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-CommandType

Exporta solo los tipos especificados de los objetos de comando. Use CommandType o su alias, Type.

Los valores aceptables para este parámetro son los siguientes:

  • Alias: todos los alias de PowerShell de la sesión actual.
  • All: todos los tipos de comandos. Es el equivalente de Get-Command -Name *.
  • Application: todos los archivos que no sean archivos de PowerShell en las rutas de acceso enumeradas en la variable de entorno Path ($env:path), incluidos los archivos de .txt, .exe y .dll.
  • Cmdlet: los cmdlets de la sesión actual. El cmdlet es el valor predeterminado.
  • Configuration: una configuración de PowerShell. Para obtener más información, consulte about_Session_Configurations.
  • ExternalScript: todos los archivos .ps1 de las rutas de acceso enumeradas en la variable de entorno Path ($env:path).
  • Filter y Function: todas las funciones de PowerShell.
  • Script Bloques de script en la sesión actual.
  • Workflow Flujo de trabajo de PowerShell. Para obtener más información, consulte about_Workflows.

Estos valores se definen como una enumeración basada en marcas. Puede combinar varios valores para establecer varias marcas mediante este parámetro. Los valores se pueden pasar al parámetro CommandType como una matriz de valores o como una cadena separada por comas de esos valores. El cmdlet combinará los valores mediante una operación binary-OR. Pasar valores como una matriz es la opción más sencilla y también permite usar la finalización de tabulación en los valores.

Type:CommandTypes
Aliases:Type
Accepted values:Alias, All, Application, Cmdlet, Configuration, ExternalScript, Filter, Function, Script, Workflow
Position:Named
Default value:All commands in the session.
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Encoding

Especifica el tipo de codificación del archivo de destino. El valor predeterminado es utf8NoBOM.

Los valores aceptables para este parámetro son los siguientes:

  • ascii: usa la codificación para el juego de caracteres ASCII (7 bits).
  • ansi: usa la codificación para la página de códigos ANSI de la referencia cultural actual. Esta opción se agregó en PowerShell 7.4.
  • bigendianunicode: codifica en formato UTF-16 mediante el orden de bytes big-endian.
  • bigendianutf32: codifica en formato UTF-32 mediante el orden de bytes big-endian.
  • oem: usa la codificación predeterminada para los programas de consola y MS-DOS.
  • unicode: codifica en formato UTF-16 mediante el orden de bytes little-endian.
  • utf7: codifica en formato UTF-7.
  • utf8: codifica en formato UTF-8.
  • utf8BOM: codifica en formato UTF-8 con marca de orden de bytes (BOM)
  • utf8NoBOM: codifica en formato UTF-8 sin marca de orden de bytes (BOM)
  • utf32: codifica en formato UTF-32.

A partir de PowerShell 6.2, el parámetro Encoding también permite identificadores numéricos de páginas de códigos registradas (como -Encoding 1251) o nombres de cadena de páginas de códigos registradas (como -Encoding "windows-1251"). Para obtener más información, consulte la documentación de .NET para Encoding.CodePage.

A partir de PowerShell 7.4, puede usar el Ansi valor del parámetro Encoding para pasar el identificador numérico de la página de códigos ANSI de la referencia cultural actual sin tener que especificarlo manualmente.

Nota:

Ya no se recomienda usar UTF-7*. A partir de PowerShell 7.1, se escribe una advertencia si especifica utf7 para el parámetro Encoding .

Type:Encoding
Accepted values:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Position:Named
Default value:UTF8NoBOM
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Force

Sobrescribe uno o más archivos de salida existentes, aunque el archivo tenga el atributo de solo lectura.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FormatTypeName

Exporta las instrucciones de formato solo para los tipos de Microsoft .NET Framework especificados. Escriba los nombres de tipos. De forma predeterminada, Export-PSSession exporta instrucciones de formato para todos los tipos de .NET Framework que no están en el espacio de nombres System.Management.Automation .

El valor de este parámetro debe ser el nombre de un tipo devuelto por un Get-FormatData comando en la sesión desde la que se importan los comandos. Para obtener todos los datos de formato en la sesión remota, escriba *.

Si usa el parámetro FormatTypeName , no se exportan comandos a menos que use el parámetro CommandName .

Si usa el parámetro CommandName , los archivos de formato de los comandos no se exportan a menos que use el parámetro FormatTypeName .

Type:String[]
Position:3
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FullyQualifiedModule

El valor puede ser un nombre de módulo, una especificación de módulo completa o una ruta de acceso a un archivo de módulo.

Cuando el valor es una ruta de acceso, la ruta de acceso puede ser completa o relativa. Se resuelve una ruta de acceso relativa con respecto al script que contiene la instrucción using.

Cuando el valor es un nombre o especificación de módulo, PowerShell busca en el módulo especificado la psModulePath .

Una especificación de módulo es una tabla hash que tiene las siguientes claves.

  • ModuleName - Obligatorio Especifica el nombre del módulo.
  • GUID - Opcional Especifica el GUID del módulo.
  • También es necesario especificar al menos una de las tres claves siguientes.
    • ModuleVersion : especifica una versión mínima aceptable del módulo.
    • MaximumVersion : especifica la versión máxima aceptable del módulo.
    • RequiredVersion : especifica una versión exacta y necesaria del módulo. Esto no se puede usar con las otras claves de versión.

No se puede especificar el parámetro FullyQualifiedModule en el mismo comando que un parámetro Module . los dos parámetros son mutuamente excluyentes.

Type:ModuleSpecification[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Module

Exporta solo los comandos de los complementos y módulos de PowerShell especificados. Escriba los nombres de módulo y complemento. No se permiten caracteres comodín.

Para obtener más información, consulte Import-Module y about_PSSnapins.

Type:String[]
Aliases:PSSnapin
Position:Named
Default value:All commands in the session.
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-OutputModule

Especifica una ruta de acceso opcional y un nombre para el módulo creado por Export-PSSession. La ruta de acceso predeterminada es $HOME\Documents\WindowsPowerShell\Modules. Este parámetro es obligatorio.

Si el subdirectorio del módulo o cualquiera de los archivos que Export-PSSession crea ya existen, se produce un error en el comando. Para sobrescribir los archivos existentes, use el parámetro Force .

Type:String
Aliases:PSPath, ModuleName
Position:1
Default value:$HOME\Documents\WindowsPowerShell\Modules
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Session

Especifica la PSSession desde la que se exportan los comandos. Escriba una variable que contenga un objeto de sesión o un comando que obtenga un objeto de sesión, como un Get-PSSession comando. Este parámetro es obligatorio.

Type:PSSession
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

Entradas

None

No se pueden canalizar objetos a este cmdlet.

Salidas

FileInfo

Este cmdlet devuelve una lista de archivos que componen el módulo que creó.

Notas

Export-PSSession se basa en la infraestructura de comunicación remota de PowerShell. Para usar este cmdlet, el equipo debe estar configurado para comunicación remota. Para obtener más información, consulte about_Remote_Requirements.

No se puede usar Export-PSSession para exportar un proveedor de PowerShell.

Los comandos exportados se ejecutan implícitamente en la PSSession desde la que se exportaron. PowerShell controla completamente los detalles de la ejecución de los comandos de forma remota. Puede ejecutar los comandos exportados igual que ejecutaría comandos locales.

Export-ModuleMember captura y guarda información sobre la PSSession en el módulo que exporta. Si la PSSession desde la que se exportaron los comandos se cierra al importar el módulo y no hay PSSessions activas en el mismo equipo, los comandos del módulo intentan volver a crear la PSSession. Si se intenta volver a crear la PSSession, los comandos exportados no se ejecutarán.

La información de sesión que Export-ModuleMember captura y guarda en el módulo no incluye opciones de sesión, como las que se especifican en la $PSSessionOption variable de preferencia o mediante el parámetro SessionOption de los New-PSSessioncmdlets , Enter-PSSessiono Invoke-Command . Si la PSSession original está cerrada al importar el módulo, el módulo utilizará otra PSSession con el mismo equipo, si hay una disponible. Para que los comandos importados se puedan ejecutar en una sesión correctamente configurada, cree una PSSession con las opciones que quiera antes de importar el módulo.

Para buscar los comandos que se van a exportar, Export-PSSession usa el Invoke-Command cmdlet para ejecutar un Get-Command comando en PSSession. Para obtener y guardar datos de formato para los comandos, usa los Get-FormatData cmdlets y Export-FormatData . Es posible que vea mensajes de error de Invoke-Command, Get-Command, Get-FormatDatay Export-FormatData al ejecutar un Export-PSSession comando. Además, Export-PSSession no se pueden exportar comandos desde una sesión que no incluya los Get-Commandcmdlets , Get-FormatData, Select-Objecty Get-Help .

Export-PSSession usa el Write-Progress cmdlet para mostrar el progreso del comando. Puede ver la barra de progreso mientras se ejecuta el comando.

Los comandos exportados tienen las mismas limitaciones que otros comandos remotos, incluida la imposibilidad de iniciar un programa con una interfaz de usuario, como el Bloc de notas.

Dado que los perfiles de PowerShell no se ejecutan en PSSessions, los comandos que agrega un perfil a una sesión no están disponibles para Export-PSSession. Para exportar comandos desde un perfil, use un Invoke-Command comando para ejecutar el perfil en PSSession manualmente antes de exportar comandos.

El módulo que Export-PSSession crea podría incluir un archivo de formato, incluso si el comando no importa datos de formato. Si el comando no importa datos de formato, ninguno de los archivos de formato creados contendrá datos de formato.