PowerShell: выберите пользовательское выражение и разверните за одну операцию
Я могу сделать что-то вроде
ls . `
| select @{ Name="Dir"; Expression = { $_ | Split-Path } } `
| select -ExpandProperty Dir
выбрать пользовательское выражение (в этом случае $_ | Split-Path
) в простой массив значений.
Есть ли способ объединить два оператора выбора в один, который все еще дает эквивалентные результаты?
1 ответ
Что ты пытаешься сделать? Вы можете получить те же результаты только с ls
/Get-ChildItem
а также Split-Path
, Не уверен, если вам нужно Microsoft.PowerShell.Core\FileSystem::
часть.
PS C:\Path\To\Dir> Get-ChildItem | Split-Path
Microsoft.PowerShell.Core\FileSystem::C:\Path\To\Dir
Microsoft.PowerShell.Core\FileSystem::C:\Path\To\Dir
Microsoft.PowerShell.Core\FileSystem::C:\Path\To\Dir
PS C:\Path\To\Dir> (Get-ChildItem).FullName | Split-Path
C:\Path\To\Dir
C:\Path\To\Dir
C:\Path\To\Dir
редактировать
Если предположить, nuget list <my-package>
выводит массив строк, вы можете использовать -replace
и регулярное выражение ($
чтобы соответствовать концу строки) манипулировать им и получить массив результатов.
$((nuget list <my-package>).Replace(" ",",") -replace "$",".nupkg")
Я думаю, что OP ищет ForEach-Object
(MSDN), который выполняет операцию с каждым элементом в коллекции входных объектов. Это похоже наmap
или Select
работа на других языках.
Так что вместо:
ls . `
| select @{ Name="Dir"; Expression = { $_ | Split-Path } } `
| select -ExpandProperty Dir
Вы хотите:
ls . `
| ForEach-Object { $_ | Split-Path }
Вы также можете заменить ForEach-Object
с %
. Но он менее читабелен и менее доступен для поиска новым пользователям PowerShell:
ls . `
| % { $_ | Split-Path }