Entwickler-Ecke
Sonstiges (.NET) - Ende einer Funktion code einfügen
braincom654 - Fr 21.02.14 15:23
Titel: Ende einer Funktion code einfügen
Hallo,
ich habe eine .ps1 file, dort sind functions usw drinen. Nun möchte ich bei einer ganz bestimmten Methode am Ende eine Zeile Code hinzufügen und war auch mit Powershell - Script. Ich weiß jedoch nicht was genau alles in der ps1 file drinen ist, es können viele Funktionen sein oder nur 2 usw.
Die Funktion die ich suche könnte unter Umständen auch gar nicht existieren d.h. ist generiere sie mit meinem Code.
Beispiel, Original ps1 file:
Quelltext
1: 2: 3: 4: 5: 6: 7:
| function Test { if($test1) { Get-Host } } |
So sollte sie nach nach ausführung des scriptes aussehen:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| function Test { if($test1) { Get-Host } MyOneLineCodeWhichIHaveToInsertHereAtTheEnd } |
Ralf Jansen - Fr 21.02.14 16:13
Klingt nach simpler Suchen/Ersetzen Textverarbeitung.
a.) Den Text "function Test" suchen.
b.) Wenn gefunden dann folgende geschweifte Klammern zählen. Öffnende addieren, schließende abziehen. Wenn dieser Zähler wieder auf null steht hast du die funktionsschließende gschweifte Klammer gefunden. (Gequotete Klammen ignorieren nicht vergessen)
c.) Denn gesammten Code von "function Test" bis zum gefunden "}" löschen.
d.) Die Methode jetzt wieder, so wie sie eigentlich aussehen soll, anhängen.
braincom654 - Fr 21.02.14 16:49
Hallo Ralf,
richtig simple Lösung sowas wollte ich hören. Danke vielmals! b.) Hat mir gefehlt, ist doch (in nachhinein immer) klar die geschweiften Klammer gehen genau auf. Super, nun zur umsetzung. :)
Schönes Wochnende.
EDIT:
Habe eine elegantere Lösung gefunden:
http://blogs.msdn.com/b/powershell/archive/2013/10/30/using-asts-with-ise-to-make-scripting-more-productive.aspx
Hier mein Code der die Zeilennummer zurück gibt, welche am Ende einer gewissen Funktion in ein powershell Script ist.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| function GetEndLineNumber($filePath, $functionName) { $NewParser = [System.Management.Automation.Language.Parser] $ParseFile = (Resolve-Path -Path $filePath).ProviderPath $AbstractSyntaxTree = $NewParser::ParseFile($ParseFile, [ref]$null, [ref]$null) $functionsInFile = $AbstractSyntaxTree.FindAll({$args[0] -is [System.Management.Automation.Language.FunctionDefinitionAst]}, $true) $initializeFunction = $null foreach($function in $functionsInFile) { if($function.Name -eq $functionName) { $initializeFunction = $function break } } if($initializeFunction -eq $null){ return 0 } $initializeFunctionBody = $initializeFunction.Body return $initializeFunctionBody.Extent.EndLineNumber } |
Dann etwas dort einzufügen geht in etwa folgender maßen:
C#-Quelltext
1: 2: 3:
| $code = Get-Content $filePath $lineNumber = GetEndLineNumber $filePath "TestFunctionName" $code[$lineNumber] = "MyCode" |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!