Import-PSSession
Импортирует в текущий сеанс команды из другого сеанса.
Синтаксис
Import-PSSession [-Session] <PSSession> [[-CommandName] <string[]>] [[-FormatTypeName] <string[]>] [-AllowClobber] [-ArgumentList <Object[]>] [-CommandType {<Alias> | <Function> | <Filter> | <Cmdlet> | <ExternalScript> | <Application> | <Script> | <All>}] [-Module <string[]>] [-Prefix <string>] [<CommonParameters>]
Описание
Командлет Import-PSSession импортирует команды (такие как командлеты, функции и псевдонимы) из сеанса PSSession на локальном или удаленном компьютере в текущий сеанс. Возможен импорт любой команды, которую можно найти в другом сеансе PSSession с помощью командлета Get-Command.
Командлет Import-PSSession служит для импорта команд из настроенной оболочки, например из оболочки Microsoft Exchange Server или из сеанса, включающего модули и оснастки Windows PowerShell, а также для импорта других элементов, не являющихся частью текущего сеанса.
Чтобы импортировать команды, создайте сеанс PSSession с помощью команды New-PSSession. Затем с помощью командлета Import-PSSession импортируйте нужные команды. По умолчанию командлет Import-PSSession импортирует все команды, за исключением тех, имена которых совпадают с именами команд в текущем сеансе. Чтобы импортировать все сеансы, используйте параметр AllowClobber.
Импортированные команды можно использовать так же, как используются и другие команды в сеансе. При выполнении импортированной команды ее импортированная часть косвенно выполняется в сеансе, из которого она была импортирована. Однако удаленные операции полностью обрабатываются в оболочке Windows PowerShell. Пользователю не нужно заботиться об этом, но ему нужно поддерживать открытым подключение к другому сеансу (PSSession). Если закрыть подключение, импортированные команды станут недоступными.
Поскольку импортированные команды могут выполняться дольше, чем локальные команды, командлет Import-PSSession добавляет к каждой импортируемой команде параметр AsJob. Этот параметр позволяет выполнять команды в качестве фоновых заданий Windows PowerShell. Дополнительные сведения см. в разделе about_Jobs.
При использовании командлета Import-PSSession оболочка Windows PowerShell добавляет импортируемые команды во временный модуль, который существует только в рамках данного сеанса, и возвращает объект, представляющий этот модуль. Чтобы создать сохраняющийся модуль, который можно будет использовать в последующих сеансах, используйте командлет Export-PSSession.
Командлет Import-PSSession использует функцию косвенного удаленного взаимодействия Windows PowerShell. При импорте команд в текущий сеанс они косвенно выполняются в исходном сеансе или в аналогичном сеансе на исходном компьютере.
Параметры
-AllowClobber
Импортирует указанные команды, даже если их имена совпадают с именами команд в текущем сеансе.
В случае импорта команды, имя которой совпадает с именем команды в текущем сеансе, импортируемая команда скрывает или заменяет исходную. Дополнительные сведения см. в разделе about_Command_Precedence.
По умолчанию командлет Import-PSSession не импортирует команды, имена которых совпадают с именами команд в текущем сеансе.
Обязательно? |
false |
Позиция? |
named |
Значение по умолчанию |
False |
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
false |
-ArgumentList <Object[]>
Импортирует вариант команды, получаемый при использовании заданных аргументов (значений параметров).
Например, чтобы импортировать вариант команды Get-Item на диске сертификатов (Cert:) в сеансе $s, введите команду "import-pssession -session $s -command Get-Item -argumentlist cert:".
Обязательно? |
false |
Позиция? |
named |
Значение по умолчанию |
Все команды в сеансе PSSession, кроме команд, имена которых совпадают с именами команд в текущем сеансе. |
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
false |
-CommandName <string[]>
Импортирует только команды с заданными именами или шаблонами имен. Подстановочные знаки разрешены. Используйте имя "CommandName" или псевдоним "Name".
По умолчанию командлет Import-PSSession импортирует из сеанса все команды, кроме тех, имена которых совпадают с именами команд в текущем сеансе. Это позволяет избежать скрытия и замены команд в сеансе импортируемыми командами. Чтобы импортировать все команды, даже те, которые скрывают или заменяют другие команды, следует использовать параметр AllowClobber.
Если используется параметр CommandName, файлы форматирования команд не импортируются, если не используется параметр FormatTypeName. Аналогично, если используется параметр FormatTypeName, ни одна из команд не будет импортироваться, если не используется параметр CommandName.
Обязательно? |
false |
Позиция? |
3 |
Значение по умолчанию |
Все команды в сеансе PSSession, кроме команд, имена которых совпадают с именами команд в текущем сеансе. |
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
true |
-CommandType <CommandTypes>
Импортирует командные объекты только указанных типов. По умолчанию используется значение Cmdlet. Используйте "CommandType" или псевдоним "Type".
Допустимые значения:
-- Alias: псевдонимы Windows PowerShell в удаленном сеансе.
-- All: командлеты и функции в удаленном сеансе.
-- Application: все файлы, отличные от файлов Windows PowerShell, которые расположены по путям, указанным в переменной среды Path ($env:path) в удаленном сеансе, в том числе файлы TXT, EXE и DLL.
-- Cmdlet: командлеты в удаленном сеансе. По умолчанию используется значение "Cmdlet".
-- ExternalScript: файлы PS1, которые расположены по путям, указанным в переменной среды Path ($env:path) в удаленном сеансе.
-- Filter and Function: функции Windows PowerShell в удаленном сеансе.
-- Script: блоки скриптов в удаленном сеансе.
Обязательно? |
false |
Позиция? |
named |
Значение по умолчанию |
Все команды в сеансе PSSession, кроме команд, имена которых совпадают с именами команд в текущем сеансе. |
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
false |
-FormatTypeName <string[]>
Импортирует инструкции по форматированию для заданных типов Microsoft .NET Framework. Введите имена типов. Подстановочные знаки разрешены.
Значением этого параметра должно быть имя типа, возвращаемое командой Get-FormatData в сеансе, из которого импортируются команды. Чтобы получить все данные форматирования в удаленном сеансе, введите *.
Если команда не включает параметр CommandName или FormatTypeName, командлет Import-PSSession
импортирует инструкции по форматированию для всех типов .NET Framework, возвращаемых командой Get-FormatData в удаленном сеансе.
Если используется параметр FormatTypeName, ни одна из команд не будет импортироваться, если не используется параметр CommandName.
Аналогично, если используется параметр CommandName, файлы форматирования команд не импортируются, если не используется параметр FormatTypeName.
Обязательно? |
false |
Позиция? |
4 |
Значение по умолчанию |
Типы в пространстве имен System.Management.Automation |
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
true |
-Module <string[]>
Импортирует только команды из заданных оснасток и модулей Windows PowerShell. Введите имена оснасток и модулей. Подстановочные знаки запрещены.
Дополнительные сведения см. в разделах about_Pssnapins и Import-Module.
Обязательно? |
false |
Позиция? |
named |
Значение по умолчанию |
Все команды в сеансе PSSession, кроме команд, имена которых совпадают с именами команд в текущем сеансе. |
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
false |
-Prefix <string>
Добавляет заданный префикс к существительным в именах импортируемых команд.
Этот параметр используется для предотвращения конфликтов имен, которые могут возникнуть, если несколько команд в сеансе имеют одинаковые имена.
Например, если указать префикс "Remote" и импортировать командлет Get-Date, командлет в сеансе будет называться Get-RemoteDate, и система не будет путать его с исходным командлетом Get-Date.
Обязательно? |
false |
Позиция? |
named |
Значение по умолчанию |
|
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
false |
-Session <PSSession>
Задает сеанс PSSession, из которого импортируются командлеты. Введите переменную, содержащую объект сеанса, или команду, получающую объект сеанса, например New-PSSession или Get-PSSession. Можно указать только один сеанс. Это обязательный параметр.
Обязательно? |
true |
Позиция? |
1 |
Значение по умолчанию |
Нет |
Принимать входные данные из конвейера? |
false |
Принимать подстановочные знаки? |
false |
<CommonParameters>
Данный командлет поддерживает общие параметры -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer и -OutVariable. Дополнительные сведения см. в разделе about_Commonparameters.
Ввод и вывод
Входным типом является тип объектов, которые можно передавать командлету по конвейеру. Возвращаемым типом является тип объектов, возвращаемых командлетом.
Входные данные |
Нет Передать объекты этому командлету по конвейеру невозможно. |
Выходные данные |
System.Management.Automation.PSModuleInfo Командлет Import-PSSession возвращает тот же объект модуля, что и командлеты New-Module и Get-Module. Однако импортированный модуль является временным и существует только в рамках текущего сеанса. Чтобы создать на диске постоянный модуль, воспользуйтесь командлетом Export-PSSession. |
Примечания
Командлет Import-PSSession использует инфраструктуру удаленного взаимодействия Windows PowerShell. Чтобы использовать этот командлет, компьютер должен быть настроен для удаленного взаимодействия WS-Management. Дополнительные сведения см. в разделах about_Remote и about_Remote_Requirements.
Командлет Import-PSSession не позволяет импортировать переменные и поставщики Windows PowerShell.
При импорте команд, имена которых совпадают с именами команд в текущем сеансе, импортируемые команды могут скрывать псевдонимы, функции и командлеты в сеансе, а также заменять функции и переменные в сеансе. Дополнительные сведения см. в разделе about_Command_Precedence.
Командлет Import-PSSession преобразует все команды в функции перед их импортом. В результате импортированные команды работают не так, как они бы работали в случае сохранения своего исходного типа команд. Например, если импортировать командлет из сеанса PSSession, а затем импортировать командлет с тем же именем из модуля или оснастки, по умолчанию всегда будет выполняться командлет из сеанса PSSession, поскольку функции имеют приоритет по сравнению с командлетами. И наоборот, если импортировать псевдоним в сеанс, у котором имеется одноименный псевдоним, всегда будет использоваться исходный псевдоним, поскольку псевдонимы имеют приоритет по сравнению с функциями. Дополнительные сведения см. в разделе about_Command_Precedence.
Командлет Import-PSSession использует для отображения хода выполнения команды командлет Write-Progress. Во время выполнения команды отображается индикатор выполнения.
Чтобы найти команды для импорта, командлет Import-PSSession с помощью командлета Invoke-Command запускает в сеансе PSSession команду Get-Command. Для получения данных форматирования для команд используется командлет Get-FormatData. При выполнении команды Import-PSSession могут появляться сообщения об ошибках командлетов Invoke-Command, Get-Command и Get-FormatData. Кроме того, командлет Import-PSSession не позволяет импортировать команды из сеансов PSSession, в которых отсутствуют командлеты Get-Command, Get-FormatData, Select-Object и Get-Help.
На импортированные команды накладываются те же ограничения, что и на другие удаленные команды, включая невозможность запускать программы с пользовательским интерфейсом, например "Блокнот".
Поскольку профили Windows PowerShell выполняются вне сеансов PSSessions, команды, добавляемые в сеанс через профиль, недоступны командлету Import-PSSession. Чтобы импортировать команды из профиля, необходимо с помощью команды Invoke-Command вручную запустить профиль в сеансе PSSession, прежде чем импортировать команды.
Временный модуль, создаваемый командлетом Import-PSSession, может включать файл форматирования, даже если команда не импортирует данные форматирования. Если команда не импортирует данные форматирования, ни один из создаваемых файлов форматирования, не будет содержать данных форматирования.
Чтобы можно было использовать командлет Import-PSSession, политика выполнения в текущем сеансе не может иметь значение Restricted или AllSigned, поскольку создаваемый командлетом Import-PSSession модуль содержит неподписанные файлы скриптов, которые запрещены этими политиками. Чтобы использовать командлет Import-PSSession без изменения политики выполнения для локального компьютера, необходимо с помощью параметра Scope командлета Set-ExecutionPolicy задать менее жесткую политику выполнения для одного процесса.
Пример 1
C:\PS>$s = new-pssession -computername Server01
C:\PS> import-pssession -session $s
Описание
-----------
Эта команда импортирует в текущий сеанс все команды из сеанса PSSession на компьютере Server01, кроме команд, имена которых совпадают с именами команд в текущем сеансе.
Поскольку в этой команде не используется параметр CommandName, она также импортирует все данные форматирования, необходимые импортируемым командам.
Пример 2
C:\PS>$s = new-pssession https://ps.testlabs.com/powershell
C:\PS> import-pssession -session $s -commandname *-test -formatTypeName *
C:\PS> new-test -name test1
C:\PS> get-test test1 | run-test
Описание
-----------
Эти команды импортируют в локальный сеанс команды с именами, заканчивающимися на "-test", и демонстрируют использование импортированного командлета.
Первая команда с помощью командлета New-PSSession создает сеанс PSSession. Она сохраняет сеанс PSSession в переменной $s.
Вторая команда с помощью командлета Import-PSSession импортирует команды из сеанса PSSession в переменной $s в текущий сеанс. Для задания команд с существительным "Test" используется параметр CommandName, а для импорта данных форматирования для этих команд используется параметр FormatTypeName.
The third and fourth commands use the imported commands in the current session. Поскольку импортированные командлеты фактически добавляются в локальный сеанс, для их запуска используется локальный синтаксис. Для выполнения импортированной команды не нужно использовать командлет Invoke-Command.
Пример 3
C:\PS>$s1 = new-pssession -computername s1
C:\PS> $s2 = new-pssession -computername s2
C:\PS> import-pssession -session s1 -type cmdlet -name New-Test, Get-Test -FormatTypeName *
C:\PS> import-pssession -session s2 -type cmdlet -name Set-Test -FormatTypeName *
C:\PS> new-test Test1 | set-test -runtype full
Описание
-----------
В этом примере показано, что импортированные командлеты можно использовать так же, как и локальные командлеты.
Эти команды импортируют командлеты New-Test и Get-Test из сеанса PSSession на компьютере Server01 и командлет Set-Test из сеанса PSSession на компьютере Server02.
Хотя эти командлеты и были импортированы из различных сеансов PSSession, объекты можно по конвейеру передавать из одного командлета в другой без ошибок.
Пример 4
C:\PS>$s = new-pssession -computername Server01
C:\PS> import-pssession -session $s -commandname *-test* -formattypename *
C:\PS> $batch = new-test -name Batch -asjob
C:\PS> 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
C:\PS>$s = new-pssession -comp Server01
C:\PS> invoke-command -session $s {import-module TestManagement}
C:\PS> 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
C:\PS>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 : {}
Описание
-----------
В этом примере показано, что командлет Import-PSSession создает модуль во временном файле на диске. Кроме того, в нем показано, что все команды преобразуются в функции, прежде чем они будут импортированы в текущий сеанс.
В этой команде для импорта командлета Get-Date и функции SearchHelp в текущий сеанс используется командлет Import-PSSession.
Командлет Import-PSSession возвращает объект PSModuleInfo, представляющий временный модуль. Значение свойства Path показывает, что командлет Import-PSSession создал во временной папке файл модуля скрипта (PSM1). Свойство ExportedFunctions показывает, что командлет Get-Date и функция SearchHelp были импортированы в виде функций.
Пример 7
C:\PS>import-pssession $s -CommandName Get-Date -formatTypeName * -AllowClobber
C:\PS> get-command get-date
CommandType Name Definition
----------- ---- ----------
Function Get-Date ...
Cmdlet Get-Date Get-Date [[-Date] <DateTime>] [-Year <Int32>] [-Month <Int32>]
C:\PS> Get-Date
09074
C:\PS> (get-command -type cmdlet -name get-date).pssnapin.name
Microsoft.PowerShell.Utility
C:\PS> Microsoft.PowerShell.Utility\get-date
Sunday, March 15, 2009 2:08:26 PM
Описание
-----------
В этом примере показано, как выполнить команду, скрытую импортированной командой.
Первая команда импортирует командлет Get-Date из сеанса PSSession в переменной $s. Поскольку текущий сеанс включает командлет Get-Date, в команде необходимо указать параметр AllowClobber.
Вторая команда с помощью командлета 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
C:\PS>import-pssession -session $s -commandName *Item* -AllowClobber
Описание
-----------
Эта команда импортирует команды, имена которых включают слово "Item", из сеанса PSSession в переменной $s. Поскольку команда включает параметр CommandName, но не включает параметр FormatTypeData, импортируется только команда.
Это команду следует использовать, если для выполнения команды на удаленном компьютере используется командлет Import-PSSession, а в текущем сеансе уже имеются данные форматирования для команды.
Пример 9
C:\PS>$m = import-pssession -session $s -CommandName *bits* -formattypename *bits*
C:\PS> 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 команды, имена которых включают слово "bits". Команда Import-PSSession возвращает временный модуль и сохраняет его в переменной $m.
Вторая команда с помощью командлета Get-Command получает команды, экспортированные модулем в переменной $m.
Параметр Module принимает строковое значение, которое обозначает имя модуля. Однако при отправке объекта модуля Windows PowerShell использует метод ToString объекта модуля, возвращающий имя модуля.
Команда Get-Command эквивалентна команде "get-command $m.name".
См. также
Концепции
about_Command_Precedence
New-PSSession
Export-PSSession
about_Jobs
about_PSSessions