Partilhar via


Export-PSSession

Exporta comandos de outra sessão e os salva em um módulo do 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

O Export-PSSession cmdlet obtém cmdlets, funções, aliases e outros tipos de comando de outra sessão do PowerShell (PSSession) em um computador local ou remoto e os salva em um módulo do PowerShell. Para adicionar os comandos do módulo à sessão atual, use o Import-Module cmdlet.

Ao contrário Import-PSSessiondo , que importa comandos de outro PSSession para a sessão atual, Export-PSSession salva os comandos em um módulo. Os comandos não são importados para a sessão atual.

Para exportar comandos, use o New-PSSession cmdlet para criar uma PSSession que tenha os comandos que você deseja exportar. Em seguida, use o Export-PSSession cmdlet para exportar os comandos.

Para evitar conflitos de nome de comando, o padrão é Export-PSSession exportar todos os comandos, exceto os comandos existentes na sessão atual. Você pode usar o parâmetro CommandName para especificar os comandos a serem exportados.

O Export-PSSession cmdlet usa o recurso de comunicação remota implícita do PowerShell. Quando você importa comandos para a sessão atual, eles são executados implicitamente na sessão original ou em uma sessão semelhante no computador de origem.

Exemplos

Exemplo 1: Exportar comandos de uma PSSession

Este exemplo cria uma nova PSSession do computador local para o computador Server01. Todos os comandos, exceto aqueles que existem na sessão atual, são exportados para o módulo chamado Server01 no computador local. A exportação inclui os dados de formatação para os comandos.

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

O New-PSSession comando cria uma PSSession no computador Server01. O PSSession é armazenado na $S variável. O Export-PSSession comando exporta os comandos da variável e os $S dados de formatação para o módulo Server01.

Exemplo 2: Exportar os comandos Get e set

Este exemplo exporta todos os Get comandos e Set de um 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

Esses comandos exportam os Get comandos e Set de um snap-in do Microsoft Exchange Server em um computador remoto para um módulo do Exchange no $PSHOME\Modules diretório do computador local. Colocar o $PSHOME\Modules módulo no diretório torna-o acessível a todos os usuários do computador.

Exemplo 3: Exportar comandos de um computador remoto

Este exemplo exporta cmdlets de uma PSSession em um computador remoto e os salva em um módulo no computador local. Os cmdlets do módulo são adicionados à sessão atual para que possam ser usados.

$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

O New-PSSession comando cria uma PSSession no computador Server01 e a salva na $S variável. O Export-PSSession comando exporta os cmdlets cujos nomes começam com Test do PSSession in $S para o módulo TestCmdlets no computador local.

O Remove-PSSession cmdlet exclui a PSSession da $S sessão atual. Este comando mostra que o PSSession não precisa estar ativo para usar os comandos que foram importados da sessão. O Import-Module cmdlet adiciona os cmdlets no módulo TestCmdlets à sessão atual. O comando pode ser executado em qualquer sessão a qualquer momento.

O Get-Help cmdlet obtém ajuda para cmdlets cujos nomes começam com Test. Depois que os comandos em um módulo forem adicionados à sessão atual, você poderá usar os Get-Help cmdlets e Get-Command para aprender sobre os comandos importados. O Test-Files cmdlet foi exportado do computador Server01 e adicionado à sessão. O Test-Files cmdlet é executado em uma sessão remota no computador do qual o comando foi importado. O PowerShell cria uma sessão a partir de informações armazenadas no módulo TestCmdlets.

Exemplo 4: Comandos de exportação e clobber na sessão atual

Este exemplo exporta comandos armazenados em uma variável para a sessão atual.

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

Este Export-PSSession comando exporta todos os comandos e todos os dados de formatação da PSSession na variável para a $S sessão atual. O parâmetro AllowClobber inclui comandos com os mesmos nomes dos comandos da sessão atual.

Exemplo 5: Exportar comandos de uma PSSession fechada

Este exemplo mostra como executar os comandos exportados com opções especiais quando a PSSession que criou os comandos exportados é fechada.

Se a sessão remota original for fechada quando um módulo for importado, o módulo usará qualquer sessão remota aberta que se conecte ao computador de origem. Se não houver nenhuma sessão atual para o computador de origem, o módulo restabelecerá uma sessão.

Para executar comandos exportados com opções especiais em uma sessão remota, você deve criar uma sessão remota com essas opções antes de importar o módulo. Use o New-PSSession cmdlet com o 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

O New-PSSessionOption cmdlet cria um objeto PSSessionOption e salva o objeto na $Options variável. O New-PSSession comando cria uma PSSession no computador Server01. O parâmetro SessionOption usa o objeto armazenado em $Options. A sessão é armazenada na $S variável.

O Export-PSSession cmdlet exporta comandos do PSSession para $S o módulo Server01. O Remove-PSSession cmdlet exclui a PSSession na $S variável.

O New-PSSession cmdlet cria uma nova PSSession que se conecta ao computador Server01. O parâmetro SessionOption usa o objeto armazenado em $Options. O Import-Module cmdlet importa os comandos do módulo Server01. Os comandos no módulo são executados no PSSession no computador Server01.

Parâmetros

-AllowClobber

Exporta os comandos especificados, mesmo que eles tenham os mesmos nomes que os comandos na sessão atual.

Se você exportar um comando com o mesmo nome de um comando na sessão atual, o comando exportado ocultará ou substituirá os comandos originais. Para obter mais informações, consulte about_Command_Precedence.

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

-ArgumentList

Exporta a variante do comando que resulta do uso dos argumentos especificados (valores de parâmetro).

Por exemplo, para exportar a variante do Get-Item comando na unidade de certificado (Cert:) na PSSession em $S, digite 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 o certificado de cliente usado para assinar os arquivos de formato (*. Format.ps1xml) ou arquivos de módulo de script (.psm1) no módulo que Export-PSSession cria. Insira uma variável que contenha um certificado ou um comando ou expressão que obtenha o certificado.

Para localizar um certificado, use o Get-PfxCertificate cmdlet ou use o Get-ChildItem cmdlet na unidade Certificate (Cert:). Se o certificado não for válido ou não tiver autoridade suficiente, o comando falhará.

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

-CommandName

Exporta apenas os comandos com os nomes ou padrões de nome especificados. Curingas são permitidos. Use CommandName ou seu alias, Name.

Por padrão, exporta todos os comandos do PSSession, Export-PSSession exceto os comandos que têm os mesmos nomes que os comandos na sessão atual. Isso impede que os comandos sejam ocultos ou substituídos por comandos na sessão atual. Para exportar todos os comandos, mesmo aqueles que ocultam ou substituem outros comandos, use o parâmetro AllowClobber .

Se você usar o parâmetro CommandName , os arquivos de formatação para os comandos não serão exportados, a menos que você use o parâmetro FormatTypeName . Da mesma forma, se você usar o parâmetro FormatTypeName , nenhum comando será exportado, a menos que você use o 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 apenas os tipos especificados de objetos de comando. Use CommandType ou seu alias, Type.

Os valores aceitáveis para este parâmetro são os seguintes:

  • Alias: Todos os aliases do PowerShell na sessão atual.
  • All: Todos os tipos de comando. É o equivalente Get-Command -Name *a .
  • Application: Todos os arquivos que não sejam do PowerShell em caminhos listados na variável de ambiente Path ($env:path), incluindo arquivos .txt, .exe e .dll.
  • Cmdlet: Os cmdlets na sessão atual. Cmdlet é o padrão.
  • Configuration: Uma configuração do PowerShell. Para obter mais informações, consulte about_Session_Configurations.
  • ExternalScript: Todos os arquivos .ps1 nos caminhos listados na variável de ambiente Path ($env:path).
  • Filter e Function: Todas as funções do PowerShell.
  • Script Blocos de script na sessão atual.
  • Workflow Um fluxo de trabalho do PowerShell. Para obter mais informações, consulte about_Workflows.

Esses valores são definidos como uma enumeração baseada em sinalizador. Você pode combinar vários valores juntos para definir vários sinalizadores usando esse parâmetro. Os valores podem ser passados para o parâmetro CommandType como uma matriz de valores ou como uma cadeia de caracteres separada por vírgulas desses valores. O cmdlet combinará os valores usando uma operação binary-OR. Passar valores como uma matriz é a opção mais simples e também permite que você use o preenchimento de tabulação nos 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 o tipo de codificação para o arquivo de destino. O valor predefinido é utf8NoBOM.

Os valores aceitáveis para este parâmetro são os seguintes:

  • ascii: Usa a codificação para o conjunto de caracteres ASCII (7 bits).
  • ansi: Usa a codificação para a página de código ANSI da cultura atual. Essa opção foi adicionada no PowerShell 7.4.
  • bigendianunicode: Codifica no formato UTF-16 usando a ordem de bytes big-endian.
  • bigendianutf32: Codifica no formato UTF-32 usando a ordem de bytes big-endian.
  • oem: Usa a codificação padrão para MS-DOS e programas de console.
  • unicode: Codifica no formato UTF-16 usando a ordem de bytes little-endian.
  • utf7: Codifica em formato UTF-7.
  • utf8: Codifica em formato UTF-8.
  • utf8BOM: Codifica no formato UTF-8 com marca de ordem de bytes (BOM)
  • utf8NoBOM: Codifica no formato UTF-8 sem marca de ordem de bytes (BOM)
  • utf32: Codifica em formato UTF-32.

A partir do PowerShell 6.2, o parâmetro Encoding também permite IDs numéricas de páginas de código registradas (como -Encoding 1251) ou nomes de cadeia de caracteres de páginas de código registradas (como -Encoding "windows-1251"). Para obter mais informações, consulte a documentação do .NET para Encoding.CodePage.

A partir do PowerShell 7.4, você pode usar o Ansi valor do parâmetro Encoding para passar a ID numérica da página de código ANSI da cultura atual sem precisar especificá-la manualmente.

Nota

UTF-7* não é mais recomendado para usar. A partir do PowerShell 7.1, um aviso será escrito se você especificar utf7 para o 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

Substitui um ou mais arquivos de saída existentes, mesmo que o arquivo tenha o atributo somente leitura.

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

-FormatTypeName

Exporta instruções de formatação somente para os tipos especificados do Microsoft .NET Framework. Insira os nomes dos tipos. Por padrão, Export-PSSession exporta instruções de formatação para todos os tipos do .NET Framework que não estão no namespace System.Management.Automation .

O valor desse parâmetro deve ser o nome de um tipo retornado por um Get-FormatData comando na sessão da qual os comandos estão sendo importados. Para obter todos os dados de formatação na sessão remota, digite *.

Se você usar o parâmetro FormatTypeName , nenhum comando será exportado, a menos que você use o parâmetro CommandName .

Se você usar o parâmetro CommandName , os arquivos de formatação para os comandos não serão exportados, a menos que você use o parâmetro FormatTypeName .

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

-FullyQualifiedModule

O valor pode ser um nome de módulo, uma especificação de módulo completo ou um caminho para um arquivo de módulo.

Quando o valor é um caminho, o caminho pode ser totalmente qualificado ou relativo. Um caminho relativo é resolvido em relação ao script que contém a instrução using.

Quando o valor é um nome ou especificação de módulo, o PowerShell procura o módulo especificado no PSModulePath .

Uma especificação de módulo é uma hashtable que tem as seguintes chaves.

  • ModuleName - Obrigatório Especifica o nome do módulo.
  • GUID - Opcional Especifica o GUID do módulo.
  • Também é necessário especificar pelo menos uma das três chaves abaixo.
    • ModuleVersion - Especifica uma versão mínima aceitável do módulo.
    • MaximumVersion - Especifica a versão máxima aceitável do módulo.
    • RequiredVersion - Especifica uma versão exata e obrigatória do módulo. Isso não pode ser usado com as outras chaves de versão.

Não é possível especificar o parâmetro FullyQualifiedModule no mesmo comando que um parâmetro Module . os dois parâmetros excluem-se mutuamente.

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

-Module

Exporta apenas os comandos nos snap-ins e módulos especificados do PowerShell. Insira os nomes do snap-in e do módulo. Curingas não são permitidos.

Para obter mais informações, consulte Import-Module e 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 um caminho opcional e um nome para o módulo criado pelo Export-PSSession. O caminho padrão é $HOME\Documents\WindowsPowerShell\Modules. Este parâmetro é obrigatório.

Se o subdiretório do módulo ou qualquer um dos arquivos criados Export-PSSession já existir, o comando falhará. Para substituir arquivos existentes, use o 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 a PSSession da qual os comandos são exportados. Insira uma variável que contenha um objeto de sessão ou um comando que obtenha um objeto de sessão, como um Get-PSSession comando. Este parâmetro é obrigatório.

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

Entradas

None

Não é possível canalizar objetos para este cmdlet.

Saídas

FileInfo

Este cmdlet retorna uma lista de arquivos que compõem o módulo que ele criou.

Notas

Export-PSSession depende da infraestrutura remota do PowerShell. Para usar esse cmdlet, o computador deve ser configurado para comunicação remota. Para obter mais informações, consulte about_Remote_Requirements.

Você não pode usar Export-PSSession para exportar um provedor do PowerShell.

Os comandos exportados são executados implicitamente na PSSession da qual foram exportados. Os detalhes da execução remota dos comandos são tratados inteiramente pelo PowerShell. Você pode executar os comandos exportados da mesma forma que executaria os comandos locais.

Export-ModuleMember captura e salva informações sobre o PSSession no módulo que ele exporta. Se o PSSession do qual os comandos foram exportados for fechado quando você importar o módulo e não houver PSSessions ativos para o mesmo computador, os comandos no módulo tentarão recriar o PSSession. Se as tentativas de recriar o PSSession falharem, os comandos exportados não serão executados.

As informações de sessão que Export-ModuleMember capturam e salvam no módulo não incluem opções de sessão, como aquelas especificadas na $PSSessionOption variável de preferência ou usando o parâmetro SessionOption dos New-PSSessioncmdlets , Enter-PSSessionou Invoke-Command . Se o PSSession original for fechado quando você importar o módulo, o módulo usará outro PSSession para o mesmo computador, se houver um disponível. Para permitir que os comandos importados sejam executados em uma sessão configurada corretamente, crie uma PSSession com as opções desejadas antes de importar o módulo.

Para localizar os comandos a serem exportados, Export-PSSession use o Invoke-Command cmdlet para executar um Get-Command comando no PSSession. Para obter e salvar dados de formatação para os comandos, ele usa os Get-FormatData cmdlets e Export-FormatData . Poderá ver mensagens de erro de Invoke-Command, Get-Command, Get-FormatDatae Export-FormatData quando executa um Export-PSSession comando. Além disso, Export-PSSession não é possível exportar comandos de uma sessão que não inclua os Get-Commandcmdlets , Get-FormatData, Select-Objecte Get-Help .

Export-PSSession usa o Write-Progress cmdlet para exibir o progresso do comando. Você pode ver a barra de progresso enquanto o comando está em execução.

Os comandos exportados têm as mesmas limitações que outros comandos remotos, incluindo a incapacidade de iniciar um programa com uma interface de usuário, como o Bloco de Notas.

Como os perfis do PowerShell não são executados em PSSessions, os comandos que um perfil adiciona a uma sessão não estão disponíveis para Export-PSSession. Para exportar comandos de um perfil, use um Invoke-Command comando para executar o perfil no PSSession manualmente antes de exportar comandos.

O módulo que cria pode incluir um arquivo de formatação, mesmo que Export-PSSession o comando não importe dados de formatação. Se o comando não importar dados de formatação, os arquivos de formatação criados não conterão dados de formatação.