Freigeben über


Export-PSSession

Exportiert Befehle aus einer anderen Sitzung und speichert sie in einem PowerShell-Modul.

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

Beschreibung

Das Export-PSSession Cmdlet ruft Cmdlets, Funktionen, Aliase und andere Befehlstypen aus einer anderen PowerShell-Sitzung (PSSession) auf einem lokalen oder Remotecomputer ab und speichert sie in einem PowerShell-Modul. Verwenden Sie Import-Module das Cmdlet, um die Befehle aus dem Modul zur aktuellen Sitzung hinzuzufügen.

Im Gegensatz zu Import-PSSession, bei dem Befehle aus einer anderen PSSession in die aktuelle Sitzung importiert werden, Export-PSSession werden die Befehle in einem Modul gespeichert. Die Befehle werden nicht in die aktuelle Sitzung importiert.

Verwenden Sie zum Exportieren von Befehlen das New-PSSession Cmdlet, um eine PSSession mit den Befehlen zu erstellen, die Sie exportieren möchten. Verwenden Sie dann das Export-PSSession Cmdlet, um die Befehle zu exportieren.

Um Konflikte mit dem Befehlsnamen zu vermeiden, wird standardmäßig für Export-PSSession alle Befehle exportiert, mit Ausnahme von Befehlen, die in der aktuellen Sitzung vorhanden sind. Sie können den Parameter CommandName verwenden, um die zu exportierenden Befehle anzugeben.

Das Export-PSSession Cmdlet verwendet das implizite Remotingfeature von PowerShell. Wenn Sie Befehle in die aktuelle Sitzung importieren, werden sie implizit in der ursprünglichen Sitzung oder in einer ähnlichen Sitzung auf dem Ursprungscomputer ausgeführt.

Beispiele

Beispiel 1: Exportieren von Befehlen aus einer PSSession

In diesem Beispiel wird eine neue PSSession vom lokalen Computer auf dem Computer Server01 erstellt. Alle Befehle, mit Ausnahme der Befehle, die in der aktuellen Sitzung vorhanden sind, werden in das Modul Mit dem Namen Server01 auf dem lokalen Computer exportiert. Der Export enthält die Formatierungsdaten für die Befehle.

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

Der New-PSSession Befehl erstellt eine PSSession auf dem Server01-Computer. Die PSSession wird in der $S Variablen gespeichert. Der Export-PSSession Befehl exportiert die Befehle und Formatierungsdaten der $S Variablen in das Modul Server01.

Beispiel 2: Exportieren der Befehle Get und Set

In diesem Beispiel werden alle Get Befehle und Set von einem Server exportiert.

$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

Diese Befehle exportieren die Get Befehle und Set aus einem Microsoft Exchange Server-Snap-In auf einem Remotecomputer in ein Exchange-Modul im $PSHOME\Modules Verzeichnis auf dem lokalen Computer. Wenn Sie das Modul im $PSHOME\Modules Verzeichnis platzieren, ist es für alle Benutzer des Computers zugänglich.

Beispiel 3: Exportieren von Befehlen von einem Remotecomputer

In diesem Beispiel werden Cmdlets aus einer PSSession auf einem Remotecomputer exportiert und in einem Modul auf dem lokalen Computer gespeichert. Die Cmdlets aus dem Modul werden der aktuellen Sitzung hinzugefügt, damit sie verwendet werden können.

$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

Der New-PSSession Befehl erstellt eine PSSession auf dem Server01-Computer und speichert sie in der $S Variablen. Der Export-PSSession Befehl exportiert die Cmdlets, deren Namen mit Test beginnen, aus der PSSession in $S in das Modul TestCmdlets auf dem lokalen Computer.

Das Remove-PSSession Cmdlet löscht die PSSession in $S aus der aktuellen Sitzung. Dieser Befehl zeigt, dass die PSSession nicht aktiv sein muss, um die Befehle zu verwenden, die aus der Sitzung importiert wurden. Das Import-Module Cmdlet fügt die Cmdlets im Modul TestCmdlets der aktuellen Sitzung hinzu. Der Befehl kann jederzeit in jeder Sitzung ausgeführt werden.

Das Get-Help Cmdlet erhält Hilfe für Cmdlets, deren Namen mit "Test" beginnen. Nachdem die Befehle in einem Modul der aktuellen Sitzung hinzugefügt wurden, können Sie die Get-Help Cmdlets und Get-Command verwenden, um mehr über die importierten Befehle zu erfahren. Das Test-Files Cmdlet wurde vom Server01-Computer exportiert und der Sitzung hinzugefügt. Das Test-Files Cmdlet wird in einer Remotesitzung auf dem Computer ausgeführt, von dem der Befehl importiert wurde. PowerShell erstellt eine Sitzung aus Informationen, die im TestCmdlets-Modul gespeichert sind.

Beispiel 4: Exportieren und Klonen von Befehlen in der aktuellen Sitzung

In diesem Beispiel werden Befehle, die in einer Variablen gespeichert sind, in die aktuelle Sitzung exportiert.

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

Dieser Export-PSSession Befehl exportiert alle Befehle und alle Formatierungsdaten aus der PSSession in der $S Variablen in die aktuelle Sitzung. Der Parameter AllowClobber enthält Befehle mit den gleichen Namen wie Befehle in der aktuellen Sitzung.

Beispiel 5: Exportieren von Befehlen aus einer geschlossenen PSSession

In diesem Beispiel wird gezeigt, wie die exportierten Befehle mit speziellen Optionen ausgeführt werden, wenn die PSSession, die die exportierten Befehle erstellt hat, geschlossen wird.

Wenn die ursprüngliche Remotesitzung beim Importieren eines Moduls geschlossen wird, verwendet das Modul jede geöffnete Remotesitzung, die eine Verbindung mit dem Ursprünglichen Computer herstellt. Wenn keine aktuelle Sitzung für den Ursprungscomputer vorhanden ist, richtet das Modul eine Sitzung erneut ein.

Um exportierte Befehle mit speziellen Optionen in einer Remotesitzung auszuführen, müssen Sie eine Remotesitzung mit diesen Optionen erstellen, bevor Sie das Modul importieren. Verwenden des Cmdlets New-PSSession mit dem Parameter 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

Das New-PSSessionOption Cmdlet erstellt ein PSSessionOption-Objekt und speichert das Objekt in der $Options Variablen. Der New-PSSession Befehl erstellt eine PSSession auf dem Server01-Computer. Der SessionOption-Parameter verwendet das in gespeicherte $OptionsObjekt. Die Sitzung wird in der $S Variablen gespeichert.

Das Export-PSSession Cmdlet exportiert Befehle aus der PSSession in $S in das Modul Server01. Das Remove-PSSession Cmdlet löscht die PSSession in der $S Variablen.

Das New-PSSession Cmdlet erstellt eine neue PSSession, die eine Verbindung mit dem Server01-Computer herstellt. Der SessionOption-Parameter verwendet das in gespeicherte $OptionsObjekt. Das Import-Module Cmdlet importiert die Befehle aus dem Modul Server01. Die Befehle im Modul werden in psSession auf dem Server01-Computer ausgeführt.

Parameter

-AllowClobber

Exportiert die angegebenen Befehle, auch wenn sie denselben Namen wie die Befehle in der aktuellen Sitzung haben.

Wenn Sie einen Befehl mit demselben Namen wie ein Befehl in der aktuellen Sitzung exportieren, blendet der exportierte Befehl die ursprünglichen Befehle aus oder ersetzt sie. Weitere Informationen finden Sie unter about_Command_Precedence.

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

-ArgumentList

Exportiert die Variante des Befehls, die sich aus der Verwendung der angegebenen Argumente (Parameterwerte) ergibt.

Um z. B. die Variante des Get-Item Befehls im Laufwerk zertifikat (Cert:) in psSession in $Szu exportieren, geben Sie ein 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

Gibt das Clientzertifikat an, das zum Signieren der Formatdateien (* verwendet wird. Format.ps1xml) oder Skriptmoduldateien (.psm1) in dem Modul, das erstellt wird Export-PSSession . Geben Sie eine Variable ein, die ein Zertifikat, einen Befehl oder einen Ausdruck enthält, durch die das Zertifikat abgerufen wird.

Um ein Zertifikat zu finden, verwenden Sie das Get-PfxCertificate Cmdlet oder das Get-ChildItem Cmdlet auf dem Laufwerk Certificate (Cert:). Wenn das Zertifikat ungültig ist oder keine qualifizierte Zertifizierungsstelle aufweist, verursacht der Befehl einen Fehler.

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

-CommandName

Exportiert nur die Befehle mit den angegebenen Namen oder Namensmustern. Platzhalter sind zulässig. Verwenden Sie CommandName oder den zugehörigen Alias Name.

Standardmäßig werden alle Befehle aus der PSSession mit Ausnahme von Befehlen exportiert, Export-PSSession die denselben Namen wie Befehle in der aktuellen Sitzung haben. Dadurch wird verhindert, dass Befehle in der aktuellen Sitzung ausgeblendet oder durch Befehle ersetzt werden. Verwenden Sie den AllowClobber-Parameter , um alle Befehle zu exportieren, auch solche, die andere Befehle ausblenden oder ersetzen.

Wenn Sie den Parameter CommandName verwenden, werden die Formatierungsdateien für die Befehle nur exportiert, wenn Sie den Parameter FormatTypeName verwenden. Ebenso werden bei Verwendung des FormatTypeName-Parameters keine Befehle exportiert, es sei denn, Sie verwenden den Parameter 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

Exportiert nur die angegebenen Typen von Befehlsobjekten. Verwenden Sie CommandType oder dessen Aliasname Type.

Die zulässigen Werte für diesen Parameter sind wie folgt:

  • Alias: Alle PowerShell-Aliase in der aktuellen Sitzung.
  • All: Alle Befehlstypen. Es ist das Äquivalent von Get-Command -Name *.
  • Application: Alle Dateien außer PowerShell-Dateien in Pfaden, die in der Path-Umgebungsvariable ($env:path) aufgeführt sind, einschließlich .txt, .exe und .dll Dateien.
  • Cmdlet: Die Cmdlets in der aktuellen Sitzung. Cmdlet ist die Standardeinstellung.
  • Configuration: Eine PowerShell-Konfiguration. Weitere Informationen finden Sie unter about_Session_Configurations.
  • ExternalScript: Alle .ps1 Dateien in den Pfaden, die in der Path-Umgebungsvariablen ($env:path) aufgeführt sind.
  • Filter und Function: Alle PowerShell-Funktionen.
  • Script Skriptblöcke in der aktuellen Sitzung.
  • Workflow Ein PowerShell-Workflow. Weitere Informationen finden Sie unter about_Workflows.

Diese Werte werden als flagbasierte Enumeration definiert. Mit diesem Parameter können Sie mehrere Werte kombinieren, um mehrere Flags festzulegen. Die Werte können als Array von Werten oder als durch Trennzeichen getrennte Zeichenfolge dieser Werte an den CommandType-Parameter übergeben werden. Das Cmdlet kombiniert die Werte mithilfe eines binary-OR-Vorgangs. Das Übergeben von Werten als Array ist die einfachste Option und ermöglicht es Ihnen auch, die Tabulatorvervollständigung für die Werte zu verwenden.

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

Gibt den Typ der Codierung für die Zieldatei an. Standardwert: utf8NoBOM.

Die zulässigen Werte für diesen Parameter sind wie folgt:

  • ascii: Verwendet die Codierung für den ASCII-Zeichensatz (7-Bit).
  • bigendianunicode: Codiert im UTF-16-Format mit der Big-Endian-Bytereihenfolge.
  • bigendianutf32: Codiert im UTF-32-Format mit der Big-Endian-Bytereihenfolge.
  • oem: Verwendet die Standardcodierung für MS-DOS- und Konsolenprogramme.
  • unicode: Codiert im UTF-16-Format unter Verwendung der Little-Endian-Bytereihenfolge.
  • utf7: Codiert im UTF-7-Format.
  • utf8: Codiert im UTF-8-Format.
  • utf8BOM: Codiert im UTF-8-Format mit Byte Order Mark (BOM)
  • utf8NoBOM: Codiert im UTF-8-Format ohne Byte order Mark (BOM)
  • utf32: Codiert im UTF-32-Format.

Ab PowerShell 6.2 lässt der Encoding-Parameter auch numerische IDs registrierter Codepages (z. B -Encoding 1251. ) oder Zeichenfolgennamen von registrierten Codepages (z. B -Encoding "windows-1251". ) zu. Weitere Informationen finden Sie in der .NET-Dokumentation für Encoding.CodePage.

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

Überschreibt eine oder mehrere vorhandene Ausgabedateien, auch wenn die Datei das Schreibschutzattribut aufweist.

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

-FormatTypeName

Exportiert Formatierungsanweisungen nur für die angegebenen Microsoft .NET Framework-Typen. Geben Sie die Typnamen ein. Standardmäßig exportiert Formatierungsanweisungen für alle .NET Framework Typen, Export-PSSession die sich nicht im System.Management.Automation-Namespace befinden.

Der Wert dieses Parameters muss der Name eines Typs sein, der von einem Get-FormatData Befehl in der Sitzung zurückgegeben wird, aus der die Befehle importiert werden. Um alle Formatierungsdaten in der Remotesitzung abzurufen, geben Sie ein *.

Wenn Sie den Parameter FormatTypeName verwenden, werden keine Befehle exportiert, es sei denn, Sie verwenden den Parameter CommandName .

Wenn Sie den Parameter CommandName verwenden, werden die Formatierungsdateien für die Befehle nur exportiert, wenn Sie den Parameter FormatTypeName verwenden.

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

-FullyQualifiedModule

Der Wert kann ein Modulname, eine vollständige Modulspezifikation oder ein Pfad zu einer Moduldatei sein.

Wenn der Wert ein Pfad ist, kann der Pfad voll qualifiziert oder relativ sein. Ein relativer Pfad wird relativ zum Skript aufgelöst, das die using-Anweisung enthält.

Wenn der Wert ein Name oder eine Modulspezifikation ist, durchsucht PowerShell den PSModulePath nach dem angegebenen Modul.

Eine Modulspezifikation ist eine Hashtabelle mit den folgenden Schlüsseln.

  • ModuleName - Erforderlich Gibt den Modulnamen an.
  • GUID - Optional Gibt die GUID des Moduls an.
  • Es ist auch erforderlich , mindestens einen der drei folgenden Schlüssel anzugeben.
    • ModuleVersion – Gibt eine zulässige Mindestversion des Moduls an.
    • MaximumVersion – Gibt die maximal zulässige Version des Moduls an.
    • RequiredVersion : Gibt eine genaue, erforderliche Version des Moduls an. Dies kann nicht mit den anderen Versionsschlüsseln verwendet werden.

Sie können den Parameter FullyQualifiedModule nicht im gleichen Befehl wie einen Module-Parameter angeben. die beiden Parameter schließen sich gegenseitig aus.

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

-Module

Exportiert nur die Befehle in den angegebenen PowerShell-Snap-Ins und Modulen. Geben Sie die Snap-In- und Modulnamen ein. Platzhalter sind nicht zulässig.

Weitere Informationen finden Sie unter Import-Module und 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

Gibt einen optionalen Pfad und Namen für das von Export-PSSessionerstellte Modul an. Der Standardpfad lautet $HOME\Documents\WindowsPowerShell\Modules. Dieser Parameter ist erforderlich.

Wenn das Modulunterverzeichnis oder eine der erstellten Dateien Export-PSSession bereits vorhanden ist, schlägt der Befehl fehl. Verwenden Sie den Force-Parameter , um vorhandene Dateien zu überschreiben.

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

-Session

Gibt die PSSession an, aus der die Befehle ausgeführt werden. Geben Sie eine Variable ein, die ein Sitzungsobjekt oder einen Befehl enthält, der ein Sitzungsobjekt abruft, z. B. einen Get-PSSession Befehl. Dieser Parameter ist erforderlich.

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

Eingaben

None

Sie können keine Objekte an dieses Cmdlet übergeben.

Ausgaben

FileInfo

Dieses Cmdlet gibt eine Liste der Dateien zurück, die das erstellte Modul umfassen.

Hinweise

Export-PSSession basiert auf der PowerShell-Remotinginfrastruktur. Um dieses Cmdlet zu verwenden, muss der Computer für Remoting konfiguriert werden. Weitere Informationen finden Sie unter about_Remote_Requirements.

Sie können nicht verwenden Export-PSSession , um einen PowerShell-Anbieter zu exportieren.

Exportierte Befehle werden implizit in der PSSession ausgeführt, aus der sie exportiert wurden. Die Details zur Remoteausführung der Befehle werden vollständig von PowerShell verarbeitet. Sie können die exportierten Befehle genau so ausführen, wie Sie lokale Befehle ausführen würden.

Export-ModuleMember erfasst und speichert Informationen zur PSSession in dem Modul, das exportiert wird. Wenn die PSSession, aus der die Befehle exportiert wurden, beim Importieren des Moduls geschlossen wird und keine aktiven PSSessions auf demselben Computer vorhanden sind, versuchen die Befehle im Modul, die PSSession neu zu erstellen. Wenn der Versuch, die PSSession neu zu erstellen, fehlschlägt, werden die exportierten Befehle nicht ausgeführt.

Die Sitzungsinformationen, die Export-ModuleMember im Modul erfasst und gespeichert werden, enthalten keine Sitzungsoptionen, z. B. die, die Sie in der $PSSessionOption Einstellungsvariablen oder mithilfe des SessionOption-Parameters des New-PSSessionCmdlets , Enter-PSSessionoder Invoke-Command angeben. Wenn die ursprüngliche PSSession geschlossen ist, wenn Sie das Modul importieren, verwendet das Modul eine andere PSSession auf dem gleichen Computer, falls verfügbar. Damit die importierten Befehle in einer korrekt konfigurierten Sitzung ausgeführt werden können, erstellen Sie eine PSSession mit den gewünschten Optionen, bevor Sie das Modul importieren.

Um die zu exportierenden Befehle zu finden, Export-PSSession verwendet das Invoke-Command Cmdlet, um einen Get-Command Befehl in der PSSession auszuführen. Zum Abrufen und Speichern von Formatierungsdaten für die Befehle werden die Get-FormatData Cmdlets und Export-FormatData verwendet. Möglicherweise werden Fehlermeldungen von Invoke-Command, Get-Command, Get-FormatDataund Export-FormatData angezeigt, wenn Sie einen Export-PSSession Befehl ausführen. Außerdem können Keine Befehle aus einer Sitzung exportiert werden, Export-PSSession die die Get-CommandCmdlets , Get-FormatData, Select-Objectund Get-Help nicht enthält.

Export-PSSession verwendet das Write-Progress Cmdlet, um den Status des Befehls anzuzeigen. Während der Befehlsausführung wird u. U. die Statusanzeige angezeigt.

Exportierte Befehle unterliegen denselben Einschränkungen wie andere Remotebefehle, z. B. die Unfähigkeit, ein Programm mit einer Benutzeroberfläche, wie z. B. Editor, zu starten.

Da PowerShell-Profile nicht in PSSessions ausgeführt werden, sind die Befehle, die ein Profil einer Sitzung hinzufügt, für nicht verfügbar Export-PSSession. Um Befehle aus einem Profil zu exportieren, verwenden Sie einen Invoke-Command Befehl, um das Profil in der PSSession vor dem Exportieren von Befehlen manuell auszuführen.

Das Modul, das erstellt, Export-PSSession kann eine Formatierungsdatei enthalten, auch wenn der Befehl keine Formatierungsdaten importiert. Wenn durch den Befehl keine Formatierungsdaten importiert werden, enthält keine der erstellten Formatierungsdateien Formatierungsdaten.