PowerShell meldet fehlende Methode, wenn Methode vorhanden ist

366
Iszi

In letzter Zeit hatte ich ein Problem mit der Berichterstellung von PowerShell, dass eine Methode für ein Objekt nicht vorhanden Get-Memberist. 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

1
Es scheint, als würde .Remove zwei `int`-Parameter erwarten, und Sie geben einen String ein. Versuchen Sie stattdessen $ x.Remove (0,1)? Nathan C vor 10 Jahren 0
@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 vor 10 Jahren 0

1 Antwort auf die Frage

1
Joe White

Ihre $xVariable enthält ein Array. Wenn Sie ein Array an eine Funktion übergeben, übergibt die Pipeline die Array- Instanz nicht an die Funktion. Er übergibt die Elemente des Arrays einzeln in den Funktionsblock process.

Get-Memberzeigt 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 $x(das Array) selbst anzeigen möchten, übergeben Sie sie Get-Membermit dem -InputObjectParameter, anstatt ihn einzupipsen.

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

Dann sehen Sie, dass Ihr $xTyp ist System.Object[]und keine RemoveMethode enthält. (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.)