none
Newbee Frage, Unterschied Objekt unter Hochkomma RRS feed

  • Frage

  • hallo zusammen,

    ich habe irgendwann gelesen, das man innerhalb eines Hochkomma mehrere Variablen angeben kann.

    wo liegt hier der Unterschied:

    $processes = Get-Process
    
    foreach($item in $processes){
    
    $item.processname
    "$item.processname" # erzeugt System.Diagnostics.Process (WUDFHost).processname
    
    
    $r = $item.ProcessName # wenn ich es vorher zuweise kann man es auch unter Hochkomma stellen
    
    "$r, $r" 
    # hat sicher etwas mit PS Parsern zu tun.
    }


    • Bearbeitet Dont-Worry Mittwoch, 1. April 2020 14:04
    Mittwoch, 1. April 2020 14:04

Antworten

  • Moin,

    wenn Du innerhalb eines Strings Properties expandieren möchtest (oder z.B. Text direkt im Anschluss an den Wert einer Variablen ausgeben möchtest), nimm den zu expandierenden Ausdruck einfach in $():

    $var = "abc"
    "xxx$var" # ergibt xxxabc
    "xxx$varxxx" # ergibt xxx, da $varxxx ja leer ist
    "xxx$($var)xxx" # ergibt xxxabcxxx
    "xxx$var.xxx" # ergibt xxxabc.xxx
    
    $var = Get-Process lasss
    "xxx$var.idxxx" # ergibt xxxSystem.Diagnostics.Process (lsass).idxxx
    "xxx$(var.id)xxx" # ergibt xxx<Prozess-ID>xxx

    Noch effizienter ist die Ersetzung mit Platzhaltern:

    "xxx{0]xxx{1]yyy" -f $var.ID, $var.ProcessName


    Evgenij Smirnov

    http://evgenij.smirnov.de

    • Als Antwort markiert Dont-Worry Mittwoch, 1. April 2020 16:41
    Mittwoch, 1. April 2020 14:33

Alle Antworten

  • Moin,

    wenn Du innerhalb eines Strings Properties expandieren möchtest (oder z.B. Text direkt im Anschluss an den Wert einer Variablen ausgeben möchtest), nimm den zu expandierenden Ausdruck einfach in $():

    $var = "abc"
    "xxx$var" # ergibt xxxabc
    "xxx$varxxx" # ergibt xxx, da $varxxx ja leer ist
    "xxx$($var)xxx" # ergibt xxxabcxxx
    "xxx$var.xxx" # ergibt xxxabc.xxx
    
    $var = Get-Process lasss
    "xxx$var.idxxx" # ergibt xxxSystem.Diagnostics.Process (lsass).idxxx
    "xxx$(var.id)xxx" # ergibt xxx<Prozess-ID>xxx

    Noch effizienter ist die Ersetzung mit Platzhaltern:

    "xxx{0]xxx{1]yyy" -f $var.ID, $var.ProcessName


    Evgenij Smirnov

    http://evgenij.smirnov.de

    • Als Antwort markiert Dont-Worry Mittwoch, 1. April 2020 16:41
    Mittwoch, 1. April 2020 14:33
  • danke für die sehr hilfreiche Info.

    hier hat sich ein kleiner Fehler einschlichen:

    "xxx$(var.id)xxx" # ergibt xxx<Prozess-ID>xxx
    "xxx$($var.id)xxx" # ergibt xxx<Prozess-ID>xxx

    und den Fehler finde ich leider nicht


    PS H:\> "xxx{0]xxx{1]yyy" -f $var.ID, $var.ProcessName
    Fehler beim Formatieren einer Zeichenfolge: Die Eingabezeichenfolge hat das falsche Format..
    In Zeile:1 Zeichen:1
    + "xxx{0]xxx{1]yyy" -f $var.ID, $var.ProcessName
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (xxx{0]xxx{1]yyy:String) [], RuntimeException
        + FullyQualifiedErrorId : FormatError

    Mittwoch, 1. April 2020 16:51
  • die Klammer war schuld


    "xxx{0}xxx{1}yyy" -f $var.ID, $var.ProcessName

    Mittwoch, 1. April 2020 16:52