Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

PowerShell function und return

Mitglied: filippg

filippg (Level 3) - Jetzt verbinden

27.05.2012 um 00:01 Uhr, 14562 Aufrufe, 3 Kommentare

Hallo,

ich will in PowerShell eine Funktion schreiben, die einen Wert zurück gibt. Dabei stoße ich auf das eine Funktion alles Output zurück gibt, was nicht aufgefangen wird.

01.
function Clean-String([string] $toClean, [string]$returnValue){ 
02.
	$sb = New-Object -TypeName "System.Text.StringBuilder" 
03.
	$replaceChars = @{"ä" = "ae"; "ö" = "oe"} 
04.
	 
05.
	[string] $c 
06.
	for([int] $i = 0; $i -lt $toClean.Length; $i++){ 
07.
		$c = ($toClean[$i]).ToString() 
08.
		if($replaceChars.ContainsKey($c)){ 
09.
			$sb.Append($replaceChars[$c]) 
10.
			 
11.
		} else { 
12.
			$sb.Append($c) 
13.
14.
15.
	return $sb.ToString() 
16.
17.
 
18.
$a = Clean-String "Ärgerlöch" 
19.
Write-Host $a
gibt eben nicht "aergerloech" zurück, sondern gleich 10x aergerloech (was dann natürlich schon sehr ärgerlich ist). Sucht man ein wenig, so findet man heraus, dass das Problem durchaus bekannt ist. Aber was ich noch nicht finden konnte ist eine Lösung dafür. Wenn man vor das $sb.Append ein [void] setzt, bekommt man nur ein aergerloech, aber davor ein Leerzeichen. Man müsste also bei jeder FUnktion genau suchen, welche Zeile alles einen Output produziert, und den dann jeweils unterdrücken. Aber das kann doch wohl nicht die Lösung sein! Gibt es kein "Verwerfe allen Output", damit dann anschließend tatsächlich nur der bei return angegebenen Wert zurückgegeben wird?

Gruß

Filipp
Mitglied: dog
27.05.2012 um 03:00 Uhr
Die Lösung ist doch recht einfach zu finden:
http://rkeithhill.wordpress.com/2007/09/16/effective-powershell-item-7- ...

Dort gibt es sogar dein Beispiel mit dem StringBuilder und die genaue Erklärung, warum das passiert.

Und jetzt schauen wir mal warum [void] nicht funktioniert:
01.
echo $a.GetType().FullName 
02.
echo $a 
03.
System.Object[] 
04.
05.
aergerloech
Du bekommst also immer noch ein Array zurück, also hast du vergessen was zu capturen.
Und wenn du jetzt deinen Code durchgehst, dann siehst du recht schnell, dass dein
01.
[string] $c
daran schuld ist.
Und das ist ohnehin überflüssig, weil in Powershell Variablen nicht vor der Benutzung deklariert werden müssen.

01.
echo $a.GetType().FullName 
02.
echo $a 
03.
System.String 
04.
aergerloech
Schon passt es...
Bitte warten ..
Mitglied: filippg
27.05.2012 um 14:24 Uhr
Hallo Dog,

danke für die Antwort. Der Knackpunkt liegt im
Und wenn du jetzt deinen Code durchgehst, dann siehst du recht schnell, dass ...
daran schuld ist.
Es muss doch eine Lösung geben, mit der man das generisch lösen kann. Denn erstens habe ich das nicht "recht schnell" gesehen, sondern gar nicht, und zweitens kann es ja auch mal sein, dass ich eine Function mit ein paar Zeilen mehr schreiben will, bei der es dann auch du oder sonstwer nicht mehr recht schnell sieht. In sofern also: das konkrete Problem ist gelöst, danke für die Hilfe. Aber Generell muss es da einfach noch etwas geben.

Gruß

Filipp
Bitte warten ..
Mitglied: filippg
09.06.2012, aktualisiert um 01:14 Uhr
Hallo,

also, eine wirklich hübsche Lösung habe ich noch nicht, aber eine, die es einem erspart, in großen Funktionen stundenlang zu suchen, welche Zeile denn nun einen Wert auf die Pipe legt. Ich verwende jetzt Set-Variable.

01.
PS C:\> function returnSomething ($retVarName) { $wert = "Zurueck" ; Set-Variable -Value $wert -Name $retVarName -Scope 1 } 
02.
PS C:\> returnSomething "foo" 
03.
PS C:\> $foo 
04.
Zurueck
Grüße

Filipp
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Powershell - WMI Return Codes unterdrücken, WIE?

gelöst Frage von instinctlessBatch & Shell3 Kommentare

Hi, ist vermutlich ne noob frage aber ich habe folgendes Problem Folgender Aufruf in einem Script gibt auf der ...

Batch & Shell

POWERSHELL function in if statement aufrufen

gelöst Frage von 199765xyBatch & Shell2 Kommentare

Hallo zusammen, Ich versuche seit längerem eine Funktion in einem if statement auszuführen. Bis jetzt habe ich es nicht ...

Batch & Shell

Powershell Function als String in Textdatei exportieren

gelöst Frage von MarabuntaBatch & Shell3 Kommentare

hi, ich möchte eine ganze funktion innerhalb eines skripts in eine neue datei exportieren. etwa so: function blubb{ $a="1" ...

Batch & Shell

Abfrage function und weitergabe der Parameter

gelöst Frage von complexBatch & Shell6 Kommentare

Hallo zusammen, bin leider noch blutiger anfänger im Bereich Powershell. Zu meinem Problem: Ich möchte ein Script schreiben, dass ...

Neue Wissensbeiträge
Humor (lol)
IoT-Gefahr: Smartes Aquarium leckt!
Information von Lochkartenstanzer vor 1 TagHumor (lol)3 Kommentare

Moin, Die IoT-Manie hat weitere Opfer gefunden. Ein Casino-Leck durch ein smartes Aquarium: Allerdings haben sie kein Wasser, sondern ...

Router & Routing

Alte Fritzbox 7270 mit VPN und SIP-Telefonie hinter O2 Homebox 6641 als "Modem"

Erfahrungsbericht von the-buccaneer vor 1 TagRouter & Routing3 Kommentare

Nun war es soweit: Auch O2 hat mich mit VOIP zwangsbeglückt. Heute am Privatanschluss, in 2 Wochen ist das ...

Sicherheit

Ungepatchte Remote Code Execution-Lücke in LG NAS

Information von kgborn vor 2 TagenSicherheit

Nutzt wer LG NAS-Einheiten? In den NAS-Einheiten der LG Network Storage-Einheiten gibt es eine sehr unschöne Schwachstelle, die einen ...

Windows Update

Neue Version KB4099950 NIC Einstellungen gehen verloren

Information von sabines vor 2 TagenWindows Update2 Kommentare

Es ist eine neue Version des KB4099950 verfügbar, die das Problem mit den verlorenen Netzwerkeinstellungen lösen soll. Das Datum ...

Heiß diskutierte Inhalte
Linux Netzwerk
Raspberry Pi 3: WLAN Power save deaktivieren
Frage von nordie92Linux Netzwerk14 Kommentare

Moin moin, mein Raspberry Pi 3 Model B benötigt eine dauerhaft aktive WLAN-Verbindung. Leider bricht die WLAN-Verbindung nach einigen ...

Vmware
Server 2008 r2 vmware terminalserver
Frage von MasterCVmware12 Kommentare

Guten Abend zusammen, ich hoffe , dass einer von euch mir weiterhelfen kann ,bei meinem kack Problem ! Ist ...

Netzwerkmanagement
Netzwerkmanagment im Haus mit Switch, Panel und pfsense
gelöst Frage von CorraggiounoNetzwerkmanagement12 Kommentare

hi zusammen, wir sind gerade dabei das ganze Haus bzw. die einzelnen Zimmer mit netzwerkdosen zu versorgen. Vom Keller ...

Router & Routing
VPN hinter zweiter Fritzbox nutzen im Nachbarhaus
gelöst Frage von georg2204Router & Routing10 Kommentare

Hallo zusammen, ich blicke hier leider nicht mehr so ganz durch. In Haus 1 steht eine Fritzbox 7390, diese ...