Export-PSSession

Esporta i comandi da un'altra sessione e li salva in un modulo di PowerShell.

Sintassi

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>]

Descrizione

Il Export-PSSession cmdlet ottiene cmdlet, funzioni, alias e altri tipi di comando da un'altra sessione di PowerShell (PSSession) in un computer locale o remoto e li salva in un modulo di PowerShell. Per aggiungere i comandi dal modulo alla sessione corrente, usare il Import-Module cmdlet .

A differenza di Import-PSSession, che importa i comandi da un'altra sessione PSSession nella sessione corrente, Export-PSSession salva i comandi in un modulo. I comandi non vengono importati nella sessione corrente.

Per esportare i comandi, usare il New-PSSession cmdlet per creare una sessione PSSession con i comandi da esportare. Usare quindi il Export-PSSession cmdlet per esportare i comandi.

Per evitare conflitti di nomi di comando, l'impostazione predefinita per Export-PSSession consiste nell'esportare tutti i comandi, ad eccezione dei comandi presenti nella sessione corrente. È possibile usare il parametro CommandName per specificare i comandi da esportare.

Il Export-PSSession cmdlet usa la funzionalità di comunicazione remota implicita di PowerShell. Quando si importano i comandi nella sessione corrente, vengono eseguiti implicitamente nella sessione originale o in una sessione simile nel computer di origine.

Esempio

Esempio 1: Esportare i comandi da una sessione PSSession

In questo esempio viene creata una nuova sessione PSSession dal computer locale al computer Server01. Tutti i comandi, ad eccezione di quelli presenti nella sessione corrente, vengono esportati nel modulo denominato Server01 nel computer locale. L'esportazione include i dati di formattazione per i comandi.

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

Il New-PSSession comando crea una sessione PSSession nel computer Server01. La sessione PSSession viene archiviata nella $S variabile . Il Export-PSSession comando esporta i $S comandi della variabile e i dati di formattazione nel modulo Server01.

Esempio 2: Esportare i comandi Get e Set

In questo esempio vengono esportati tutti i Get comandi e Set da un server.

$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

Questi comandi esportano i Get comandi e Set da uno snap-in di Microsoft Exchange Server in un computer remoto in un modulo di Exchange nella $PSHOME\Modules directory del computer locale. L'inserimento del $PSHOME\Modules modulo nella directory rende accessibile a tutti gli utenti del computer.

Esempio 3: Esportare i comandi da un computer remoto

Questo esempio esporta i cmdlet da una sessione PSSession in un computer remoto e li salva in un modulo nel computer locale. I cmdlet del modulo vengono aggiunti alla sessione corrente in modo che possano essere usati.

$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

Il New-PSSession comando crea una sessione PSSession nel computer Server01 e la salva nella $S variabile . Il Export-PSSession comando esporta i cmdlet i cui nomi iniziano con Test dalla sessione PSSession in $S nel modulo TestCmdlets nel computer locale.

Il Remove-PSSession cmdlet elimina la sessione PSSession in $S dalla sessione corrente. Questo comando mostra che la sessione PSSession non deve essere attiva per usare i comandi importati dalla sessione. Il Import-Module cmdlet aggiunge i cmdlet nel modulo TestCmdlets alla sessione corrente. Il comando può essere eseguito in qualsiasi sessione in qualsiasi momento.

Il Get-Help cmdlet ottiene la Guida per i cmdlet i cui nomi iniziano con Test. Dopo aver aggiunto i comandi in un modulo alla sessione corrente, è possibile usare i Get-Help cmdlet e Get-Command per ottenere informazioni sui comandi importati. Il Test-Files cmdlet è stato esportato dal computer Server01 e aggiunto alla sessione. Il Test-Files cmdlet viene eseguito in una sessione remota nel computer da cui è stato importato il comando. PowerShell crea una sessione dalle informazioni archiviate nel modulo TestCmdlets.

Esempio 4: Esportare e clobber comandi nella sessione corrente

In questo esempio vengono esportati i comandi archiviati in una variabile nella sessione corrente.

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

Questo Export-PSSession comando esporta tutti i comandi e tutti i dati di formattazione dalla sessione PSSession nella $S variabile nella sessione corrente. Il parametro AllowClobber include comandi con gli stessi nomi dei comandi nella sessione corrente.

Esempio 5: Esportare i comandi da una sessione PSSession chiusa

In questo esempio viene illustrato come eseguire i comandi esportati con opzioni speciali quando la sessione PSSession che ha creato i comandi esportati viene chiusa.

Se la sessione remota originale viene chiusa quando viene importato un modulo, il modulo userà qualsiasi sessione remota aperta che si connette al computer di origine. Se non è presente alcuna sessione corrente nel computer di origine, il modulo ristabilirà una sessione.

Per eseguire comandi esportati con opzioni speciali in una sessione remota, è necessario creare una sessione remota con tali opzioni prima di importare il modulo. Usare il New-PSSession cmdlet con il parametro 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

Il New-PSSessionOption cmdlet crea un oggetto PSSessionOption e salva l'oggetto nella $Options variabile . Il New-PSSession comando crea una sessione PSSession nel computer Server01. Il parametro SessionOption usa l'oggetto archiviato in $Options. La sessione viene archiviata nella $S variabile .

Il Export-PSSession cmdlet esporta i comandi dalla sessione PSSession nel $S modulo Server01. Il Remove-PSSession cmdlet elimina la sessione PSSession nella $S variabile .

Il New-PSSession cmdlet crea una nuova sessione PSSession che si connette al computer Server01. Il parametro SessionOption usa l'oggetto archiviato in $Options. Il Import-Module cmdlet importa i comandi dal modulo Server01. I comandi nel modulo vengono eseguiti nella sessione PSSession nel computer Server01.

Parametri

-AllowClobber

Esporta i comandi specificati anche se hanno lo stesso nome dei comandi della sessione corrente.

Se si esporta un comando con lo stesso nome di un comando nella sessione corrente, il comando esportato nasconde o sostituisce i comandi originali. Per altre informazioni, vedere about_Command_Precedence.

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

-ArgumentList

Esporta la variante del comando generata usando gli argomenti specificati (valori del parametro).

Ad esempio, per esportare la variante del Get-Item comando nell'unità del certificato (Cert:) nella sessione PSSession in $S, digitare 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

Specifica il certificato client utilizzato per firmare i file di formato (*. Format.ps1xml) o file di modulo script (con estensione psm1) nel modulo creato Export-PSSession . Immettere una variabile che contiene un certificato oppure un comando o un'espressione che ottiene il certificato.

Per trovare un certificato, usare il Get-PfxCertificate cmdlet o usare il Get-ChildItem cmdlet nell'unità Certificato (Cert:). Se il certificato non è valido o non ha autorizzazioni sufficienti, il comando non riesce.

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

-CommandName

Esporta solo i comandi con i nomi o i modelli di nomi specificati. I caratteri jolly sono consentiti. Usare CommandName o il relativo alias, Name.

Per impostazione predefinita, Export-PSSession esporta tutti i comandi dalla sessione PSSession, ad eccezione dei comandi con gli stessi nomi dei comandi nella sessione corrente. In questo modo, i comandi non vengono nascosti o sostituiti da comandi nella sessione corrente. Per esportare tutti i comandi, anche quelli che nascondono o sostituiscono altri comandi, usare il parametro AllowClobber .

Se si utilizza il parametro CommandName , i file di formattazione per i comandi non vengono esportati a meno che non si usi il parametro FormatTypeName . Analogamente, se si usa il parametro FormatTypeName , non vengono esportati comandi a meno che non si usi il parametro 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

Esporta solo i tipi specificati di oggetti del comando. Usare CommandType o il relativo alias, Type.

I valori accettabili per questo parametro sono i seguenti:

  • Alias: tutti gli alias di PowerShell nella sessione corrente.
  • All: tutti i tipi di comando. Equivale a Get-Command -Name *.
  • Application: tutti i file diversi dai file di PowerShell nei percorsi elencati nella variabile di ambiente Path ($env:path), inclusi .txt, .exe e .dll file.
  • Cmdlet: cmdlet nella sessione corrente. Il cmdlet è l'impostazione predefinita.
  • Configuration: configurazione di PowerShell. Per altre informazioni, vedere about_Session_Configurations.
  • ExternalScript: tutti i file ps1 nei percorsi elencati nella variabile di ambiente Path ($env:path).
  • Filter e Function: tutte le funzioni di PowerShell.
  • Script Blocchi di script nella sessione corrente.
  • Workflow Flusso di lavoro di PowerShell. Per altre informazioni, vedere about_Workflows.

Questi valori sono definiti come enumerazione basata su flag. È possibile combinare più valori per impostare più flag usando questo parametro. I valori possono essere passati al parametro CommandType come matrice di valori o come stringa delimitata da virgole di tali valori. Il cmdlet combina i valori usando un'operazione binary-OR. Il passaggio di valori come matrice è l'opzione più semplice e consente anche di usare il completamento tramite tabulazione sui valori.

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

Specifica il tipo di codifica per il file di destinazione. Il valore predefinito è utf8NoBOM.

I valori accettabili per questo parametro sono i seguenti:

  • ascii: usa la codifica per il set di caratteri ASCII (a 7 bit).
  • ansi: usa la codifica per per la tabella codici ANSI delle impostazioni cultura correnti. Questa opzione è stata aggiunta in PowerShell 7.4.
  • bigendianunicode: codifica in formato UTF-16 usando l'ordine dei byte big-endian.
  • bigendianutf32: codifica in formato UTF-32 usando l'ordine dei byte big-endian.
  • oem: usa la codifica predefinita per i programmi MS-DOS e console.
  • unicode: codifica in formato UTF-16 usando l'ordine dei byte little-endian.
  • utf7: codifica in formato UTF-7.
  • utf8: codifica in formato UTF-8.
  • utf8BOM: codifica in formato UTF-8 con byte order mark (BOM)
  • utf8NoBOM: codifica in formato UTF-8 senza byte order mark (BOM)
  • utf32: codifica in formato UTF-32.

A partire da PowerShell 6.2, il parametro Encoding consente anche ID numerici di tabelle codici registrate (ad esempio ) o nomi di stringhe di tabelle codici registrate (ad esempio -Encoding 1251-Encoding "windows-1251"). Per altre informazioni, vedere la documentazione di .NET per Encoding.CodePage.

A partire da PowerShell 7.4, è possibile usare il Ansi valore per il parametro Encoding per passare l'ID numerico per la tabella codici ANSI delle impostazioni cultura correnti senza doverlo specificare manualmente.

Nota

UTF-7* non è più consigliato per l'uso. A partire da PowerShell 7.1, viene scritto un avviso se si specifica utf7 per il parametro 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

Sovrascrive uno o più file di output esistenti, anche se il file contiene l'attributo di sola lettura.

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

-FormatTypeName

Esporta le istruzioni di formattazione per i tipi specificati di Microsoft .NET Framework. Immettere i nomi dei tipi. Per impostazione predefinita, Export-PSSession esporta le istruzioni di formattazione per tutti i tipi .NET Framework che non si trovano nello spazio dei nomi System.Management.Automation .

Il valore di questo parametro deve essere il nome di un tipo restituito da un Get-FormatData comando nella sessione da cui vengono importati i comandi. Per ottenere tutti i dati di formattazione nella sessione remota, digitare *.

Se si utilizza il parametro FormatTypeName , non vengono esportati comandi a meno che non si usi il parametro CommandName .

Se si utilizza il parametro CommandName , i file di formattazione per i comandi non vengono esportati a meno che non si usi il parametro FormatTypeName .

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

-FullyQualifiedModule

Il valore può essere un nome di modulo, una specifica completa del modulo o un percorso di un file di modulo.

Quando il valore è un percorso, il percorso può essere completo o relativo. Un percorso relativo viene risolto rispetto allo script che contiene l'istruzione using.

Quando il valore è un nome o una specifica del modulo, PowerShell cerca il modulo specificato in PSModulePath .

Una specifica del modulo è una tabella hash con le chiavi seguenti.

  • ModuleName - Obbligatorio Specifica il nome del modulo.
  • GUID - Facoltativo Specifica il GUID del modulo.
  • È anche obbligatorio specificare almeno una delle tre chiavi seguenti.
    • ModuleVersion - Specifica una versione minima accettabile del modulo.
    • MaximumVersion - Specifica la versione massima accettabile del modulo.
    • RequiredVersion - Specifica una versione esatta e obbligatoria del modulo. Non è possibile usare questa opzione con le altre chiavi di versione.

Non è possibile specificare il parametro FullyQualifiedModule nello stesso comando di un parametro Module . i due parametri si escludono a vicenda.

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

-Module

Esporta solo i comandi negli snap-in e nei moduli di PowerShell specificati. Immettere i nomi degli snap-in e dei moduli. I caratteri jolly non sono consentiti.

Per altre informazioni, vedere 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

Specifica un percorso e un nome facoltativi per il modulo creato da Export-PSSession. Il percorso predefinito è $HOME\Documents\WindowsPowerShell\Modules. Questo parametro è obbligatorio.

Se la sottodirectory del modulo o uno qualsiasi dei file creati Export-PSSession esiste già, il comando ha esito negativo. Per sovrascrivere i file esistenti, usare il parametro 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

Specifica la sessione PSSession da cui vengono esportati i comandi. Immettere una variabile contenente un oggetto sessione o un comando che ottiene un oggetto sessione, ad esempio un Get-PSSession comando. Questo parametro è obbligatorio.

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

Input

None

Non è possibile inviare tramite pipe oggetti a questo cmdlet.

Output

FileInfo

Questo cmdlet restituisce un elenco di file che comprendono il modulo creato.

Note

Export-PSSession si basa sull'infrastruttura remota di PowerShell. Per usare questo cmdlet, il computer deve essere configurato per la comunicazione remota. Per altre informazioni, vedere about_Remote_Requirements.

Non è possibile usare Export-PSSession per esportare un provider di PowerShell.

I comandi esportati vengono eseguiti in modo implicito nella sessione PSSession da cui sono stati esportati. I dettagli dell'esecuzione remota dei comandi vengono gestiti interamente da PowerShell. È possibile eseguire i comandi esportati nello stesso modo dei comandi locali.

Export-ModuleMember acquisisce e salva informazioni sulla sessione PSSession nel modulo esportato. Se la sessione PSSession da cui sono stati esportati i comandi viene chiusa quando si importa il modulo e non sono presenti sessioni PSSession attive nello stesso computer, i comandi nel modulo tentano di ricreare la sessione PSSession. Se i tentativi di ricreare la sessione PSSession hanno esito negativo, i comandi esportati non verranno eseguiti.

Le informazioni sulla sessione acquisite Export-ModuleMember e salvate nel modulo non includono opzioni di sessione, ad esempio quelle specificate nella $PSSessionOption variabile di preferenza o usando il parametro SessionOption dei New-PSSessioncmdlet , Enter-PSSessiono Invoke-Command . Se la sessione PSSession originale è chiusa quando si importa il modulo, il modulo userà un'altra sessione PSSession nello stesso computer, se disponibile. Per consentire ai comandi importati di essere eseguiti in una sessione configurata correttamente, creare una sessione PSSession con le opzioni desiderate prima di importare il modulo.

Per trovare i comandi da esportare, Export-PSSession usa il Invoke-Command cmdlet per eseguire un Get-Command comando nella sessione PSSession. Per ottenere e salvare i dati di formattazione per i comandi, usa i Get-FormatData cmdlet e Export-FormatData . È possibile che vengano visualizzati messaggi di errore da Invoke-Command, Get-CommandGet-FormatData, e Export-FormatData quando si esegue un Export-PSSession comando. Inoltre, Export-PSSession non è possibile esportare i comandi da una sessione che non include i Get-Commandcmdlet , Get-FormatData, Select-Objecte Get-Help .

Export-PSSession usa il Write-Progress cmdlet per visualizzare lo stato di avanzamento del comando. È possibile che venga visualizzato l'indicatore di stato durante l'esecuzione del comando.

I comandi esportati hanno le stesse limitazioni degli altri comandi remoti, inclusa l'impossibilità di avviare un programma con un'interfaccia utente, ad esempio il Blocco note.

Poiché i profili di PowerShell non vengono eseguiti in PSSessions, i comandi aggiunti da un profilo a una sessione non sono disponibili per Export-PSSession. Per esportare i comandi da un profilo, usare un Invoke-Command comando per eseguire manualmente il profilo nella sessione PSSession prima di esportare i comandi.

Il modulo che Export-PSSession crea può includere un file di formattazione, anche se il comando non importa i dati di formattazione. I file di formattazione creati non conterranno dati di formattazione se il comando non li importa.