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


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. Дополнительные сведения см. в about_Jobs.

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

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

Начиная с Windows PowerShell 3.0, можно использовать командлет Import-Module для импорта модулей из удаленного сеанса в текущий сеанс. Эта функция использует неявное удаленное взаимодействие. Это эквивалентно использованию импорта-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 commandName для указания команд с существительным тестом и параметром 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.

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

Пример 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 в $S PSSession.

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

Третья команда использует параметр модуля 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_tcw1zunz.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_tcw1zunz.ttf
ModuleType        : Script
PrivateData       : {ImplicitRemoting}
AccessMode        : ReadWrite
ExportedAliases   : {}
ExportedCmdlets   : {}
ExportedFunctions : {[Get-Date, Get-Date], [SearchHelp, SearchHelp]}
ExportedVariables : {}
NestedModules     : {}

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

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

Командлет import-PSSession возвращает объект PSModuleInfo, представляющий временный модуль. Значение свойства пути показывает, что 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 AllowClobber.

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

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

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

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

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

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

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

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

Параметры

-AllowClobber

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

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

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

Тип:SwitchParameter
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-ArgumentList

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

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

Тип:Object[]
Aliases:Args
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Certificate

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

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

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

Тип:X509Certificate2
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-CommandName

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

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

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

Тип:String[]
Aliases:Name
Position:2
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-CommandType

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

  • Псевдоним. Псевдонимы Windows PowerShell в удаленном сеансе.
  • Все. Командлеты и функции в удаленном сеансе.
  • Приложение. Все файлы, отличные от Windows-PowerShell файлов в путях, перечисленных в переменной среды Path ($env:path) в удаленном сеансе, включая .txt, .exeи файлы .dll.
  • Командлет. Командлеты в удаленном сеансе. Командлет по умолчанию.
  • ExternalScript. Файлы .ps1 в путях, перечисленных в переменной среды Path ($env:path) в удаленном сеансе.
  • Фильтрация и функция. Функции Windows PowerShell в удаленном сеансе.
  • Сценарий. Скрипт блокируется в удаленном сеансе.
Тип:CommandTypes
Aliases:Type
Допустимые значения:Alias, Function, Filter, Cmdlet, ExternalScript, Application, Script, Workflow, Configuration, All
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-DisableNameChecking

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

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

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

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

Тип:SwitchParameter
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-FormatTypeName

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

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

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

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

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

Тип:String[]
Position:3
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-FullyQualifiedModule

Задает модули с именами, указанными в виде объектов ModuleSpecification (описанных в разделе "Примечания" конструктора ModuleSpecification (Hashtable) в библиотеке MSDN). Например, параметр FullyQualifiedModule принимает имя модуля, указанное в формате @{ModuleName = "имя модуля"; ModuleVersion = "version_number"} или @{ModuleName = "имя модуля"; ModuleVersion = "version_number"; Guid = "GUID"}. Имя модуля и ModuleVersion являются обязательными, но Guid необязателен.

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

Тип:ModuleSpecification[]
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Module

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

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

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

Тип:String[]
Aliases:PSSnapin
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Prefix

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

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

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

Тип:String
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Session

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

Тип:PSSession
Position:0
Default value:None
Обязательно:True
Принять входные данные конвейера:False
Принять подстановочные знаки:False

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

None

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

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

PSModuleInfo

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

Примечания

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