Поиск по сайту:

Export-PSSession (Microsoft.PowerShell.Utility)


Экспорт-PSSession

Модуль:
Microsoft.PowerShell.Utility

Экспортирует команды из другого сеанса и сохраняет их в модуле 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. Команды экспорта и удаления в текущем сеансе.

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

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

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

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

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

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

Чтобы запускать экспортированные команды со специальными параметрами в удаленном сеансе, перед импортом модуля необходимо создать удаленный сеанс с этими параметрами. Используйте командлет New-PSSession с параметром 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

Командлет 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.

Тип :

SwitchParameter

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-ArgumentList

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

Например, чтобы экспортировать вариант команды Get-Item на диске сертификата (Cert:) в PSSession в $S, введите Export-PSSession - Сеанс $S -Command Get-Item -ArgumentList cert:.

Тип :

Object[]

Псевдонимы:

Args

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-Certificate

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

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

Тип :

X509Сертификат2

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-CommandName

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

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

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

Тип :

String[]

Псевдонимы:

Name

Позиция:

2

Значение по умолчанию:

Все команды в сеансе.

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

True

-CommandType

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

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

  • Псевдоним: все псевдонимы PowerShell в текущем сеансе.
  • Все: все типы команд. Это эквивалент Get-Command -Name *.
  • Приложение: все файлы, кроме файлов PowerShell, пути которых указаны в переменной среды Path ($env:path), включая файлы .txt, .exe и .dll.
  • Командлет: командлеты в текущем сеансе. Командлет используется по умолчанию.
  • Конфигурация: конфигурация PowerShell. Дополнительные сведения см. в разделе about_Session_Configurations.
  • ExternalScript: все файлы .ps1 по путям, указанным в переменной среды Path ($env:path).
  • Фильтр и Функция: все функции PowerShell.
  • Script Блокирует скрипт в текущем сеансе.
  • Рабочий процесс Рабочий процесс PowerShell. Дополнительные сведения см. в разделе about_Workflows.

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

Тип :

CommandTypes

Псевдонимы:

Type

Принятые значения:

Псевдоним, все, приложение, командлет, конфигурация, внешний скрипт, фильтр, функция, скрипт, рабочий процесс

Позиция:

Именованный

Значение по умолчанию:

Все команды в сеансе.

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

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 также позволяет использовать числовые идентификаторы зарегистрированных кодовых страниц (например, -Encoding 1251) или строковые имена зарегистрированных кодовых страниц (например, -Encoding). "windows-1251"). Дополнительные сведения см. в документации .NET для Encoding.CodePage.

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

Примечание

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

Тип :

Кодирование

Принятые значения:

ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32

Позиция:

Именованный

Значение по умолчанию:

UTF8NoBOM

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-Force

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

Тип :

SwitchParameter

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-FormatTypeName

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

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

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

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

Тип :

String[]

Позиция:

3

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-FullyQualifiedModule

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

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

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

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

  • ModuleName - Обязательный. Указывает имя модуля.
  • GUID - Необязательно. Указывает GUID модуля.
  • Также Обязательно указать хотя бы один из трех приведенных ниже ключей.

    • ModuleVersion — указывает минимально приемлемую версию модуля.
    • MaximumVersion — указывает максимально приемлемую версию модуля.
    • RequiredVersion — указывает точную необходимую версию модуля. Его нельзя использовать с другими ключами версии.

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

Тип :

Спецификация модуля[]

Позиция:

Именованный

Значение по умолчанию:

None

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-Module

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

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

Тип :

String[]

Псевдонимы:

PSSnapin

Позиция:

Именованный

Значение по умолчанию:

Все команды в сеансе.

Необходимый:

False

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-OutputModule

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

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

Тип :

String

Псевдонимы:

PSPath, ModuleName

Позиция:

1

Значение по умолчанию:

$HOME\Documents\WindowsPowerShell\Модули

Необходимый:

True

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

-Session

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

Тип :

PSСессия

Позиция:

0

Значение по умолчанию:

None

Необходимый:

True

Примите ввод конвейера:

False

Принимайте подстановочные знаки:

False

Входы

Нет

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

Выходы

Информация о файле

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

Примечания

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

Вы не можете использовать Export-PSSession для экспорта поставщика PowerShell.

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

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

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

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

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

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

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

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