Condividi tramite


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 cmdlet Export-PSSession 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 cmdlet Import-Module.

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 cmdlet New-PSSession per creare una sessione PSSession con i comandi da esportare. Usare quindi il cmdlet Export-PSSession 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 cmdlet Export-PSSession usa la funzionalità di comunicazione remota implicita di PowerShell. Quando si importano comandi nella sessione corrente, vengono eseguiti in modo implicito 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 comando New-PSSession crea una sessione PSSession nel computer Server01. La sessione PSSession viene archiviata nella variabile $S. Il comando Export-PSSession esporta i comandi della variabile $S e la formattazione dei dati nel modulo Server01.

Esempio 2: Esportare i comandi Get e Set

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

$newSession = @{
    ConnectionUri = 'https://exchange.microsoft.com/mailbox'
    Credential = 'exchangeadmin01@hotmail.com'
    Authentication = 'Negotiate'
}
$S = New-PSSession @newSession

$exportSession = @{
    Session = $S
    Module = 'exch*'
    CommandName = 'Get-*', 'Set-*'
    FormatTypeName = '*'
    OutputModule = "$PSHOME\Modules\Exchange"
    Encoding = 'ascii'
}

Export-PSSession @exportSession

Questi comandi esportano i comandi Get e Set da uno snap-in di Microsoft Exchange Server in un computer remoto in un modulo di Exchange nella directory $PSHOME\Modules nel computer locale. L'inserimento del modulo nella directory $PSHOME\Modules lo 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.

$newSession = @{
    ComputerName = 'Server01'
    Credential = 'Server01\User01'
}
$S = New-PSSession @newSession

$exportSession = @{
    Session = $S
    OutputModule = 'TestCmdlets'
    Type = 'Cmdlet'
    CommandName = '*test*'
    FormatTypeName = '*'
}
Export-PSSession @exportSession

Remove-PSSession $S
Import-Module TestCmdlets
Get-Help Test*
Test-Files

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

Il cmdlet Remove-PSSession 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 cmdlet Import-Module aggiunge i cmdlet nel modulo TestCmdlets alla sessione corrente. Il comando può essere eseguito in qualsiasi sessione in qualsiasi momento.

Il cmdlet Get-Help 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 cmdlet Get-Help e Get-Command per informazioni sui comandi importati. Il cmdlet Test-Files è stato esportato dal computer Server01 e aggiunto alla sessione. Il cmdlet Test-Files 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 comando Export-PSSession esporta tutti i comandi e tutti i dati di formattazione dalla sessione PSSession nella variabile $S 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 cmdlet New-PSSession 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 cmdlet New-PSSessionOption crea un oggetto PSSessionOption e salva l'oggetto nella variabile $Options. Il comando New-PSSession crea una sessione PSSession nel computer Server01. Il parametro SessionOption usa l'oggetto archiviato in $Options. La sessione viene archiviata nella variabile $S.

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

Il cmdlet New-PSSession crea una nuova sessione PSSession che si connette al computer Server01. Il parametro SessionOption usa l'oggetto archiviato in $Options. Il cmdlet Import-Module 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 gli stessi nomi dei comandi nella 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.

Tipo:SwitchParameter
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-ArgumentList

Esporta la variante del comando risultante dall'uso degli argomenti specificati (valori dei parametri).

Ad esempio, per esportare la variante del comando Get-Item nell'unità del certificato (Cert:) nella sessione PSSession in $S, digitare Export-PSSession -Session $S -Command Get-Item -ArgumentList Cert:.

Tipo:Object[]
Alias:Args
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Certificate

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

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

Tipo:X509Certificate2
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-CommandName

Esporta solo i comandi con i nomi o i modelli di nome specificati. Sono consentiti caratteri jolly. Usare CommandName o il relativo alias Nome.

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 usa 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.

Tipo:String[]
Alias:Name
Posizione:2
Valore predefinito:All commands in the session.
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:True

-CommandType

Esporta solo i tipi specificati di oggetti 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, .exee .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 script nella sessione corrente.
  • Workflow un 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.

Tipo:CommandTypes
Alias:Type
Valori accettati:Alias, All, Application, Cmdlet, Configuration, ExternalScript, Filter, Function, Script, Workflow
Posizione:Named
Valore predefinito:All commands in the session.
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly: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 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 -Encoding 1251) o nomi di stringhe di tabelle codici registrate (ad esempio -Encoding "windows-1251"). Per altre informazioni, vedere la documentazione di .NET per Encoding.CodePage.

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

Nota

UTF-7 * non è più consigliabile usare. A partire da PowerShell 7.1, viene scritto un avviso se si specifica utf7 per il parametro Encoding.

Tipo:Encoding
Valori accettati:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Posizione:Named
Valore predefinito:UTF8NoBOM
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Force

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

Tipo:SwitchParameter
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-FormatTypeName

Esporta le istruzioni di formattazione solo per i tipi di Microsoft .NET Framework specificati. 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 comando Get-FormatData nella sessione da cui vengono importati i comandi. Per ottenere tutti i dati di formattazione nella sessione remota, digitare *.

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

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

Tipo:String[]
Posizione:3
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly: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 PSModulePath per il modulo specificato.

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.

Tipo:ModuleSpecification[]
Posizione:Named
Valore predefinito:None
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-Module

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

Per altre informazioni, vedere Import-Module e about_PSSnapins.

Tipo:String[]
Alias:PSSnapin
Posizione:Named
Valore predefinito:All commands in the session.
Necessario:False
Accettare l'input della pipeline:False
Accettare caratteri jolly: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 che Export-PSSession crea già esiste, il comando ha esito negativo. Per sovrascrivere i file esistenti, usare il parametro Force.

Tipo:String
Alias:PSPath, ModuleName
Posizione:1
Valore predefinito:$HOME\Documents\WindowsPowerShell\Modules
Necessario:True
Accettare l'input della pipeline:False
Accettare caratteri jolly: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 comando Get-PSSession. Questo parametro è obbligatorio.

Tipo:PSSession
Posizione:0
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:False
Accettare caratteri jolly: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 esattamente come si eseguirebbero i 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 che Export-ModuleMember acquisisce e salva nel modulo non includono opzioni di sessione, ad esempio quelle specificate nella variabile di preferenza $PSSessionOption o usando il parametro sessionOption dei cmdlet New-PSSession, Enter-PSSessiono Invoke-Command. Se la sessione PSSession originale viene chiusa quando si importa il modulo, il modulo userà un'altra sessione PSSession nello stesso computer, se disponibile. Per abilitare l'esecuzione dei comandi importati 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 cmdlet Invoke-Command per eseguire un comando Get-Command nella sessione PSSession. Per ottenere e salvare i dati di formattazione per i comandi, usa i cmdlet Get-FormatData e Export-FormatData. È possibile che vengano visualizzati messaggi di errore da Invoke-Command, Get-Command, Get-FormatDatae Export-FormatData quando si esegue un comando di Export-PSSession. Inoltre, Export-PSSession non è in grado di esportare comandi da una sessione che non include i cmdlet Get-Command, Get-FormatData, Select-Objecte Get-Help.

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

I comandi esportati presentano le stesse limitazioni di altri comandi remoti, inclusa l'impossibilità di avviare un programma con un'interfaccia utente, ad esempio 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 comando Invoke-Command per eseguire manualmente il profilo nella sessione PSSession prima di esportare i comandi.

Il modulo creato Export-PSSession potrebbe includere un file di formattazione, anche se il comando non importa i dati di formattazione. Se il comando non importa i dati di formattazione, i file di formattazione creati non conterranno dati di formattazione.