我有這個陣列,如此處所示
$files=1..10
我想回傳除第4 個物件之外的所有內容
有沒有更簡單的方法來代替這個?這可行,但我認為必須有一個更簡單的方法。
$files[0,1,2,4,5,6,7,8,9]
uj5u.com熱心網友回復:
在PowerShell Core中,最簡單的解決方案是使用Select-Object -SkipIndexie:
$files = 1..10
$files | Select-Object -SkipIndex 1, 2, 4
3
5
6
7
8
9
10
否則,如果您想通過索引來實作,則解決方案會更加麻煩:
# if you want to do it dynamically (not hardcoding the index of the last element)
$files[0..2 4..($files.Length - 1)]
如果您不想或無法安裝最新版本的 PowerShell 并且仍然希望擁有與上面演示的相同的功能,您可以使用SteppablePipeline-SkipIndex擁有自己的包裝器并將包裝器存盤在您的包裝器中以便加載每次你開始一個新的會話。請注意,此代碼是使用Class自動生成的,唯一添加的邏輯是:Select-Object$PROFILEProxyCommand
- 在
begin塊中:
if($withSkipIndex = $PSBoundParameters.Remove('SkipIndex')) {
$i = 1
}
- 在
process塊中:
if($withSkipIndex -and $i -in $SkipIndex) {
return
}
包裝代碼:
function Select-Object2 {
[CmdletBinding(
DefaultParameterSetName='DefaultParameter',
HelpUri='https://go.microsoft.com/fwlink/?LinkID=2096716',
RemotingCapability='None'
)]
param(
[Parameter(ValueFromPipeline=$true)]
[psobject]
${InputObject},
[Parameter(ParameterSetName='DefaultParameter', Position=0)]
[Parameter(ParameterSetName='SkipLastParameter', Position=0)]
[System.Object[]]
${Property},
[Parameter(ParameterSetName='DefaultParameter')]
[Parameter(ParameterSetName='SkipLastParameter')]
[string[]]
${ExcludeProperty},
[Parameter(ParameterSetName='DefaultParameter')]
[Parameter(ParameterSetName='SkipLastParameter')]
[string]
${ExpandProperty},
[switch]
${Unique},
[Parameter(ParameterSetName='DefaultParameter')]
[ValidateRange(0, 2147483647)]
[int]
${Last},
[Parameter(ParameterSetName='DefaultParameter')]
[ValidateRange(0, 2147483647)]
[int]
${First},
[Parameter(ParameterSetName='DefaultParameter')]
[ValidateRange(0, 2147483647)]
[int]
${Skip},
[Parameter(ParameterSetName='SkipLastParameter')]
[ValidateRange(0, 2147483647)]
[int]
${SkipLast},
[Parameter(ParameterSetName='DefaultParameter')]
[Parameter(ParameterSetName='IndexParameter')]
[switch]
${Wait},
[Parameter(ParameterSetName='IndexParameter')]
[ValidateRange(0, 2147483647)]
[int[]]
${Index},
[Parameter(ParameterSetName='SkipIndexParameter')]
[ValidateRange(0, 2147483647)]
[int[]]
${SkipIndex}
)
begin {
$outBuffer = $null
if ($PSBoundParameters.TryGetValue('OutBuffer', [ref]$outBuffer)) {
$PSBoundParameters['OutBuffer'] = 1
}
if($withSkipIndex = $PSBoundParameters.Remove('SkipIndex')) {
$i = 1
}
$wrappedCmd = Get-Command 'Microsoft.PowerShell.Utility\Select-Object'
$scriptCmd = { & $wrappedCmd @PSBoundParameters }
$steppablePipeline = $scriptCmd.GetSteppablePipeline($myInvocation.CommandOrigin)
$steppablePipeline.Begin($PSCmdlet)
}
process {
if($withSkipIndex -and $i -in $SkipIndex) {
return
}
$steppablePipeline.Process($_)
}
end {
$steppablePipeline.End()
}
}
用法與以下內容完全相同Select-Object:
$files | Select-Object2 -SkipIndex 1, 2, 4
3
5
6
7
8
9
10
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/523417.html
標籤:电源外壳
