Benutzer mit den meisten Antworten
Add-Member - Integer vs. String

Frage
-
Hallo wertes Forum,
mache jetzt schon eine Stunde rum, weil es partou nicht gelingen will einem String eine Scriptmethode hinzuzufügen. Nun bin ich am Ende und habe folgendes herausgefunden.
$Vorname = "Michael" $Vorname | Add-Member -MemberType ScriptMethod -Name Reverse -Force -Value {$this[$this.length..0] -join ""} -PassThru
Problem: Im obigen Beispiel wird kein Member erstellt.
[Int64]$i = 1257657656 $i | Add-Member -MemberType ScriptMethod -Name Megabytes -Force -Value { "{0:n1}MB" -f ($this/(1MB)) } -PassThru $i.Megabytes() 1.199,4MB
Okay: Das Ergebnis im obigen Beispiel ist wie erwartet.
Wer kann mir sagen, warum der Integer richtig verarbeitet wird und beim String im ersten Beispiel gar nichts passiert?
Gruß
Michael L.
Michael L.
Antworten
-
Moin,
Deine Frage kann ich nicht exakt beantworten. Allerdings funktioniert Dein Beispiel beim String sehr wohl, nur wird das Ausgangsobjekt in das Eingangsobjekt zurückgeschrieben, was ja auch OK ist.
$Vorname = "Michael" $Vorname = $Vorname | Add-Member -MemberType ScriptMethod -Name Reverse -Force -Value {$this[$this.length..0] -join ""} -PassThru $Vorname.Reverse()
funktioniert wie erwartet.
Warum einige Typen den Ausgang zurück in den Eingang schreiben und andere nicht, muss man die "wirklich Wissenden" fragen. Vielleicht meldet sich einer von denen ja ;-)
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> http://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com- Als Antwort markiert mlkuen Samstag, 9. September 2017 22:51
Alle Antworten
-
Moin,
Deine Frage kann ich nicht exakt beantworten. Allerdings funktioniert Dein Beispiel beim String sehr wohl, nur wird das Ausgangsobjekt in das Eingangsobjekt zurückgeschrieben, was ja auch OK ist.
$Vorname = "Michael" $Vorname = $Vorname | Add-Member -MemberType ScriptMethod -Name Reverse -Force -Value {$this[$this.length..0] -join ""} -PassThru $Vorname.Reverse()
funktioniert wie erwartet.
Warum einige Typen den Ausgang zurück in den Eingang schreiben und andere nicht, muss man die "wirklich Wissenden" fragen. Vielleicht meldet sich einer von denen ja ;-)
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> http://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com- Als Antwort markiert mlkuen Samstag, 9. September 2017 22:51
-
OK, das ist ein Documented Feature. In https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/add-member?view=powershell-5.1 unter -PassThru steht:
For most objects, Add-Member adds the new members to the input object.
However, when the input object is a string, Add-Member cannot add the member to the input object.
For these objects, use the PassThru parameter to create an output object.Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> http://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com -
Guten Morgen Evgenij,
Danke für die schnelle Antwort. Die fehlende Zuweisung von $Vorname an eine neue Variable war genau das Problem. Die fehlte in meinem Posting oben.
Ich habe jetzt mal als Member ein ScriptProperty probiert. Auch hier muss eine Neuzuweisung erfolgen, damit es geht. Ein Property ist an dieser Stelle nur etwas eleganter.
Function Reverse-String { param ([Parameter(Mandatory=$true)] [String]$StringToReverse) Return ($StringToReverse[$StringToReverse.Length..0] -join "") } $Nachname = "Holzkopf" $Nachname = $Nachname | Add-Member -MemberType ScriptProperty -Name Reverse -Force -Value {Reverse-String -StringToReverse $this} -PassThru $Nachname.Reverse
Danke!
Michael L.