Jump to content

Powershell - Teile des Dateinamens vergleichen und neuere Datei behalten


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

vor 7 Minuten schrieb cartis:

Niemals in den nächsten Monaten hätte ich es soweit geschafft.

Was hoffentlich heißt, dass Du trotzdem weitermachst ....  :achtung: :aha2:

 

vor 8 Minuten schrieb cartis:

Wie kann ich denn jetzt einen Wert ansprechen?

 

Da gibt's generell zwei Ansätze:

1. Indem Du die Funktion oder den Code ausführst, die oder der den Wert gewünschten ausgibt. Das ist normalerweise der Weg, wenn man einen Wert nur einmal braucht.

2. Indem Du den gewünschten Wert in einer Variablen speicherst und diese statt des Wertes verwendest. Das ist der Weg, wenn man einen Wert mehrfach braucht.

 

In PowerShell arbeiten wir mit Objekten und deren Eigenschaften. Wenn Du also einen Befehl ausführst und das Ergebnis-Objekt in der Variable $Objekt speicherst, kannst Du auf die Eigenschaft1 mit der sogenannten "Dot-Notation" $Objekt.Eigenschaft1 darauf zugreifen. Sollte das Ergebnis-Objekt mehr als eine Instanz enthalten, kann man mit einem Index die einzelnen Elemente adressieren - also z.B. $Objekt[0].Eigenschaft1.

 

So, den Rest der Grundlagen holst Du Dir aber bitte aus einem Buch oder Tutorial oder Erklärvideo auf Youtube oder so. Es gibt im Netz zum Thema PowerShell mehr als ausreichend Material. Sehr viele Fragen - auch Anfängerfragen - werden z.B. auf StackOverflow beantwortet. Dort findest Du also schon vieles inklusive Beispielen erklärt.

Link zu diesem Kommentar
  • 2 Wochen später...

Hallo zusammen und ein frohes neues Jahr wünsche ich :-)

 

Ich möchte mich nochmals bedanken für die zahlreiche Hilfe die ich hier bekommen habe.

Habe über die Feiertage einiges gewälzt und mich in Foren informiert.

 

Mir ist auch einiges bewusst geworden. Habe kleine oneliner geschrieben und auch mal ganz andere Lösungen versucht umzusetzen.

Habe es auch geschafft etwas weiter in das Thema Variablen einzutauchen.

Trotz der tollen Erklärung von BOfH_666 weiß ich dennoch leider immer noch nicht, wie ich zB. den Pfad in der Spalte "FullName" als Variable speichern kann bzw. den Wert als Source für "copy-item" verwenden kann.

Wenn ich wie in diesem Beispiel vewendet die Variable $SeparatedGroupList mit der "Dot-Notation" anspreche, dann komme ich mit FullName nicht weiter, anscheinend mache ich da was grundlegend falsch.

Könntet ihr mir vielleicht doch nochmal helfen?

 

Beste Grüße

Cartis

Link zu diesem Kommentar
vor 3 Stunden schrieb cartis:

Trotz der tollen Erklärung von BOfH_666 weiß ich dennoch leider immer noch nicht

 

Na, so toll war sie dann wohl offenbar nicht ...  :aha2:

 

vor 3 Stunden schrieb cartis:

wie ich zB. den Pfad in der Spalte "FullName" als Variable speichern kann

 

Das ist üblicherweise nicht nötig. Wenn man's doch unbedingt möchte, dann ganz normal mit "$MeineNeueSupiVariable = $Group.FullName".  ;-) 

 

vor 3 Stunden schrieb cartis:

bzw. den Wert als Source für "copy-item" verwenden kann.

 

Da es fast immer darum geht, mehrere gleichartige Operationen an gleichartigen Objekten auszuführen und wir dabei entweder die Pipeline-Laufvariable $_ oder $PSItem oder bei einer foreach-Schleife die jeweilige definierte Schleifenvariable zur Verfügung haben, können wir diese bereits existierenden Variablen mit all ihren Properties benutzen.

 

vor 3 Stunden schrieb cartis:

Wenn ich wie in diesem Beispiel vewendet die Variable $SeparatedGroupList mit der "Dot-Notation" anspreche, dann komme ich mit FullName nicht weiter, anscheinend mache ich da was grundlegend falsch.

 

Wir würden normalerweise nicht das Array mit allen Elementen ($SeparatedGroupList) benutzen, sondern die Schleifenvariable - in dem Beispiel wäre das also $Group. Demzufolge wäre dann $Group.FullName der Quell-Pfad der in der Schleife aktuell bearbeiteten Datei.

 

Häufig hilft es, wenn man sich die jeweiligen Objekte und Properties einfach auf der Konsole ausgibt. Im Zweifel mit ein bissl "Eye-Candy" drumrum. 

 

Beispiel:

Get-ChildItem -Path "$env:SystemRoot\system32" -Filter *.dll | 
    Select-Object -Skip 10 -First 5 |
        ForEach-Object {
            "Der BaseName der aktuellen Datei ist '$($_.BaseName)', die Produktversion ist '$($PSItem.VersionInfo.ProductVersion)' und die Größe beträgt '$($_.Length)' Bytes"
        }

 

Ich habe mir angewöhnt, bei solchen Ausgaben, den eigentlichen Inhalt der Variablen in einfache Gänsefüßchen einzuschließen. So würde man führende oder folgende Leerzeichen bemerken, falls das relevant ist. Und man sieht auch, wenn die Variable im Zweifel leer ist, weil dann ein doppeltes einfaches Gänsefüßchen ausgegeben wird. ;-) 

bearbeitet von BOfH_666
Link zu diesem Kommentar

 

 

So ... ich hab's nochmal gründlich durchdacht und glaube den (Denk)-Fehler gefunden zu haben. Du möchtest gar nicht $Group.FullName haben. Das wären ja auch wieder alle Dateien einer Gruppe. Du wolltest ja nur die Aktuellste, richtig?

Also brauchen wir das Ergebnis der "Gruppen-Auswertung" ... also statt ... 

 

foreach ($Group in $SeparatedGroupList) {
    $Group.Group | 
        Sort-Object -Property VersionInt | 
            Select-Object -Last 1 -Property PartlyFileName, DocumentKey, VersionInt, FullName
}

 

besser das hier:

foreach ($Group in $SeparatedGroupList) {
    $LastVersionInt =
    $Group.Group | 
        Sort-Object -Property VersionInt | 
            Select-Object -Last 1 -Property PartlyFileName, DocumentKey, VersionInt, FullName
    $LastVersionInt.FullName
}

 

Besser so?  ;-) 

bearbeitet von BOfH_666
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...