Вы можете сделать то, что вы хотите, выполнив следующую команду:
(Get-Content -Path (Get-ExecutingScriptDirectory | Join-Path -ChildPath "foo.json" | ConvertFrom-Json)).data
Некоторые команды поддерживают привязку параметров конвейера. Опции - это конвейер по значению или конвейер по свойству. Хорошая ссылка для привязки параметров: О функциях Расширенные параметры .
Поиск в сети команды, которую вы собираетесь использовать, даст информацию о привязке параметров. Например, Join-Path , имеет раздел параметров. Каждый параметр будет иметь описание, включая поле Accept pipeline input:
. Для параметра, принимающего входные данные конвейера, это должно быть True
. Обычно в нем будет указано, как значение может быть передано в конвейер (ByPropertyName
или ByValue
).
ByPropertyName
указывает, что необходимо вывести объект, содержащий имя свойства, соответствующее имени параметра , Затем, когда объект будет передан по конвейеру, параметр будет привязан к соответствующему значению имени свойства. Ниже приведен пример:
$filePath = [pscustomobject]@{Path = 'c:\temp\test1\t.txt'}
$filePath
Path
----
c:\temp\test1\t.txt
$filePath.Path # This binds to -Path in Get-Content
c:\temp\test1\t.txt
$filepath | Get-Content
ByValue
указывает, что любое переданное значение будет пытаться привязаться к этому параметру. Если во время привязки существуют несоответствия типов, скорее всего будет выдана ошибка. См. Ниже, например:
"c:\temp" | Join-Path -ChildPath "filepath" # c:\temp binds to `-Path`
c:\temp\filepath
Относительно $_
, который является синонимом $PSItem
, является текущим входным объектом в блоке сценария. Обычно вы видите, что это используется с Foreach-Object
и Where-Object
. Если у вас нет блока скрипта, вы не сможете использовать $_
.
. Технически вы можете перенаправить что угодно в Foreach-Object
или Where-Object
. Тогда текущий объект конвейера будет представлен $_
. Вы не нуждаетесь в коллекции, так как один элемент может быть передан по трубопроводу. См. Ниже:
"c:\temp" | Foreach-Object { $_ }
c:\temp
$filePath | Foreach-Object { $_ }
Path
----
c:\temp\test1\t.txt
$filePath | Foreach-Object { $_.Path }
c:\temp\test1\t.txt