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


Export-PSSession

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

Синтаксис

All

Export-PSSession
    [-OutputModule] <String>
    [[-CommandName] <String[]>]
    [[-FormatTypeName] <String[]>]
    [-Session] <PSSession>
    [-Force]
    [-Encoding <Encoding>]
    [-AllowClobber]
    [-ArgumentList <Object[]>]
    [-CommandType <CommandTypes>]
    [-Module <String[]>]
    [-FullyQualifiedModule <ModuleSpecification[]>]
    [-Certificate <X509Certificate2>]
    [<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 с сервера.

$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

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

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

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

$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

Команда New-PSSession создает psSession на компьютере Server01 и сохраняет его в переменной $S. Команда Export-PSSession экспортирует командлеты, имена которых начинаются с теста из 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-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. Параметр сеанса использует объект, хранящийся в $Options. Сеанс хранится в переменной $S.

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

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

Параметры

-AllowClobber

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

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

Свойства параметра

Тип:SwitchParameter
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-ArgumentList

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

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

Свойства параметра

Тип:

Object[]

Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False
Aliases:Аргументы

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Certificate

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

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

Свойства параметра

Тип:X509Certificate2
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-CommandName

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

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

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

Свойства параметра

Тип:

String[]

Default value:All commands in the session.
Поддерживаются подстановочные знаки:True
DontShow:False
Aliases:Имя

Наборы параметров

(All)
Position:2
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-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. Передача значений в виде массива является самым простым вариантом, а также позволяет использовать дополнение при нажатии Tab для значений.

Свойства параметра

Тип:CommandTypes
Default value:All commands in the session.
Допустимые значения:Alias, All, Application, Cmdlet, Configuration, ExternalScript, Filter, Function, Script, Workflow
Поддерживаются подстановочные знаки:False
DontShow:False
Aliases:Тип

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера: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 с пометкой порядка байтов (Byte Order Mark, BOM)
  • utf8NoBOM: Кодирует в формате UTF-8 без метки порядка байтов (BOM)
  • utf32: кодирует в формате UTF-32.

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

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

Замечание

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

Свойства параметра

Тип:Encoding
Default value:UTF8NoBOM
Допустимые значения:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Force

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

Свойства параметра

Тип:SwitchParameter
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-FormatTypeName

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

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

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

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

Свойства параметра

Тип:

String[]

Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:3
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-FullyQualifiedModule

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

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

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

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

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

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

Свойства параметра

Тип:

ModuleSpecification[]

Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Module

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

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

Свойства параметра

Тип:

String[]

Default value:All commands in the session.
Поддерживаются подстановочные знаки:False
DontShow:False
Aliases:PSSnapin

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-OutputModule

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

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

Свойства параметра

Тип:String
Default value:$HOME\Documents\WindowsPowerShell\Modules
Поддерживаются подстановочные знаки:False
DontShow:False
Aliases:PSPath, Имя модуля

Наборы параметров

(All)
Position:1
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Session

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

Свойства параметра

Тип:PSSession
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:0
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

CommonParameters

Этот командлет поддерживает общие параметры: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction и -WarningVariable. Дополнительные сведения см. в разделе about_CommonParameters.

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

None

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

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

FileInfo

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

Примечания

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

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

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

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

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