Поделиться через


Export-PSSession

Экспортирует команды из другого сеанса и сохраняет их в модуле PowerShell.

Синтаксис

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

Описание

Командлет Export-PSSession получает командлеты, функции, псевдонимы и другие типы команд из другого сеанса PowerShell (PSSession) на локальном или удаленном компьютере и сохраняет их в модуле PowerShell. Чтобы добавить команды из модуля в текущий сеанс, используйте Import-Module командлет.

В отличие Import-PSSessionот того, что импортирует команды из другого psSession в текущий сеанс, Export-PSSession сохраняет команды в модуле. Команды не импортируются в текущий сеанс.

Чтобы экспортировать команды, используйте New-PSSession командлет для создания PSSession с командами, которые необходимо экспортировать. Затем используйте Export-PSSession командлет для экспорта команд.

Чтобы предотвратить конфликты имен команд, по умолчанию Export-PSSession необходимо экспортировать все команды, кроме команд, которые существуют в текущем сеансе. Параметр CommandName можно использовать для указания команд для экспорта.

Командлет Export-PSSession использует неявную функцию удаленного взаимодействия PowerShell. При импорте команд в текущий сеанс они неявно выполняются в исходном сеансе или аналогичном сеансе на исходном компьютере.

Примеры

Пример 1. Экспорт команд из PSSession

В этом примере создается новая среда PSSession с локального компьютера на компьютер Server01. Все команды, кроме тех, которые существуют в текущем сеансе, экспортируются в модуль с именем Server01 на локальном компьютере. Экспорт включает данные форматирования для команд.

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

Команда New-PSSession создает PSSession на компьютере Server01. PsSession хранится в переменной $S . Команда Export-PSSession экспортирует $S команды переменной и форматирование данных в модуль Server01.

Пример 2. Экспорт команд Get и Set

В этом примере экспортируются все Get команды и Set команды с сервера.

$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

Эти команды экспортируют Get и Set команды из оснастки Microsoft Exchange Server на удаленном компьютере в модуль Exchange в $PSHOME\Modules каталоге на локальном компьютере. Размещение модуля в $PSHOME\Modules каталоге делает его доступным для всех пользователей компьютера.

Пример 3. Экспорт команд с удаленного компьютера

Этот пример экспортирует командлеты из PSSession на удаленном компьютере и сохраняет их в модуле на локальном компьютере. Командлеты из модуля добавляются в текущий сеанс, чтобы их можно было использовать.

$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

Команда New-PSSession создает PSSession на компьютере Server01 и сохраняет его в переменной $S . Команда Export-PSSession экспортирует командлеты, имена которых начинаются с test из PSSession в $S модуль TestCmdlets на локальном компьютере.

Командлет Remove-PSSession удаляет psSession из $S текущего сеанса. Эта команда показывает, что psSession не нужно использовать команды, импортированные из сеанса. Командлет Import-Module добавляет командлеты в модуль TestCmdlets в текущий сеанс. Команда может выполняться в любой сеанс в любое время.

Командлет Get-Help получает справку для командлетов, имена которых начинаются с test. После добавления команд в модуль в текущий сеанс можно использовать Get-Help команды и Get-Command командлеты, чтобы узнать об импортированных командах. Командлет Test-Files был экспортирован с компьютера Server01 и добавлен в сеанс. Командлет Test-Files выполняется в удаленном сеансе на компьютере, с которого была импортирована команда. PowerShell создает сеанс из сведений, хранящихся в модуле TestCmdlets.

Пример 4. Экспорт и команды clobber в текущем сеансе

В этом примере экспортируются команды, хранящиеся в переменной, в текущий сеанс.

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

Эта Export-PSSession команда экспортирует все команды и все данные форматирования из PSSession в переменную в $S текущий сеанс. Параметр AllowClobber содержит команды с теми же именами, что и команды в текущем сеансе.

Пример 5. Экспорт команд из закрытого PSSession

В этом примере показано, как выполнять экспортированные команды с особыми параметрами при закрытии PSSession, создавшего экспортированные команды.

Если исходный удаленный сеанс закрыт при импорте модуля, модуль будет использовать любой открытый удаленный сеанс, который подключается к исходному компьютеру. Если на исходном компьютере нет текущего сеанса, модуль повторно развернет сеанс.

Чтобы выполнить экспортированные команды с специальными параметрами в удаленном сеансе, необходимо создать удаленный сеанс с этими параметрами перед импортом модуля. Использование командлета с параметром New-PSSessionSessionOption

$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

Командлет New-PSSessionOption создает объект PSSessionOption и сохраняет объект в переменной $Options . Команда New-PSSession создает PSSession на компьютере Server01. Параметр SessionOption использует объект, хранящийся в $Options. Сеанс хранится в переменной $S .

Командлет Export-PSSession экспортирует команды из PSSession в $S модуль Server01. Командлет Remove-PSSession удаляет PSSession в переменной $S .

Командлет New-PSSession создает новую psSession, которая подключается к компьютеру Server01. Параметр SessionOption использует объект, хранящийся в $Options. Командлет Import-Module импортирует команды из модуля Server01. Команды в модуле выполняются в PSSession на компьютере Server01.

Параметры

-AllowClobber

Экспортирует указанные команды, даже если их имена совпадают с именами команд в текущем сеансе.

При экспорте команды с тем же именем, что и команда в текущем сеансе, экспортируемая команда скрывает или заменяет исходные команды. Дополнительные сведения см. в разделе about_Command_Precedence.

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

-ArgumentList

Экспортирует вариант команды, полученный с использованием заданных аргументов (значений параметров).

Например, чтобы экспортировать вариант Get-Item команды в диске сертификата (Cert:) в psSession в $Sтипе 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

Указывает сертификат клиента, используемый для подписи файлов формата (*). Format.ps1xml) или файлы модулей скрипта (PSM1) в модуле, который Export-PSSession создает. Введите переменную, которая содержит сертификат, или команду или выражение, которое возвращает сертификат.

Чтобы найти сертификат, используйте командлет или используйте Get-PfxCertificateGet-ChildItem командлет на диске Сертификата (Cert:). Если сертификат недопустимый или не имеет достаточных полномочий, команда завершается ошибкой.

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

-CommandName

Экспортирует только команды с указанными именами или шаблонами имен. Разрешено использовать подстановочные знаки. Используйте CommandName или его псевдоним, имя.

По умолчанию экспортирует все команды из PSSession, Export-PSSession кроме команд с теми же именами, что и команды в текущем сеансе. Это предотвращает скрытие или замена команд в текущем сеансе. Чтобы экспортировать все команды, даже те, которые скрывают или заменяют другие команды, используйте параметр AllowClobber .

Если вы используете параметр CommandName , файлы форматирования для команд не экспортируются, если только вы не используете параметр FormatTypeName . Аналогичным образом, если вы используете параметр FormatTypeName , команды не экспортируются, если вы не используете параметр 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

Экспортирует только указанные типы объектов команд. Используйте CommandType или его псевдоним Type.

Допустимые значения для этого параметра приведены следующим образом:

  • Alias: все псевдонимы PowerShell в текущем сеансе.
  • All: все типы команд. Это эквивалент Get-Command -Name *.
  • Application: все файлы, отличные от файлов PowerShell в путях, перечисленных в переменной среды path ($env:path), включая .txt, .exe и файлы .dll.
  • Cmdlet: командлеты в текущем сеансе. Командлет по умолчанию.
  • Configuration: конфигурация PowerShell. Дополнительные сведения см. в about_Session_Configurations.
  • ExternalScript: все PS1-файлы в путях, перечисленных в переменной среды Path ($env:path).
  • Filter и Function: все функции PowerShell.
  • Script Блоки скриптов в текущем сеансе.
  • Workflow Рабочий процесс PowerShell. Дополнительные сведения см. в about_Workflows.

Эти значения определяются как перечисление на основе флага. Можно объединить несколько значений, чтобы задать несколько флагов с помощью этого параметра. Значения можно передать параметру CommandType в виде массива значений или в виде строки, разделенной запятыми этих значений. Командлет объединяет значения с помощью операции binary-OR. Передача значений в виде массива является самым простым параметром, а также позволяет использовать завершение табуляции для значений.

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

Указывает тип кодировки для целевого файла. Значение по умолчанию — utf8NoBOM.

Допустимые значения для этого параметра приведены следующим образом:

  • ascii: использует кодировку для набора символов ASCII (7-разрядная версия).
  • ansi: использует кодировку для кодовой страницы ANSI текущего языка и региональных параметров. Этот параметр добавлен в PowerShell 7.4.
  • bigendianunicode: кодирует в формате UTF-16 с помощью порядка байтов больших байтов.
  • bigendianutf32: кодирует в формате UTF-32 с помощью порядка байтов больших байтов.
  • oem: использует кодировку по умолчанию для программ MS-DOS и консольных программ.
  • unicode: кодирует в формате UTF-16 с помощью байтового порядка байтов.
  • utf7: кодирует в формате UTF-7.
  • utf8: кодирует в формате UTF-8.
  • utf8BOM: кодирует в формате UTF-8 с меткой порядка байтов (BOM)
  • utf8NoBOM: кодирует в формате UTF-8 без метки порядка байтов (BOM)
  • utf32: кодирует в формате UTF-32.

Начиная с PowerShell 6.2, параметр кодирования также позволяет числовым идентификаторам зарегистрированных кодовых страниц (например) или строковым именам зарегистрированных кодовых страниц (например-Encoding "windows-1251"-Encoding 1251). Дополнительные сведения см. в документации по .NET для Encoding.CodePage.

Начиная с PowerShell 7.4, можно использовать Ansi значение параметра кодировки для передачи числового идентификатора для кодовой страницы ANSI текущего языка и региональных параметров без необходимости указывать его вручную.

Примечание.

UTF-7* больше не рекомендуется использовать. По состоянию на PowerShell 7.1 предупреждение записывается при указании utf7 параметра кодирования .

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

Перезаписывает один или несколько существующих выходных файлов, даже если для них задан атрибут "Только для чтения".

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

-FormatTypeName

Экспортирует инструкции форматирования только для указанных типов Microsoft .NET Framework. Введите имена типов. По умолчанию экспортирует инструкции по форматированию Export-PSSession для всех типов платформа .NET Framework, которые не находятся в пространстве имен System.Management.Automation.

Значение этого параметра должно быть именем типа, возвращаемого командой Get-FormatData в сеансе, из которого импортируются команды. Чтобы получить все данные форматирования в удаленном сеансе, введите *.

Если вы используете параметр FormatTypeName , команды не экспортируются, если вы не используете параметр CommandName .

Если вы используете параметр CommandName , файлы форматирования для команд не экспортируются, если только вы не используете параметр FormatTypeName .

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

-FullyQualifiedModule

Это значение может быть именем модуля, полной спецификацией модуля или путем к файлу модуля.

Если значение является путем, путь может быть полностью или относительным. Относительный путь разрешается относительно скрипта, содержащего инструкцию using.

Если значение является спецификацией имени или модуля, PowerShell выполняет поиск в PSModulePath для указанного модуля.

Спецификация модуля — это хэш-файл, имеющий следующие ключи.

  • ModuleName - Обязательный указывает имя модуля.
  • GUID - Необязательный атрибут указывает GUID модуля.
  • Также требуется указать по крайней мере один из трех приведенных ниже ключей.
    • ModuleVersion — задает минимальную допустимую версию модуля.
    • MaximumVersion — задает максимальную допустимую версию модуля.
    • RequiredVersion — указывает точную, требуемую версию модуля. Это нельзя использовать с другими ключами версии.

Невозможно указать параметр ПолностьюQualifiedModule в той же команде, что и параметр module . два параметра являются взаимоисключающими.

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

-Module

Экспортирует только команды в указанных оснастках и модулях PowerShell. Введите имена оснасток и модулей. Использовать подстановочные знаки запрещено.

Дополнительные сведения см. в about_PSSnapins Import-Module.

Type:String[]
Aliases:PSSnapin
Position:Named
Default value:All commands in the session.
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-OutputModule

Указывает необязательный путь и имя модуля, созданного Export-PSSession. По умолчанию используется путь $HOME\Documents\WindowsPowerShell\Modules. Этот параметр является обязательным.

Если подкаталог модуля или любой из файлов, создающих Export-PSSession уже существующие, команда завершается ошибкой. Чтобы перезаписать существующие файлы, используйте параметр 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

Указывает сеанс PSSession, из которого экспортируются команды. Введите переменную, содержащую объект сеанса или команду, которая получает объект сеанса, например Get-PSSession команду. Этот параметр является обязательным.

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

Входные данные

None

Невозможно передать объекты в этот командлет.

Выходные данные

FileInfo

Этот командлет возвращает список файлов, составляющих созданный модуль.

Примечания

Export-PSSession использует инфраструктуру удаленного взаимодействия PowerShell. Для использования этого командлета компьютер должен быть настроен для удаленного взаимодействия. Дополнительные сведения см. в about_Remote_Requirements.

Нельзя использовать Export-PSSession для экспорта поставщика PowerShell.

Экспортируемые команды выполняются неявно в сеансе PSSession, из которого они были экспортированы. Сведения о удаленном выполнении команд обрабатываются PowerShell полностью. Экспортируемые команды можно выполнять так же, как и локальные.

Export-ModuleMember записывает и сохраняет сведения о PSSession в модуле, который он экспортирует. Если psSession, из которого экспортируются команды, закрываются при импорте модуля и не существует активных PSSessions на тот же компьютер, команды в модуле пытаются воссоздать PSSession. Если попытка повторно создать psSession завершается ошибкой, экспортированные команды не будут выполняться.

Сведения о сеансе, которые Export-ModuleMember записывают и сохраняются в модуле, не включают параметры сеанса, такие как указанные в $PSSessionOption переменной предпочтения или с помощью параметра New-PSSessionSessionOption для командлетов Enter-PSSessionили Invoke-Command командлетов. Если при импорте модуля исходный сеанс PSSession закрыт, модуль будет использовать другой сеанс PSSession на том же компьютере, если такой доступен. Чтобы импортированные команды могли выполняться в правильно настроенном сеансе, создайте сеанс PSSession с нужными параметрами перед импортом модуля.

Чтобы найти команды для экспорта, Export-PSSession использует Invoke-Command командлет для выполнения Get-Command команды в PSSession. Для получения и сохранения данных форматирования для команд используется Get-FormatData и Export-FormatData командлеты. При выполнении команды могут отображаться сообщения об ошибках из Invoke-Command, Get-CommandGet-FormatDataи Export-FormatData при выполнении Export-PSSession команды. Кроме того, Export-PSSession нельзя экспортировать команды из сеанса, включающего Get-CommandGet-FormatDataкомандлеты , Select-Objectи Get-Help командлеты.

Export-PSSessionWrite-Progress использует командлет для отображения хода выполнения команды. Во время выполнения команды может отображаться индикатор выполнения .

К экспортированным командам применяются те же ограничения, что и к другим удаленным командам, включая невозможность запустить программу с пользовательским интерфейсом, например Блокнот.

Так как профили PowerShell не выполняются в PSSessions, команды, добавляемые в сеанс, недоступны Export-PSSession. Чтобы экспортировать команды из профиля, используйте Invoke-Command команду для запуска профиля в PSSession вручную перед экспортом команд.

Создаваемый модуль Export-PSSession может включать файл форматирования, даже если команда не импортирует данные форматирования. Если команда не импортирует данные форматирования, все создаваемые файлы форматирования не будут содержать данные форматирования.