Import-PSSession

Импортирует команды из другого сеанса в текущий.

Синтаксис

Import-PSSession
      [-Prefix <String>]
      [-DisableNameChecking]
      [[-CommandName] <String[]>]
      [-AllowClobber]
      [-ArgumentList <Object[]>]
      [-CommandType <CommandTypes>]
      [-Module <String[]>]
      [-FullyQualifiedModule <ModuleSpecification[]>]
      [[-FormatTypeName] <String[]>]
      [-Certificate <X509Certificate2>]
      [-Session] <PSSession>
      [<CommonParameters>]

Описание

Командлет Import-PSSession импортирует команды, такие как командлеты, функции и псевдонимы, из PSSession на локальном или удаленном компьютере в текущий сеанс. Вы можете импортировать любую команду, которую Get-Command командлет может найти в PSSession.

Import-PSSession Используйте команду для импорта команд из настраиваемой оболочки, например оболочки Microsoft Exchange Server, или из сеанса, включающего Windows PowerShell модули и оснастки или другие элементы, которые не находятся в текущем сеансе.

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

Импортированные команды можно использовать точно так же, как и любую команду в сеансе. При использовании импортированных команд импортированная часть команды выполняется неявно в сеансе, из которой она была импортирована. Однако удаленные операции полностью обрабатываются Windows PowerShell. Вам даже не нужно помнить о них, за исключением того, что нужно поддерживать подключение к другому сеансу (PSSession) открытым. Если его закрыть, импортированные команды перестают быть недоступными.

Так как импортированные команды могут выполняться дольше, чем локальные команды, Import-PSSession добавляет параметр AsJob в каждую импортированную команду. Этот параметр позволяет выполнить команду в качестве фонового задания Windows PowerShell. См. дополнительные сведения о заданиях.

При использовании Import-PSSessionWindows PowerShell добавляет импортированные команды во временный модуль, который существует только в сеансе, и возвращает объект, представляющий модуль. Чтобы создать постоянный модуль, который можно использовать в будущих сеансах, используйте Export-PSSession командлет.

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

Начиная с Windows PowerShell 3.0, можно использовать Import-Module командлет для импорта модулей из удаленного сеанса в текущий сеанс. Эта функция использует неявное удаленное взаимодействие. Это эквивалентно использованию для Import-PSSession импорта выбранных модулей из удаленного сеанса в текущий сеанс.

Примеры

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

PS C:\> $S = New-PSSession -ComputerName Server01
PS C:\> Import-PSSession -Session $S

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

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

Пример 2. Импорт команд, заканчивающихся определенной строкой

PS C:\> $S = New-PSSession https://ps.testlabs.com/powershell
PS C:\> Import-PSSession -Session $S -CommandName *-test -FormatTypeName *
PS C:\> New-Test -Name Test1
PS C:\> Get-Test test1 | Run-Test

Эти команды импортируют команды, имена которых заканчиваются на "-test", из PSSession в локальный сеанс, а затем показывают, как использовать импортированный командлет.

Первая команда использует New-PSSession командлет для создания PSSession. Она сохраняет psSession в переменной $S .

Вторая команда использует Import-PSSession командлет для импорта команд из PSSession в $S текущий сеанс. Она использует параметр CommandName, чтобы указать команды с существительным Test, и параметр FormatTypeName, чтобы импортировать данные форматирования для команд Test.

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

Пример 3. Импорт командлетов из PSSession

PS C:\> $S1 = New-PSSession -ComputerName s1
PS C:\> $S2 = New-PSSession -ComputerName s2
PS C:\> Import-PSSession -Session s1 -Type cmdlet -Name New-Test, Get-Test -FormatTypeName *
PS C:\> Import-PSSession -Session s2 -Type Cmdlet -Name Set-Test -FormatTypeName *
PS C:\> New-Test Test1 | Set-Test -RunType Full

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

Эти команды импортируют New-Test и Get-Test командлеты из PSSession на компьютере Server01 и Set-Test командлете из PSSession на компьютере Server02.

Несмотря на то, что командлеты были импортированы из разных сеансов PSSession, можно без ошибок передать объект из одного командлета в другой.

Пример 4. Выполнение импортированной команды в качестве фонового задания

PS C:\> $S = New-PSSession -ComputerName Server01
PS C:\> Import-PSSession -Session $S -CommandName *-test* -FormatTypeName *
PS C:\> $batch = New-Test -Name Batch -AsJob
PS C:\> Receive-Job $batch

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

Так как импортированные команды могут выполняться дольше, чем локальные команды, Import-PSSession добавляет параметр AsJob в каждую импортированную команду. Параметр AsJob позволяет выполнить команду в качестве фонового задания.

Первая команда создает PSSession на компьютере Server01 и сохраняет объект PSSession в переменной $S .

Вторая команда используется Import-PSSession для импорта командлетов test из PSSession в $S текущий сеанс.

Третья команда использует параметр AsJob импортированного New-Test командлета для выполнения New-Test команды в качестве фонового задания. Команда сохраняет объект задания, который New-Test возвращается в переменной $batch .

Четвертая команда использует Receive-Job командлет для получения результатов задания в переменной $batch .

Пример 5. Импорт командлетов и функций из модуля Windows PowerShell

PS C:\> $S = New-PSSession -ComputerName Server01
PS C:\> Invoke-Command -Session $S {Import-Module TestManagement}
PS C:\> Import-PSSession -Session $S -Module TestManagement

В этом примере показано, как импортировать командлеты и функции из модуля Windows PowerShell на удаленном компьютере в текущий сеанс.

Первая команда создает PSSession на компьютере Server01 и сохраняет его в переменной $S .

Вторая команда использует Invoke-Command командлет для выполнения Import-Module команды в PSSession в $S.

Как правило, модуль будет добавлен во все сеансы командой Import-Module в профиле Windows PowerShell, но профили не выполняются в PSSessions.

Третья команда использует параметр Module для Import-PSSession импорта командлетов и функций в модуле в текущий сеанс.

Пример 6. Создание модуля во временном файле

PS C:\> Import-PSSession $S -CommandName Get-Date, SearchHelp -FormatTypeName * -AllowClobber

Name              : tmp_79468106-4e1d-4d90-af97-1154f9317239_tcw1zunz.ttf
Path              : C:\Users\User01\AppData\Local\Temp\tmp_79468106-4e1d-4d90-af97-1154f9317239_tcw1
zunz.ttf\tmp_79468106-4e1d-4d90-af97-1154f9317239_
tcw1zunz.ttf.psm1
Description       : Implicit remoting for http://server01.corp.fabrikam.com/wsman
Guid              : 79468106-4e1d-4d90-af97-1154f9317239
Version           : 1.0
ModuleBase        : C:\Users\User01\AppData\Local\Temp\tmp_79468106-4e1d-4d90-af97-1154f9317239_tcw1
zunz.ttf
ModuleType        : Script
PrivateData       : {ImplicitRemoting}
AccessMode        : ReadWrite
ExportedAliases   : {}
ExportedCmdlets   : {}
ExportedFunctions : {[Get-Date, Get-Date], [SearchHelp, SearchHelp]}
ExportedVariables : {}
NestedModules     : {}

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

Команда использует Import-PSSession командлет для импорта командлета Get-Date и функции SearchHelp в текущий сеанс.

Командлет Import-PSSession возвращает объект PSModuleInfo , представляющий временный модуль. Значение свойства Path показывает, что Import-PSSession в временном расположении создан файл модуля скрипта (PSM1). Свойство ExportedFunctions показывает, что Get-Date командлет и функция SearchHelp были импортированы как функции.

Пример 7. Выполнение команды, скрытой импортированной командой

PS C:\> Import-PSSession $S -CommandName Get-Date -FormatTypeName * -AllowClobber

PS C:\> Get-Command Get-Date -All

CommandType   Name       Definition
-----------   ----       ----------
Function      Get-Date   ...
Cmdlet        Get-Date   Get-Date [[-Date] <DateTime>] [-Year <Int32>] [-Month <Int32>]

PS C:\> Get-Date
09074

PS C:\> (Get-Command -Type Cmdlet -Name Get-Date).PSSnapin.Name
Microsoft.PowerShell.Utility

PS C:\> Microsoft.PowerShell.Utility\Get-Date
Sunday, March 15, 2009 2:08:26 PM

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

Первая команда импортирует Get-Date командлет из PSSession в переменной $S . Так как текущий Get-Date сеанс включает командлет, параметр AllowClobber требуется в команде.

Вторая команда использует параметр All командлета Get-Command для получения всех Get-Date команд в текущем сеансе. Выходные данные показывают, что сеанс включает исходный Get-Date командлет и Get-Date функцию. Функция Get-Date запускает импортированный Get-Date командлет в PSSession в $S.

Третья команда выполняет Get-Date команду. Так как функции имеют приоритет над командлетами, Windows PowerShell запускает импортированную Get-Date функцию, которая возвращает дату Джулиана.

Четвертая и пятая команды показывают, как использовать полное имя для выполнения команды, которая скрыта импортированной командой.

Четвертая команда получает имя оснастки Windows PowerShell, которая добавила исходный Get-Date командлет в текущий сеанс.

Пятая команда использует полное имя командлета Get-Date для выполнения Get-Date команды.

Дополнительные сведения о приоритете команд и скрытых командах см. в разделе about_Command_Precedence.

Пример 8. Импорт команд с определенной строкой в именах

PS C:\> Import-PSSession -Session $S -CommandName **Item** -AllowClobber

Эта команда импортирует команды, имена которых включают Item из PSSession в $S. Поскольку команда включает параметр CommandName , но не параметр FormatTypeData , импортируется только команда.

Используйте эту команду при выполнении Import-PSSession команды на удаленном компьютере и у вас уже есть данные форматирования для команды в текущем сеансе.

Пример 9. Использование параметра Module для обнаружения команд, импортированных в сеанс

PS C:\> $M = Import-PSSession -Session $S -CommandName *bits* -FormatTypeName *bits*
PS C:\> Get-Command -Module $M
CommandType     Name
-----------     ----
Function        Add-BitsFile
Function        Complete-BitsTransfer
Function        Get-BitsTransfer
Function        Remove-BitsTransfer
Function        Resume-BitsTransfer
Function        Set-BitsTransfer
Function        Start-BitsTransfer
Function        Suspend-BitsTransfer

В этой команде показано, как использовать параметр module , Get-Command чтобы узнать, какие команды были импортированы в сеанс командой Import-PSSession .

Первая команда использует Import-PSSession командлет для импорта команд, имена которых содержат биты из PSSession в переменной $S . Команда Import-PSSession возвращает временный модуль, а команда сохраняет модуль в переменной $m .

Вторая команда использует Get-Command командлет для получения команд, экспортируемых модулем в переменной $M .

Параметр Module принимает строковое значение, которое предназначено для имени модуля. Однако при передаче объекта модуля Windows PowerShell использует для него метод ToString, который возвращает имя модуля.

Команда Get-Command эквивалентна Get-Command $M.Name".

Параметры

-AllowClobber

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

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

По умолчанию Import-PSSession не импортирует команды с тем же именем, что и команды в текущем сеансе.

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

-ArgumentList

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

Например, чтобы импортировать вариант Get-Item команды в сертификате (Cert:) диск в PSSession введите $SImport-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) во временном модуле, который Import-PSSession создает.

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

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

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

-CommandName

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

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

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

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

-CommandType

Указывает тип объектов команд. Значение по умолчанию — Cmdlet. Используйте параметр CommandType или его псевдоним Type. Допустимые значения для этого параметра:

  • Псевдоним. Псевдонимы Windows PowerShell в удаленном сеансе.
  • Все. Командлеты и функции в удаленном сеансе.
  • приложение. Все файлы, кроме Windows-PowerShell файлов в путях, перечисленных в переменной среды path ($env:path) в удаленном сеансе, включая .txt, .exe и .dll файлы.
  • Командлет. Командлеты в удаленном сеансе. Значение по умолчанию — "Cmdlet".
  • ExternalScript. .ps1 файлы в путях, перечисленных в переменной среды Path ($env:path) в удаленном сеансе.
  • Фильтрация и функция. Функции Windows PowerShell в удаленном сеансе.
  • Скрипт. Блоки сценариев в удаленном сеансе.
Type:CommandTypes
Aliases:Type
Accepted values:Alias, Function, Filter, Cmdlet, ExternalScript, Application, Script, Workflow, Configuration, All
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DisableNameChecking

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

По умолчанию при импорте модуля экспортируются командлеты или функции с неутвержденными командами в именах, Windows PowerShell отображает следующее предупреждающее сообщение:

"ПРЕДУПРЕЖДЕНИЕ. Некоторые импортированные имена команд включают неутвержденные команды, которые могут сделать их менее обнаруживаемыми. Используйте параметр Verbose для получения дополнительных сведений или типов Get-Verb , чтобы просмотреть список утвержденных команд".

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

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

-FormatTypeName

Задает инструкции по форматированию для указанных типов Microsoft платформа .NET Framework. Введите имена типов. Разрешено использовать подстановочные знаки.

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

Если команда не содержит параметр CommandName или FormatTypeName, импортирует инструкции по форматированию для всех типов платформа .NET Framework, Import-PSSession возвращаемых командой Get-FormatData в удаленном сеансе.

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

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

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

-FullyQualifiedModule

Задает модули с именами, указанными в виде объектов ModuleSpecification (описанных в разделе "Примечания" конструктора ModuleSpecification (hashtable) в пакете SDK PowerShell. Например, параметр FullyQualifiedModule принимает имя модуля, указанное в формате:

  • @{ModuleName = "modulename"; ModuleVersion = "version_number"} или
  • @{ModuleName = "modulename"; ModuleVersion = "version_number"; Guid = "GUID"}.

Параметры ModuleName и ModuleVersion обязательны, а Guid — нет.

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

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

-Module

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

Import-PSSession не может импортировать поставщиков из оснастки.

Дополнительные сведения см. в статьях about_PSSnapins и about_Modules.

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

-Prefix

Задает префикс существительных в именах импортированных команд.

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

Например, если указать префикс Remote, а затем импортировать Get-Date командлет, командлет известен в сеансе как Get-RemoteDateи не путается с исходным Get-Date командлетом.

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

-Session

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

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

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

None

Нельзя передать объекты в этот командлет с помощью конвейера.

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

PSModuleInfo

Import-PSSession возвращает тот же объект модуля, который возвращается New-Module и Get-Module командлеты. Однако импортированный модуль является временным и существует только в текущем сеансе. Чтобы создать постоянный модуль на диске, используйте Export-PSSession командлет.

Примечания

  • Import-PSSession использует инфраструктуру удаленного взаимодействия PowerShell. Для использования этого командлета компьютер должен быть настроен на удаленное взаимодействие WS-Management. Дополнительные сведения см. в about_Remote и about_Remote_Requirements.
  • Import-PSSession не импортирует переменные или поставщики PowerShell.
  • При импорте команд, которые имеют те же имена, что и команды в текущем сеансе, импортированные команды в сеансе могут скрывать псевдонимы, функции и командлеты, а также заменять функции и переменные. Во избежание конфликтов имен используйте параметр Prefix. Дополнительные сведения см. в разделе about_Command_Precedence.
  • Import-PSSession преобразует все команды в функции перед их импортом. В результате импортированные команды работают немного иначе, чем если бы они сохранили свой исходный тип команды. Например, если импортировать командлет из PSSession и затем импортировать командлет с таким же именем из модуля или оснастки, импортированный из PSSession командлет всегда выполняется по умолчанию, поскольку функции имеют приоритет над командлетами. И наоборот, если импортировать псевдоним в сеанс, где уже есть псевдоним с таким же именем, всегда используется исходный псевдоним, поскольку псевдонимы имеют приоритет над функциями. Дополнительные сведения см. в разделе about_Command_Precedence.
  • Import-PSSessionWrite-Progress использует командлет для отображения хода выполнения команды. Во время выполнения команды может отображаться индикатор выполнения .
  • Чтобы найти импортируемые команды, Import-PSSession использует Invoke-Command командлет для выполнения Get-Command команды в PSSession. Для получения данных форматирования для команд используется Get-FormatData командлет. При выполнении Import-PSSession команды могут отображаться сообщения об ошибках из этих командлетов. Кроме того, Import-PSSession не удается импортировать команды из PSSession, не включая Select-ObjectGet-CommandGet-FormatDataкомандлеты и Get-Help командлеты.
  • Импортированные команды имеют те же ограничения, что и другие удаленные команды, включая невозможность запуска программы с пользовательским интерфейсом, например "Блокнот".
  • Так как Windows PowerShell профили не выполняются в PSSessions, команды, добавляемые профилем в сеанс, недоступныImport-PSSession. Чтобы импортировать команды из профиля, используйте Invoke-Command команду для запуска профиля в PSSession вручную перед импортом команд.
  • Временный модуль, который создает, Import-PSSession может включать файл форматирования, даже если команда не импортирует данные форматирования. Если команда не импортирует данные форматирования, все создаваемые файлы форматирования не будут содержать данные форматирования.
  • Для использования Import-PSSessionполитика выполнения в текущем сеансе не может быть ограничена или AllSigned, так как временный модуль, который Import-PSSession создает файлы скриптов без знака, запрещенные этими политиками. Чтобы использовать Import-PSSession без изменения политики выполнения для локального компьютера, используйте параметр Set-ExecutionPolicyScope, чтобы задать менее ограничительную политику выполнения для одного процесса.
  • В Windows PowerShell 2.0 разделы справки для команд, которые импортируются из другого сеанса, не включают префикс, назначенный с помощью параметра Prefix. Чтобы получить справку для импортированной команды Windows PowerShell 2.0, используйте исходное имя команды (без префикса).