PowerShell meldet fehlende Methode, wenn Methode vorhanden ist


1

Ich hatte kürzlich ein Problem mit der Berichterstattung von PowerShell, dass eine Methode für ein Objekt nicht vorhanden ist Get-Member berichtet, dass es tut. Dies ist nicht bei allen Methoden der Fall, aber ich habe es in mehr als einer Instanz passieren lassen.

Hier ist ein Screenshot eines Beispiels in der ISE.

enter image description here


Es scheint, als würde .Remove zwei erwarten int Parameter und Sie füttern es eine Zeichenfolge. Versuchen Sie stattdessen $ x.Remove (0,1)?
Nathan C

@NathanC Sollte es dann nicht einen anderen Fehler geben, statt "enthält keine Methode"? ETA: $x.Remove(0,1) schlägt mit demselben Fehler fehl
Iszi

Antworten:


1

Ihre $x Variable enthält ein Array. Wenn Sie ein Array an eine Funktion übergeben, durchläuft die Pipeline das Array nicht Beispiel in die Funktion; es übergibt das Array Elemente in die Funktion process Block nacheinander.

Get-Member zeigt Ihnen tatsächlich die Mitglieder der Zeichenfolge 'c' - das letzte Element im Array - und nicht die Mitglieder des Arrays. (Beachten Sie, dass die Ausgabe in Ihrem Screenshot mit beginnt TypeName: System.String.)

Wenn Sie die Mitglieder für sehen möchten $x (das Array) selbst, übergeben Sie es in Get-Member Verwendung der -InputObject Parameter, anstatt es einzupfeifen.

$X='a','b','c'; gm -InputObject $x

Dann wirst du das sehen $x ist vom Typ System.Object[] und enthält kein Remove Methode. (Sie können keine Elemente entfernen, da dies die Länge des Arrays ändern würde und Arrays in .NET eine feste Länge haben.)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.