Zum Beispiel Ich möchte etwas wie head
, die entweder ein Array an Piped akzeptiert und dann select-object -first
, oder, erhält eine Liste von Dateinamen als Parameter und gibt die ersten Zeilen von jedem. So sollte cat $filename | head
arbeiten wie head $filename
Wie schreibe ich eine (Unix-ähnliche) Funktion, die die Eingabe von Pipe oder Dateinamen akzeptiert?
Hier ist, was ich versucht habe, so weit:
Function head()
{
param (
[switch] $help = $false,
[parameter(mandatory=$false,ValueFromPipeline=$true)] [object[]] $inputs,
[parameter(ValueFromRemainingArguments=$true)] [String[]] $files
)
If($help)
{
Write-Host "usage: $($MyInvocation.MYCommand) [<file>] <numLines>"
return
}
$lines = 0
if ($files -and [int]::TryParse($files[0], [ref]$lines)) {
$null,$files = $files
} else {
$lines = 10
}
$input | select-object -First $lines
if ($files) {get-content -TotalCount $lines $files}
}
Aber dies bewirkt, dass die Funktion den ersten Parameter ignorieren:
C:\Users\idror.TLV-WPVAJ> head C:\temp\now.ps1
C:\Users\idror.TLV-WPVAJ> head C:\temp\now.ps1 C:\temp\now.ps1
Function head()
{
param (
[switch] $help = $false,
[parameter(mandatory=$false,ValueFromPipeline=$true)] [object[]] $input,
[parameter(ValueFromRemainingArguments=$true)] [String[]] $files
)
If($help)
{
C:\Users\idror.TLV-WPVAJ> $a | head
1
2
3
C:\Users\idror.TLV-WPVAJ> $a | head 1
head : The input object cannot be bound to any parameters for the command either because the command does not take
pipeline input or the input and its properties do not match any of the parameters that take pipeline input.
At line:1 char:6
+ $a | head 1
+ ~~~~~~
+ CategoryInfo : InvalidArgument: (1:Int32) [head], ParameterBindingException
+ FullyQualifiedErrorId : InputObjectNotBound,head
So ist die verrohrt in Array _content_ oder ein Array von Dateinamen sein würde? – briantist
der Inhalt. siehe update – IttayD
Sie fragen sich, wie Sie die Parametersätze schreiben können oder möchten Sie die ganze Funktion für Sie schreiben? Hast du schon mal was probiert? – briantist