Передача данных с помощью ByValue

Завершено

При передаче данных с помощью ByValue параметр может принимать полные объекты из конвейера, если эти объекты имеют тип, принимаемый параметром. В одной команде может быть несколько параметров, принимающих входные данные конвейера ByValue, но каждый параметр должен принимать свой тип объекта.

Например, Get-Service может принимать входные данные конвейера ByValue в параметрах -InputObject и –Name. Каждый из этих параметров принимает разные типы объекта. –InputObject принимает объекты типа ServiceController, и –Name принимает объекты типа String. Рассмотрим следующий пример:

'BITS','WinRM' | Get-Service

Здесь два строковых объекта передаются в Get-Service. Они присоединяются к параметру –Name, так как этот параметр принимает этот тип объекта ByValue из конвейера.

Чтобы предсказать функцию, которую Windows PowerShell выполнит с объектом в конвейере, необходимо определить тип объекта в конвейере. Для этого можно передать объект в Get-Member. Первая строка выходных данных указывает тип объекта, содержащегося в конвейере. Например:

PS C:\> "BITS","WinRM" | Get-Member
 
   TypeName: System.String

Name             MemberType            Definition
----             ----------            ----------

Здесь конвейер содержит объекты типа System.String. Windows PowerShell часто сокращают имена типов и включает только последнюю часть. В этом примере последней частью является String.

Затем вы изучите полную справку для следующей команды в конвейере. В этом примере используется Get-Service, и вы увидите, что параметры -InputObject и –Name принимают входные данные из конвейера ByValue. Так как конвейер содержит объекты типа String, а параметр –Name принимает объекты типа String из конвейера ByValue, эти объекты в конвейере присоединяются к параметру –Name.

Универсальные типы объектов

Windows PowerShell распознает два универсальных типа объектов, Object и PSObject. Параметры, принимающие эти типы объектов, могут принимать любой тип. При выполнении привязки параметров конвейера ByValue Windows PowerShell сначала ищет конкретный тип объекта. Если конвейер содержит String и параметр может принимать String, этот параметр получит объекты.

Если для определенного типа данных нет совпадений, Windows PowerShell попытается сопоставить универсальные типы данных. Именно поэтому работают такие команды, как Sort-Object и Select-Object. У каждой из этих команд есть параметр –InputObject, который принимает объекты типа PSObject из конвейера ByValue. Именно поэтому вы можете передать любой тип объекта в эти команды. Их параметр –InputObject получит любой объект из конвейера, так как он принимает объекты любого типа.