PowerShell:选择自定义表达式并在一个操作中展开

时间:2017-10-30 08:24:50

标签: powershell select-object

我可以做类似

的事情
$_ | Split-Path

将自定义表达式(在本例中为sendToServer)选择为一个简单的值数组。

有没有办法将两个select语句合并为一个,仍能产生相同的结果?

2 个答案:

答案 0 :(得分:0)

你想做什么?只有ls / Get-ChildItemSplit-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")

答案 1 :(得分:0)

我认为OP正在寻找ForEach-ObjectMSDN),它对输入对象集合中的每个项目执行操作。与其他语言中的mapSelect操作类似。

所以代替:

ls . `
| select @{ Name="Dir"; Expression = { $_ | Split-Path } } `
| select -ExpandProperty Dir

您要

ls . `
| ForEach-Object { $_ | Split-Path }

您也可以将ForEach-Object替换为%。但是对于新的PowerShell用户而言,它的可读性和搜索性较低:

ls . `
| % { $_ | Split-Path }