Ich stieß auf ein seltsames Problem, das ich nicht erklären kann. Ich hoffe, jemand könnte etwas Licht für mich werfen.Piping-Parameter Problem mit Powershell
Ich möchte eine Funktion erstellen, die einen Parameter eines Arrays nimmt, sagen wir $ Skriptnamen und Benutzer haben eine Option, es aus früheren Ergebnissen zu leiten, wenn sie bevorzugen. Ich entfernte die nicht verwandten Sachen, um meine Verwirrung besser zu illustrieren.
In dem Prozess des Moduls, ich lese jedes Element aus dem Array und nur das Element drucken.
Meine Funktion:
function Get-Test
{
[CmdletBinding()]
param
(
[parameter(mandatory=$true,
ValueFromPipeline=$True,
ValueFromPipelineByPropertyName=$true)]
[string[]]$scriptNames
)
BEGIN
{
}
PROCESS
{
foreach ($scriptName in $scriptNames)
{
Write-Verbose "Executing: $scriptname"
}
}
END{}
Hier war es, was mich verwirrt:
Szenario 1:
ich diesen Befehl verwendet, um die Liste der Datei in meinem Verzeichnis zu erhalten:
get-childitem | Select-Object {$_.BaseName}
Die Liste der Datei war ohne Erweiterung korrekt zurück:
Allerdings, wenn ich die Ergebnisse meiner Funktion geleitet, habe ich diesen Ausdruck:
Beachten Sie die unerwünschte $ _.BaseName = Literal wurde hinzugefügt.
Szenario 2:
Wenn ich jedoch gebe diesen Befehl aus:
get-childitem | Select-Object $_.BaseName
Die Ergebnisse
nur die Basisnamen herauszufiltern nicht wirklich, aber wenn Rohrleitungen zu meiner Funktion:
get-childitem | Select-Object $_.BaseName|
Get-Test -Verbose
die $ _basename wörtlichen war nicht inbegriffen:
der Basisname jedoch die Erweiterung enthalten, das verwirrt mich wirklich.
Kann jemand etwas sehen, das bei Ihnen aufflackert? und warum passierten die folgenden Dinge:
1) Warum wurde $ _. BaseName literal im Ausdruck in Szenario 1 markiert, nach dem ich nicht gefragt habe?
2) Warum schien die Auswahl in Szenario 2 nicht zu funktionieren, aber der Ausdruck hatte nicht $ _. BaseName mit genau demselben Skript?
3) Was muss ich in meinem Skript korrigieren, um den Dateinamen nur ohne die Erweiterung und ohne das Literal $ _ auszudrucken.
'Select-Object {$ _ Basename.}' -> 'ForEach-Object {$ _. Basename}' – PetSerAl