Udostępnij za pośrednictwem


Export-PSSession

Eksportuje polecenia z innej sesji i zapisuje je w module programu PowerShell.

Składnia

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

Opis

Polecenie cmdlet Export-PSSession pobiera polecenia cmdlet, funkcje, aliasy i inne typy poleceń z innej sesji programu PowerShell (PSSession) na komputerze lokalnym lub zdalnym i zapisuje je w module programu PowerShell. Aby dodać polecenia z modułu do bieżącej sesji, użyj polecenia cmdlet Import-Module.

W przeciwieństwie do Import-PSSession, który importuje polecenia z innej sesji PSSession do bieżącej sesji, Export-PSSession zapisuje polecenia w module. Polecenia nie są importowane do bieżącej sesji.

Aby wyeksportować polecenia, użyj polecenia cmdlet New-PSSession, aby utworzyć plik PSSession zawierający polecenia, które chcesz wyeksportować. Następnie użyj polecenia cmdlet Export-PSSession, aby wyeksportować polecenia.

Aby zapobiec konfliktom nazw poleceń, wartością domyślną dla Export-PSSession jest wyeksportowanie wszystkich poleceń, z wyjątkiem poleceń, które istnieją w bieżącej sesji. Aby określić polecenia do wyeksportowania, można użyć parametru CommandName.

Polecenie cmdlet Export-PSSession używa niejawnej funkcji komunikacji zdalnej programu PowerShell. Podczas importowania poleceń do bieżącej sesji są one uruchamiane niejawnie w oryginalnej sesji lub w podobnej sesji na komputerze źródłowym.

Przykłady

Przykład 1. Eksportowanie poleceń z programu PSSession

W tym przykładzie zostanie utworzona nowa usługa PSSession z komputera lokalnego na komputer Server01. Wszystkie polecenia, z wyjątkiem tych, które istnieją w bieżącej sesji, są eksportowane do modułu o nazwie Server01 na komputerze lokalnym. Eksport zawiera dane formatowania poleceń.

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

Polecenie New-PSSession tworzy pssession na komputerze Server01. Plik PSSession jest przechowywany w zmiennej $S. Polecenie Export-PSSession eksportuje polecenia $S zmiennej i formatuje dane do modułu Server01.

Przykład 2. Eksportowanie poleceń Get and Set

W tym przykładzie eksportuje wszystkie polecenia Get i Set z serwera.

$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

Te polecenia eksportują polecenia Get i Set z przystawki programu Microsoft Exchange Server na komputerze zdalnym do modułu programu Exchange w katalogu $PSHOME\Modules na komputerze lokalnym. Umieszczenie modułu w katalogu $PSHOME\Modules sprawia, że jest dostępny dla wszystkich użytkowników komputera.

Przykład 3. Eksportowanie poleceń z komputera zdalnego

Ten przykład eksportuje polecenia cmdlet z programu PSSession na komputerze zdalnym i zapisuje je w module na komputerze lokalnym. Polecenia cmdlet z modułu są dodawane do bieżącej sesji, aby można było ich używać.

$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

Polecenie New-PSSession tworzy pssession na komputerze Server01 i zapisuje go w zmiennej $S. Polecenie Export-PSSession eksportuje polecenia cmdlet, których nazwy zaczynają się od testu z programu PSSession w $S do modułu TestCmdlets na komputerze lokalnym.

Polecenie cmdlet Remove-PSSession usuwa program PSSession w $S z bieżącej sesji. To polecenie pokazuje, że sesja PSSession nie musi być aktywna, aby używać poleceń zaimportowanych z sesji. Polecenie cmdlet Import-Module dodaje polecenia cmdlet w module TestCmdlets do bieżącej sesji. Polecenie można uruchomić w dowolnej sesji w dowolnym momencie.

Polecenie cmdlet Get-Help otrzymuje pomoc dotyczącą poleceń cmdlet, których nazwy zaczynają się od testu. Po dodaniu poleceń w module do bieżącej sesji można użyć poleceń cmdlet Get-Help i Get-Command, aby dowiedzieć się więcej o zaimportowanych poleceniach. Polecenie cmdlet Test-Files zostało wyeksportowane z komputera Server01 i dodane do sesji. Polecenie cmdlet Test-Files jest uruchamiane w sesji zdalnej na komputerze, z którego zostało zaimportowane polecenie. Program PowerShell tworzy sesję na podstawie informacji przechowywanych w module TestCmdlets.

Przykład 4. Eksportowanie i klonowanie poleceń w bieżącej sesji

Ten przykład eksportuje polecenia przechowywane w zmiennej do bieżącej sesji.

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

To polecenie Export-PSSession eksportuje wszystkie polecenia i wszystkie dane formatowania z psSession w zmiennej $S do bieżącej sesji. Parametr AllowClobber zawiera polecenia o takich samych nazwach jak polecenia w bieżącej sesji.

Przykład 5. Eksportowanie poleceń z zamkniętego programu PSSession

W tym przykładzie pokazano, jak uruchomić wyeksportowane polecenia z opcjami specjalnymi, gdy program PSSession, który utworzył wyeksportowane polecenia, zostanie zamknięty.

Jeśli oryginalna sesja zdalna zostanie zamknięta po zaimportowaniu modułu, moduł użyje dowolnej otwartej sesji zdalnej łączącej się z komputerem źródłowym. Jeśli nie ma bieżącej sesji na komputerze źródłowym, moduł ponownie opublikuje sesję.

Aby uruchomić wyeksportowane polecenia z opcjami specjalnymi w sesji zdalnej, należy utworzyć sesję zdalną z tymi opcjami przed zaimportowanie modułu. Użyj polecenia cmdlet New-PSSession z parametrem 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

Polecenie cmdlet New-PSSessionOption tworzy obiekt PSSessionOption i zapisuje obiekt w zmiennej $Options. Polecenie New-PSSession tworzy pssession na komputerze Server01. Parametr SessionOption używa obiektu przechowywanego w $Options. Sesja jest przechowywana w zmiennej $S.

Polecenie cmdlet Export-PSSession eksportuje polecenia z programu PSSession w $S do modułu Server01. Polecenie cmdlet Remove-PSSession usuwa plik PSSession w zmiennej $S.

Polecenie cmdlet New-PSSession tworzy nową konsolę PSSession łączącą się z komputerem Server01. Parametr SessionOption używa obiektu przechowywanego w $Options. Polecenie cmdlet Import-Module importuje polecenia z modułu Server01. Polecenia w module są uruchamiane w programie PSSession na komputerze Server01.

Parametry

-AllowClobber

Eksportuje określone polecenia, nawet jeśli mają takie same nazwy jak polecenia w bieżącej sesji.

Jeśli eksportujesz polecenie o takiej samej nazwie jak polecenie w bieżącej sesji, wyeksportowane polecenie ukrywa lub zastępuje oryginalne polecenia. Aby uzyskać więcej informacji, zobacz about_Command_Precedence.

Typ:SwitchParameter
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-ArgumentList

Eksportuje wariant polecenia, który wynika z używania określonych argumentów (wartości parametrów).

Aby na przykład wyeksportować wariant polecenia Get-Item na dysku certyfikatu (Cert:) w programie PSSession w $S, wpisz Export-PSSession -Session $S -Command Get-Item -ArgumentList cert:.

Typ:Object[]
Aliasy:Args
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-Certificate

Określa certyfikat klienta używany do podpisywania plików formatu (*). Format.ps1xml) lub pliki modułów skryptu (psm1) w module, który Export-PSSession tworzy. Wprowadź zmienną zawierającą certyfikat lub polecenie lub wyrażenie, które pobiera certyfikat.

Aby znaleźć certyfikat, użyj polecenia cmdlet Get-PfxCertificate lub użyj polecenia cmdlet Get-ChildItem na dysku Certyfikat (Cert:). Jeśli certyfikat jest nieprawidłowy lub nie ma wystarczającego urzędu, polecenie kończy się niepowodzeniem.

Typ:X509Certificate2
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-CommandName

Eksportuje tylko polecenia z określonymi nazwami lub wzorcami nazw. Dozwolone są symbole wieloznaczne. Użyj CommandName lub aliasu Nazwa.

Domyślnie Export-PSSession eksportuje wszystkie polecenia z psSession z wyjątkiem poleceń o takich samych nazwach jak polecenia w bieżącej sesji. Zapobiega to ukrywaniu lub zastępowaniu poleceń w bieżącej sesji. Aby wyeksportować wszystkie polecenia, nawet te, które ukrywają lub zastępują inne polecenia, użyj parametru AllowClobber.

Jeśli używasz parametru CommandName, pliki formatowania poleceń nie zostaną wyeksportowane, chyba że zostanie użyty parametr FormatTypeName. Podobnie, jeśli używasz parametru FormatTypeName, żadne polecenia nie są eksportowane, chyba że używasz parametru CommandName.

Typ:String[]
Aliasy:Name
Position:2
Domyślna wartość:All commands in the session.
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:True

-CommandType

Eksportuje tylko określone typy obiektów poleceń. Użyj CommandType lub jego aliasu, typ.

Dopuszczalne wartości tego parametru są następujące:

  • Alias: wszystkie aliasy programu PowerShell w bieżącej sesji.
  • All: wszystkie typy poleceń. Jest to odpowiednik Get-Command -Name *.
  • Application: wszystkie pliki inne niż pliki programu PowerShell w ścieżkach wymienionych w zmiennej środowiskowej Path ($env:path), w tym .txt, .exei .dll plików.
  • Cmdlet: polecenia cmdlet w bieżącej sesji. Polecenie cmdlet jest wartością domyślną.
  • Configuration: konfiguracja programu PowerShell. Aby uzyskać więcej informacji, zobacz about_Session_Configurations.
  • ExternalScript: wszystkie pliki .ps1 w ścieżkach wymienionych w zmiennej środowiskowej Path ($env:path).
  • Filter i Function: wszystkie funkcje programu PowerShell.
  • Script bloki skryptu w bieżącej sesji.
  • Workflow przepływ pracy programu PowerShell. Aby uzyskać więcej informacji, zobacz about_Workflows.

Te wartości są definiowane jako wyliczenie oparte na flagach. Możesz połączyć wiele wartości ze sobą, aby ustawić wiele flag przy użyciu tego parametru. Wartości można przekazać do parametru CommandType jako tablicy wartości lub jako ciąg rozdzielany przecinkami tych wartości. Polecenie cmdlet połączy wartości przy użyciu operacji binary-OR. Przekazywanie wartości jako tablicy jest najprostszą opcją, a także umożliwia użycie uzupełniania tabulatorów na wartościach.

Typ:CommandTypes
Aliasy:Type
Dopuszczalne wartości:Alias, All, Application, Cmdlet, Configuration, ExternalScript, Filter, Function, Script, Workflow
Position:Named
Domyślna wartość:All commands in the session.
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-Encoding

Określa typ kodowania dla pliku docelowego. Wartość domyślna to utf8NoBOM.

Dopuszczalne wartości tego parametru są następujące:

  • ascii: używa kodowania zestawu znaków ASCII (7-bitowych).
  • ansi: używa kodowania dla strony kodowej ANSI bieżącej kultury. Ta opcja została dodana w programie PowerShell 7.4.
  • bigendianunicode: koduje w formacie UTF-16 przy użyciu kolejności bajtów big-endian.
  • bigendianutf32: Koduje w formacie UTF-32 przy użyciu kolejności bajtów big-endian.
  • oem: używa domyślnego kodowania dla programów MS-DOS i konsoli.
  • unicode: Koduje w formacie UTF-16 przy użyciu kolejności bajtów little-endian.
  • utf7: koduje w formacie UTF-7.
  • utf8: koduje w formacie UTF-8.
  • utf8BOM: koduje w formacie UTF-8 za pomocą znacznika kolejności bajtów (BOM)
  • utf8NoBOM: koduje w formacie UTF-8 bez znaku kolejności bajtów (BOM)
  • utf32: koduje w formacie UTF-32.

Począwszy od programu PowerShell 6.2, Kodowanie parametr umożliwia również numeryczne identyfikatory zarejestrowanych stron kodu (na przykład -Encoding 1251) lub nazwy ciągów zarejestrowanych stron kodu (na przykład -Encoding "windows-1251"). Aby uzyskać więcej informacji, zobacz dokumentację platformy .NET dotyczącą Encoding.CodePage.

Począwszy od programu PowerShell 7.4, można użyć wartości Ansi parametru kodowania, aby przekazać identyfikator liczbowy dla strony kodowej ANSI bieżącej kultury bez konieczności ręcznego określania go.

Nuta

UTF-7 * nie jest już zalecane. Zgodnie z programem PowerShell 7.1 ostrzeżenie jest zapisywane, jeśli określisz utf7 dla parametru kodowania.

Typ:Encoding
Dopuszczalne wartości:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Position:Named
Domyślna wartość:UTF8NoBOM
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-Force

Zastępuje co najmniej jeden istniejący plik wyjściowy, nawet jeśli plik ma atrybut tylko do odczytu.

Typ:SwitchParameter
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-FormatTypeName

Eksportuje instrukcje formatowania tylko dla określonych typów programu Microsoft .NET Framework. Wprowadź nazwy typów. Domyślnie Export-PSSession eksportuje instrukcje formatowania dla wszystkich typów programu .NET Framework, które nie znajdują się w przestrzeni nazw System.Management.Automation.

Wartość tego parametru musi być nazwą typu zwracanego przez polecenie Get-FormatData w sesji, z której importowane są polecenia. Aby pobrać wszystkie dane formatowania w sesji zdalnej, wpisz *.

Jeśli używasz parametru FormatTypeName, żadne polecenia nie są eksportowane, chyba że używasz parametru CommandName.

Jeśli używasz parametru CommandName, pliki formatowania poleceń nie zostaną wyeksportowane, chyba że zostanie użyty parametr FormatTypeName.

Typ:String[]
Position:3
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-FullyQualifiedModule

Wartość może być nazwą modułu, pełną specyfikacją modułu lub ścieżką do pliku modułu.

Gdy wartość jest ścieżką, ścieżka może być w pełni kwalifikowana lub względna. Ścieżka względna jest rozpoznawana względem skryptu zawierającego instrukcję using.

Gdy wartość jest nazwą lub specyfikacją modułu, program PowerShell przeszukuje PSModulePath dla określonego modułu.

Specyfikacja modułu to tabela skrótu zawierająca następujące klucze.

  • ModuleName - Wymagane Określa nazwę modułu.
  • GUID - Opcjonalne Określa identyfikator GUID modułu.
  • Jest to również wymagane, aby określić co najmniej jeden z trzech poniższych kluczy.
    • ModuleVersion — określa minimalną akceptowalną wersję modułu.
    • MaximumVersion — określa maksymalną akceptowalną wersję modułu.
    • RequiredVersion — określa dokładną, wymaganą wersję modułu. Nie można tego używać z innymi kluczami wersji.

Nie można określić parametru FullyQualifiedModule w tym samym poleceniu co parametr Module. te dwa parametry wykluczają się wzajemnie.

Typ:ModuleSpecification[]
Position:Named
Domyślna wartość:None
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-Module

Eksportuje tylko polecenia w określonych przystawkach i modułach programu PowerShell. Wprowadź nazwy przystawki i modułów. Symbole wieloznaczne nie są dozwolone.

Aby uzyskać więcej informacji, zobacz Import-Module i about_PSSnapins.

Typ:String[]
Aliasy:PSSnapin
Position:Named
Domyślna wartość:All commands in the session.
Wymagane:False
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-OutputModule

Określa opcjonalną ścieżkę i nazwę modułu utworzonego przez Export-PSSession. Ścieżka domyślna to $HOME\Documents\WindowsPowerShell\Modules. Ten parametr jest wymagany.

Jeśli podkatalog modułu lub którykolwiek z plików, które Export-PSSession już istnieją, polecenie zakończy się niepowodzeniem. Aby zastąpić istniejące pliki, użyj parametru Force.

Typ:String
Aliasy:PSPath, ModuleName
Position:1
Domyślna wartość:$HOME\Documents\WindowsPowerShell\Modules
Wymagane:True
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

-Session

Określa pssession, z którego polecenia są eksportowane. Wprowadź zmienną zawierającą obiekt sesji lub polecenie, które pobiera obiekt sesji, na przykład polecenie Get-PSSession. Ten parametr jest wymagany.

Typ:PSSession
Position:0
Domyślna wartość:None
Wymagane:True
Akceptowanie danych wejściowych potoku:False
Akceptowanie symboli wieloznacznych:False

Dane wejściowe

None

Nie można potokować obiektów do tego polecenia cmdlet.

Dane wyjściowe

FileInfo

To polecenie cmdlet zwraca listę plików składających się na utworzony moduł.

Uwagi

Export-PSSession opiera się na infrastrukturze komunikacji zdalnej programu PowerShell. Aby użyć tego polecenia cmdlet, komputer musi być skonfigurowany do komunikacji zdalnie. Aby uzyskać więcej informacji, zobacz about_Remote_Requirements.

Nie można użyć Export-PSSession do wyeksportowania dostawcy programu PowerShell.

Wyeksportowane polecenia są uruchamiane niejawnie w programie PSSession, z którego zostały wyeksportowane. Szczegóły uruchamiania poleceń zdalnie są obsługiwane w całości przez program PowerShell. Wyeksportowane polecenia można uruchamiać tak samo, jak w przypadku uruchamiania poleceń lokalnych.

Export-ModuleMember przechwytuje i zapisuje informacje o psSession w module, który eksportuje. Jeśli moduł PSSession, z którego wyeksportowano polecenia, zostanie zamknięty podczas importowania modułu i nie ma żadnych aktywnych psSessions na tym samym komputerze, polecenia w module próbują ponownie utworzyć psSession. Jeśli próba ponownego utworzenia pliku PSSession zakończy się niepowodzeniem, wyeksportowane polecenia nie zostaną uruchomione.

Informacje o sesji, które Export-ModuleMember przechwytuje i zapisuje w module, nie zawierają opcji sesji, takich jak te określone w zmiennej preferencji $PSSessionOption lub przy użyciu parametru SessionOptionNew-PSSession, Enter-PSSessionlub Invoke-Command poleceń cmdlet. Jeśli oryginalne narzędzie PSSession zostanie zamknięte podczas importowania modułu, moduł użyje innego programu PSSession na tym samym komputerze, jeśli jest dostępny. Aby włączyć zaimportowane polecenia do uruchamiania w poprawnie skonfigurowanej sesji, utwórz sesję PSSession z opcjami, które chcesz wykonać przed zaimportowaniem modułu.

Aby znaleźć polecenia do wyeksportowania, Export-PSSession używa polecenia cmdlet Invoke-Command do uruchomienia polecenia Get-Command w programie PSSession. Aby pobrać i zapisać dane formatowania dla poleceń, używa Get-FormatData i Export-FormatData poleceń cmdlet. Podczas uruchamiania polecenia Invoke-Command mogą zostać wyświetlone komunikaty o błędach z Get-Command, Get-FormatData, Export-FormatDatai Export-PSSession. Ponadto Export-PSSession nie może eksportować poleceń z sesji, która nie zawiera poleceń cmdlet Get-Command, Get-FormatData, Select-Objecti Get-Help.

Export-PSSession używa polecenia cmdlet Write-Progress do wyświetlania postępu polecenia. Może zostać wyświetlony pasek postępu, gdy polecenie jest uruchomione.

Wyeksportowane polecenia mają takie same ograniczenia jak inne polecenia zdalne, w tym brak możliwości uruchomienia programu za pomocą interfejsu użytkownika, takiego jak Notatnik.

Ponieważ profile programu PowerShell nie są uruchamiane w programie PSSessions, polecenia, które dodaje profil do sesji, nie są dostępne dla Export-PSSession. Aby wyeksportować polecenia z profilu, przed wyeksportowaniem poleceń użyj polecenia Invoke-Command, aby uruchomić profil w programie PSSession ręcznie.

Moduł, który Export-PSSession tworzy, może zawierać plik formatowania, nawet jeśli polecenie nie importuje danych formatowania. Jeśli polecenie nie importuje danych formatowania, żadne utworzone pliki formatowania nie będą zawierać danych formatowania.