none
Get-Childitem | Select name -> @{Name= wie kann @{Name=....} entfernt werden um NUR den Namen zu bekommen ? RRS feed

  • Frage

  • Hallo,

    ich habe ein einfaches Script geschrieben um eine Ordnerstruktur die vorhanden ist alles unterhalb der 2ten Ebene zu löschen.
    Dies habe ich mit einer 2fachen foreach Schleife gemacht.

    Wenn ich die 1te Ebene auslese und am Monitor ausgeben lassen, funktioniert dies.

    get-childitem-Path$Pfad|wherePSIsContainer-eq'true'|selectName 

    dann kommt als Name zurück @{Name=Ordner_Ebene2}
    Damit erscheint eine Fehlermeldung, weil der Ordner nur 'Ordner_Ebene2' heist ohne @{Name=}

    Wie kann ich den Wert aus dem Array auslesen, so das ich NUR den Namen bekommen ?

    Danke
    Markus

    Freitag, 11. April 2014 11:05

Antworten

  • Habe gerade ne Methode gefunden.

    ich habe das get-childitem-Path$Pfad|wherePSIsContainer-eq'true' in eine Variable schreiben lassen. Also:

    $Folder = get-childitem-Path$Pfad|wherePSIsContainer-eq'true'

    $FolderName=$Folder.Name

    Somit funktioniert das weiter verarbeiten mit der Foreach Schleife tadellos.

    Freitag, 11. April 2014 11:31

Alle Antworten

  • Habe gerade ne Methode gefunden.

    ich habe das get-childitem-Path$Pfad|wherePSIsContainer-eq'true' in eine Variable schreiben lassen. Also:

    $Folder = get-childitem-Path$Pfad|wherePSIsContainer-eq'true'

    $FolderName=$Folder.Name

    Somit funktioniert das weiter verarbeiten mit der Foreach Schleife tadellos.

    Freitag, 11. April 2014 11:31
  • Hallo,

    so kannst Du auch direkt nur den Namen in der Variablen speichern.

    $Folder = get-childitem -Path $Pfad | Where-Object PSIsContainer -eq 'true' | Select-Object -ExpandProperty -Name


    Beste Gruesse
    brima



    • Bearbeitet brima Freitag, 11. April 2014 11:48
    Freitag, 11. April 2014 11:47
  • Hallo Markus!

    Du hast zwar deine Hürde umschifft, aber hast du auch verstanden warum das nicht ging ?

    PowerShell erzeugt und verarbeitet Objekte!

    Mach dich mit Objekten in PowerShell vertraut!
    Was meinst du warum soviele Befehle in der PowerShell mit -Object enden?

    Compare-Object
    ForEach-Object
    Group-Object
    Measure-Object
    New-Object
    Select-Object
    Sort-Object
    Tee-Object
    Where-Object

    Objekte sind Behälter die einen Bestimmten Typ haben.
    Objekte enthalten Daten und Methoden.

    Wenn man Select-Object so einsetzt wie du, dann nimmt Select-Object die Datei als Objekt und schneidet aus der Datei den Namen heraus.
    Aus diesem Namen wird ein neues Objekt erzeugt.

    Select-Objekt kann man sich ungefähr so vorstellen.....

    Get-ChildItem ist ein Lieferant, der ganz viele Schweine Anliefert. Select-Objekt ist der Metzger der die Schweine in Ihre Bestandteile zerlegen kann.
    Nach dem du Select-Objekt benutzt hast, ist dann kein Objekt mit dem Typ Schwein mehr in der Pipeline, sondern nur noch Objekte mit dem Typ Schnitzel, Eisbein oder Schinken (je nachdem was man auswählt).

    Dein Einkaufskorb mit dem du aus der Metzgerei heraus gehst ist dein neues Objekt, das du von Select-Object bekommst!!!!

    In deinem Objekt-Einkaufkorb kannst aus der Metzgerei kannst du VERSCHIEDENE Sachen einpacken in dem man Select-Object eine Einkaufsliste mitgibt.

    AUCH WENN DU NUR EIN BESTIMMTES ATTRIBUT HABEN WILLST DU BEKOMMST EIN PS-OBJEKT ZURÜCK !!!

    Siehe Beispiel:

    # dieser Befehl zeigt alle Daten an, die ein Objekt vom Typ Folder bietet
    # es wird ein neues Objekt mit dem Typ PSObject erstellt das nur noch die Daten enthält!
    # Methoden die das Objekt besaß, werden weggeschmissen!!!!!!
    Get-ChildItem | Where-Object { $_.PSIsContainer-eq'true'} | Select-Object *
    
    # dieser Befehl filetiert nur gewünschte Daten aus dem Objekt mit dem Typ Folder heraus
    # es wird ein neues Objekt mit dem Typ PSObject erstellt das die Daten enthält
    # Daten ala carte...
    Get-ChildItem | Where-Object { $_.PSIsContainer-eq'true'} | Select-Object FullName,CreationTime,Mode
    
    # dieser Befehl filetiert nur das gewünschte Property aus dem Objekt mit dem Typ Folder heraus
    # es wird ein neues Objekt mit dem Typ PSObject erstellt das die Daten enthält
    # Daten ala carte...
    Get-ChildItem | Where-Object { $_.PSIsContainer-eq'true'} | Select-Object Name
    
    # mit dem Parameter -ExpandProperty bekommt man nicht ein neues Objekt zurück,
    # sondern man bekommt den Daten Inhalt des Properties !!!
    Get-ChildItem | Where-Object { $_.PSIsContainer-eq'true'} | Select-Object -ExpandProperty Name

    Dein Befehl müsste also so aussehen wie die letzte Zeile.

    Es lohnt sich die Dokumentation zu Select-Objekt und zu jedem anderen PowerShell Cmdlet zu lesen!

    Get-Help Select-Object

    oder:

    http://www.colorconsole.de/PS_Windows/de/Select-Object.htm

    i


    PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    auf der deutschsprachigen PowerShell Community

    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+

    Freitag, 11. April 2014 12:12