PowerShell String manipulieren: substring etc.
In diesem Artikel zeige ich ein paar Beispiele für das Manipulieren von Strings (Zeichenketten)
.ToUpper()
Wandelt einen String in Großbuchstaben um
PS C:\> $("test").ToUpper()
Result: 
TEST
.ToLower()
Wandelt einen String in Kleinbuchstaben um
PS C:\> $("TEST").ToLower()
Result: 
test
.Contains()
Testet einen String, ob eine bestimmte Zeichenfolge vorhanden ist
PS C:\> $("TEST").Contains("ES")
Result: 
True
.StartsWith()
Testet einen String, ob dieser mit einer bestimmten Zeichenfolge beginnt.
PS C:\> $("TEST").StartsWith("TE")
Result: 
True
.EndsWith()
Testet einen String, ob dieser mit einer bestimmten Zeichenfolge endet.
PS C:\> $("TEST").EndsWith("ST")
Result: 
True
.Replace()
Ersetzt eine bestimmte Zeichenfolge innerhalb eines Strings
PS C:\> $("TEST").Replace("TE","ersetzt")
Result: 
ersetztST
.Substring()
Ersetzt Teile eines Strings anhand derer Position
PS C:\> $("TEST").Substring("1")
Result: 
EST
hier ein weiters Beispiel: Anfang und Endposition:
PS C:\> $("TEST").Substring("1","2")
Result: 
ES
- 1 ... nach dem ersten Zeichen
 - 2 ... bis zum 2ten Zeichen
 
Sollte nur die Endposition verwendet werden, sieht das so aus:
PS C:\> $("TEST").Substring("","3")
Result: 
TES
.TrimStart()
Entfernt bestimmte Zeichen zu Beginn des Strings:
PS C:\> $("TEST").TrimStart("TE")
Result: 
ST
({{pro_count}})
									{{percentage}} % positiv
({{con_count}})
									DANKE für deine Bewertung!
														
							Beitrag erstellt von Bernhard
								| Veröffentlicht:  10.10.2016  
								| Aktualisiert:  02.10.2017  | 
								
															
								 Translation English		
								
							  |🔔		
		
								|	Kommentare:6
	
		
						
						
				
					
				Fragen / Kommentare
(sortiert nach Bewertung / Datum) [alle Kommentare(am besten bewertete zuerst)]
replace und substring funktionieren bei mir aus irgendeinem grund nicht. Sie werden auch nicht bei den Vorschlägen für den "nächsten" Befehl vorgeschlagen
User: Philipp Neben TrimStart war für mich auch TrimEnd ganz nützlich, funktioniert ähnlich zu TrimStart ;)
User: Philipp 
$("TEST").Substring("","3") ergibt TES und nicht EST
Hier Zitat von oben ;)
Sollte nur die Endposition verwendet werden, sieht das so aus:
PowerShell
$("TEST").Substring("","3")
Ausgabe:
EST
					danke, habe ich korrigiert
Beitrag erstellt von Bernhard
User: Daniel 
Hallo
Wie würde denn so etwas unter einer PS-String-Manipulation funktionieren:
Ich lese eine Parameterliste aus einem Konfig-File ein und schneide das Keyword weg:
foreach ($p in get-content DC_progs.cfg){
  if($p.contains("CMOD_DIRS=") = "true"){  
   write-host $p
   $cmod_dirs = $p.replace("CMOD_DIRS=", "")
   write-host $cmod_dirs 
   }
}
Resultat:
CMOD_DIRS=ond_doks\scanning;ond_kasse_zgkb;ond_doks\holdmail;ond_doks\privor;
ond_doks\scanning;ond_kasse_zgkb;ond_doks\holdmail;ond_doks\privor; 
nun müsste ich diese Liste in ein array ablegen:
unter RapidQ gibt es so eine schöne INSTR-Funktion:
    if(INSTR($p, ";") > 0) then
     ai = INSTR($p, ";") ' -> ai = 18
     b_dir$ = MID$($p, 1, ai - 1) ' -> split pos 1- pos 17 =  ond_doks\scanning
     usw für die anderen Elemente der Liste
Gibst es so etwas auch unter PS?
					Die Antwort kommt vielleicht etwas spät, aber mag anderen noch helfen:
Die Methode gibt es in PowerShell und nennt sich "split". Das kannst du einfach hinter die andere Methode "replace" hängen.
Würde dann bei deinem Beispiel in etwa so aussehen:
$dccfg = Get-Content DC_progs.cfg
foreach ($p in $dccfg){
    if($p.contains("CMOD_DIRS=")){
    $p
    $cmod_dirs = $p.replace("CMOD_DIRS=","").split(";")
    $cmod_dirs 
    }
}
Resultat:
CMOD_DIRS=ond_doks\scanning;ond_kasse_zgkb;ond_doks\holdmail;ond_doks\privor;
ond_doks\scanning
ond_kasse_zgkb
ond_doks\holdmail
ond_doks\privor
Wenn man "Write-Host" in der Ausgabe weglässt, wird es auch etwas besser sichtbar, dass man nun eine Liste zurück bekommt.
LG ChrisBeitrag erstellt von anonym