none
Projekt Dateiabfrage RRS feed

  • Frage

  • Hallo Leute,

    Ich möchte mich mal im Vorfeld entschuldigen da ich etwas Begriffstutzig bin und ein blutiger Beginner im PS bin.

    Ich hoffe ihr lasst mich trotzdem nicht hängen. Ich habe schon recht viel gegoogelt und finde einfach keine Lösung auf meine Anforderung.

    Nun aber zu meinem Anliegen:

    Ich brauche eine möglichkeit einen Pfad durchsuchen zu lassen der mir das aktellste File/datei grün anzeigt (Tagaktuell) und wenn es älter als 2 Tage ist sich rot verfärbt.

    Ich denke es ist für euch eine leichte Übung für mich ist es ein unüberwindbarer Berg. :(

    Sinn der Übung ist das ich einen Ordner mit Backupdateien untersuchen lassen möchte und mir einen Misstand Rot darstellt.

    Ich danke euch schon mal für eure Hilfe.

    mfg

    Joschy


    • Bearbeitet Joschy2012 Montag, 2. April 2012 19:43
    Montag, 2. April 2012 19:42

Antworten

  • Ich nehme an, mit "Ich habe schon recht viel gegoogelt" meintest du, das du versucht hast ein fix und fertiges Skript zu finden, das tut was du möchtest. :) Mit dieser Methode magst du mal Glück haben, stößt aber schon bei kleinen Anpassungen wieder an deine Grenzen.
     
    Grundsätzlich schreiben wir hier keine Skripte auf Zuruf, sondern unterstützen (und das sehr gerne) bei deinen eigenen Versuchen deine Aufgabe zu lösen. Dafür wirst du allerdings nicht drumherum kommen, erstmal ein paar Grundlagen zu lernen. Was ich dafür immer gerne empfehle ist das Powershell-Buch von Tobias Weltner. (Gibts auch in abgespeckter Form auf Englisch kostenlos als ebook)
     

    Also ausnahmsweise: (Erklärungen inline)

    # Einfache Variante:
    
    # Verzeichnis einlesen , Ordner ausfiltern und nach Alter sortieren
    $dir = Get-ChildItem "d:\tmp" |  where { ! $_.PSIsContainer } | sort LastWriteTime -Descending
    
    foreach ($script:file in $dir) {
    
    	# Heutige Datei
    	if (($file.LastWriteTime).Date -eq (Get-Date).date ){
    	 Write-Host  $file -ForegroundColor darkGreen
    	}
    	
    	# Dateien älter 2 Tage
    	elseif ( $file.LastWriteTime -lt (Get-Date).adddays(-2) ) {
    	 Write-Host  $file -ForegroundColor Red
    	}
    	
    	# alle anderen
    	else {
    		 Write-Host  $file                 
    		 
    	}
    }
    
    
    # oder das Ganze als Tabelle 
    	
    Get-ChildItem "d:\tmp" |  where { ! $_.PSIsContainer } | sort LastWriteTime -Descending `
    | Format-Table  -Property Name, @{label = "LastWriteTime" ; Expression = {
    	if (($_.LastWriteTime).Date -eq (Get-Date).date ) { $Host.ui.rawui.ForegroundColor = "darkGreen" ;  $_.LastWriteTime }
    	elseif ( $_.LastWriteTime -lt (Get-Date).adddays(-2) ) {$Host.ui.rawui.ForegroundColor = "red" ; $_.LastWriteTime}
    	else { $Host.ui.rawui.foregroundcolor = "black" ; $_.LastWriteTime  } 
    } 
    } -HideTableHeaders 
    $Host.ui.rawui.foregroundcolor = "black"

     
    Für die Zukunft, lies bitte mal diesen Post.
     

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".


    Montag, 2. April 2012 22:16
    Moderator

Alle Antworten

  • Ich nehme an, mit "Ich habe schon recht viel gegoogelt" meintest du, das du versucht hast ein fix und fertiges Skript zu finden, das tut was du möchtest. :) Mit dieser Methode magst du mal Glück haben, stößt aber schon bei kleinen Anpassungen wieder an deine Grenzen.
     
    Grundsätzlich schreiben wir hier keine Skripte auf Zuruf, sondern unterstützen (und das sehr gerne) bei deinen eigenen Versuchen deine Aufgabe zu lösen. Dafür wirst du allerdings nicht drumherum kommen, erstmal ein paar Grundlagen zu lernen. Was ich dafür immer gerne empfehle ist das Powershell-Buch von Tobias Weltner. (Gibts auch in abgespeckter Form auf Englisch kostenlos als ebook)
     

    Also ausnahmsweise: (Erklärungen inline)

    # Einfache Variante:
    
    # Verzeichnis einlesen , Ordner ausfiltern und nach Alter sortieren
    $dir = Get-ChildItem "d:\tmp" |  where { ! $_.PSIsContainer } | sort LastWriteTime -Descending
    
    foreach ($script:file in $dir) {
    
    	# Heutige Datei
    	if (($file.LastWriteTime).Date -eq (Get-Date).date ){
    	 Write-Host  $file -ForegroundColor darkGreen
    	}
    	
    	# Dateien älter 2 Tage
    	elseif ( $file.LastWriteTime -lt (Get-Date).adddays(-2) ) {
    	 Write-Host  $file -ForegroundColor Red
    	}
    	
    	# alle anderen
    	else {
    		 Write-Host  $file                 
    		 
    	}
    }
    
    
    # oder das Ganze als Tabelle 
    	
    Get-ChildItem "d:\tmp" |  where { ! $_.PSIsContainer } | sort LastWriteTime -Descending `
    | Format-Table  -Property Name, @{label = "LastWriteTime" ; Expression = {
    	if (($_.LastWriteTime).Date -eq (Get-Date).date ) { $Host.ui.rawui.ForegroundColor = "darkGreen" ;  $_.LastWriteTime }
    	elseif ( $_.LastWriteTime -lt (Get-Date).adddays(-2) ) {$Host.ui.rawui.ForegroundColor = "red" ; $_.LastWriteTime}
    	else { $Host.ui.rawui.foregroundcolor = "black" ; $_.LastWriteTime  } 
    } 
    } -HideTableHeaders 
    $Host.ui.rawui.foregroundcolor = "black"

     
    Für die Zukunft, lies bitte mal diesen Post.
     

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".


    Montag, 2. April 2012 22:16
    Moderator
  • Hallo
    Denniver,

    Danke für
    deine Hilfe und Vorschlag.
    Ich möchte dir sagen dass ich kein Forumsbegeisteter Anwender bin und im Grunde lieber selber versuche etwas zu lösen oder es halt verwerfe wenn ich es nicht schaffe. In den Foren wo ich aktiv war habe ich nur schlechte Erfahrungen gemacht und
    wurde nur blöd angemacht.

    Egal, dein Anliegen das ich erst mal den Post mit den Regeln hier lesen soll kann ich dir sagen dass ich dies gemacht habe.

    Leider gibt es bei mir keine Grundlagen im Powershell und so suchte ich mir einzelne Fragmente aus dem Internet zusammen um diese in einem Skript zusammenzubasteln. Leider geht das unter PS nicht mehr so einfach als wie ich das von einfachen Batchskriptchen gewohnt war.

    So da ich aber bei der Arbeit jetzt zum zweiten Mal eine unangenehme Erfahrung machte weil ich das Datum übersehen habe, war diese Idee geboren.

    Ich werde deinen Ansatz/Lösung mal testen und schauen wie dies funktioniert.

    Weiteres möchte ich dir für den Buchtipp danken. Ich brauche allerdings wirklich was für blutige Beginner wenn du da einen Titel für ein Buch für mich hättest wäre ich dankbar. Es wäre nicht schlecht wenn es dieses in Deutsch gibt da ich im Englisch nicht so der Held bin und somit noch ein zusätzliches Verständnisproblem hätte.

    Bestelle mir morgen in der Firma mal das Buch von Tobias Weltner.

    Ich werde mich nach dem Testen noch mal melden und meine Erfahrung mitteilen und hoffe dass
    ich in Zukunft die Vorarbeit alleine erledigen kann.
    J

    Also vielen Dank noch Mal und es geht mir gewiss nicht darum von euch meine Arbeit erledigen zu lassen.

    Gruss
    Joschy



    • Bearbeitet Denniver ReiningMVP, Moderator Mittwoch, 4. April 2012 00:31 Direkten Link zu Amazon gelöscht. Ich mache schon genug Werbung für das Buch :)
    Dienstag, 3. April 2012 19:06
  • > In den Foren wo ich aktiv war habe ich nur schlechte Erfahrungen gemacht und wurde nur blöd angemacht.

    Hier macht dich niemand blöd an, versprochen. Sind alles nette, sehr hilfsbereite Jungs hier. :)
     

    > Leider gibt es bei mir keine Grundlagen im Powershell...
    > ... es geht mir gewiss nicht darum von euch meine Arbeit erledigen zu lassen

    Das war dann vielleicht nicht deine Intention, aber ohne ein wenig Grundlagenwissen, läuft die Frage nach einer konkreten Lösung (Skript) für ein Problem genau darauf hinaus.
     
    Es ist vielen glaube ich nicht klar, aber es ist -je nach Frage- sehr zeitaufwendig qualitativ hochwertige Hilfe zu leisten. Lösungen wollen überlegt -, Skripte getestet -, Fehler Gesucht -, Dinge nachrecherchiert und am Ende das Ganze am besten noch kommentiert werden, damit der Fragende auch was lernt.

    Man muß sich das ab und an einfach mal klar machen: Das mir im 'normalen Leben' jemand wildfremdes eine halbe Stunde (oder mehr) seiner Zeit schenkt, um mir bei einem Problem zu helfen, und am Ende noch nicht einmal eine Gegenleistung erwartet, ist eher ungewöhnlich und die Ausnahme.
     
    Im Netz ist das üblich. Ich finde das nach wie vor äußerst genial.
     
    Leider ist es aber auch für manche etwas zu selbstverständlich geworden.

    Das ist ärgerlich für die Helfenden, und führt über kurz oder lang dazu das diese weniger Lust haben sich mit den Problemen anderer auseinanderzusetzen.

    Damit das das nicht passiert bin ich hier, -wo ich das ein wenig beeinflussen kann-, streng und lege Wert darauf das die Hilfesuchenden das zu schätzen wissen und sich entsprechend verhalten. Dazu gehört als Minimum die Regeln zu befolgen.
     

    > Ich brauche allerdings wirklich was für blutige Beginner wenn du da einen Titel für ein Buch für mich hättest wäre ich dankbar

    Da ist das Weltner-Buch genau richtig. Und du kannst selbstverständlich mit jeglichen Fragen oder Problemen hierher kommen.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Mittwoch, 4. April 2012 00:26
    Moderator
  • Hallo Denniver,

    Ich möchte mich noch mal bei dir bedanken.

    Heute habe ich noch den halben Nachmittag damit zugebracht deinen super Ansatz für mich anzupassen.

    Folgendes Ergebnis ist dabei rausgekommen:

    Jetzt ist die Überprüfung möglich und ich habe noch eine Textdatei in der ich eine Liste von Pfaden angeben kann die an unterschiedlichen Orten liegen. Exact wie ich das brauche. Wie du siehst habe ich deinen Vorschlag etwas umgebaut.

    Naja das ganze ist eine zusammensetzung von Funden im Netz,... naja aber es funktioniert.

    Das Buch ist bestellt und dann werde ich mal sehen ob ich damit klar komme! Auf jeden Fall noch mals vielen Dank und beim nächsten mal hoffe ich das ich bei meinen Fragen schon einen Quelltext mitliefern kann.

    Grüsse Joschy

    Mittwoch, 4. April 2012 19:08
  • Prima, aber das nächste Mal: Code bitte immer als "Codeblock" einfügen. Das ist dieser Button: 

    und niemals als Bild. Da kann keiner was mit anfangen.

    Was die Anpassungen angeht: du ignorierst nun alle Dateien die 1 oder 2 Tage alt sind, das ist so gewollt?

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Donnerstag, 5. April 2012 05:59
    Moderator
  • Hallo Denniver,

    :(  DU hast recht das ganze ist jetzt echt doof.

    Vorgestern funktionierte das ganze noch mit Grün und Rot, leider aber nicht mit der Datei die ein Tag älter ist. wieso kannst du sagen das ich nun alle dateien ignoriere? Ja klar wenn die Dateien unterschiedlich heissen oder Ext haben dann gebe ich dir recht. aber da die all gleich heissen und nur unterschiedliche Datums im Namen haben kann ich das gut mit einer Wildcard steuern. Habe heute den ganzen Tag rumgeübt und komme nicht drauf. Also im Grunde ist es ja nur wichtig das die letzte geschriebene Datei in dem Pfad (die ja immer gleich heisst) das aktuelle oder ein Tag älteres Datum besitzt, dan ist die Ausgabe GRÜN. Älter als 2 Tage Ausgabe ROT.

    So jetzt komme ich nicht dahinter wie ich das IF, IFELSE noch manipulieren kann das diese 2te Bedingung miteinbezogen wird. Bei meinen Tests ergab es immer nur eine oder gar keine Ausgabe.

    Kannst du mir hier bitte noch mal auf die Sprünge helfen? Und so ist meine Freude wieder dahin.

    Gruss

    Joschy

    Donnerstag, 5. April 2012 18:09
  • >wieso kannst du sagen das ich nun alle dateien ignoriere?
     
    Das habe ich gar nicht. Ich habe gesagt, das dein Code alle Dateien die nicht von heute (grün) oder älter als zwei Tage (rot) sind, ignoriert. Sagen kann ich das, weil ich Scripte lesen kann ;-) und weil du die letzte Zeilen meines Scriptes:
     

    	# alle anderen
    	else {
    		 Write-Host  $file                 
    		 
    	}

     
    weggelassen
    hast.
     
     
    > klar wenn die Dateien unterschiedlich heissen oder Ext haben dann gebe ich dir recht
     
    Weder
    dein noch mein Script beachtet in irgend einer Weise die Dateinamen oder Dateiendungen. Zur Datumsberechnung wird ausschließlich die Zeit des letzten Schreibzugriffs (LastWriteTime) herangezogen.
     
     
    > Kannst du mir hier bitte noch mal auf die Sprünge helfen? Und so ist meine Freude wieder dahin
     

    Lass dich nicht so schnell entmutigen. Wenn du dich mal ein bischen mit dem Buch beschäftigt hast, wirst du ziemlich schnell verstehen wie die Dinge bei Powershell grundsätzlich funktionieren.

    Bevor ich dir jetzt bei dem Script weiterhelfe, schreib noch mal in Kurzfassung welche Dateien welche Farbe haben sollen (das ist nämlich oben wiedersprüchlich) :
     
    Dateien des aktuellen Tages (heute):                    Grün

    Dateien 1 oder 2 Tage alt:                                    ???

    Dateien älter als 2 Tage (also 3,4,5.. etc Tage alt): Rot

     
    Falls die Tageeinteilung falsch ist, bitte ändern.

    Grüße, Denniver

     


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Donnerstag, 5. April 2012 20:11
    Moderator
  • Ui ich muss hier noch viel lernen, Ich hoffe dir reisst der Geduldsfaden mit mir nicht! :)

    Also noch mal zu den Farben und Erklärung:

    Es geht um die Überprüfung von Backupfiles, diese sind entweder Tagaktuell oder ein Tag alt. Alles was da rausfällt ist nicht akzeptabel und sollte mich alarmieren. So ergeben sich folgende Farben:

    gleicher Tag und Vortag sind Grün, alles was älter ist, ist Rot.

    Danke für deine Mühe!

    g

    joschy

    Donnerstag, 5. April 2012 20:32
  • Gut dann ändere den Mittelteil deines Scriptes (alles innerhalb der zweiten foreach-Schleife raus) so ab:

    	# Heutige + Gestrige Datei
    	if ( $file.LastWriteTime -gt (Get-Date).adddays(-2) ) {
    	 Write-Host  $file -ForegroundColor darkGreen
    	}	
    	# alle anderen
    	else { 
    	 	Write-Host  $file -ForegroundColor Red
    	 }
    

    Viel Spass beim Lernen,

    Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    • Als Antwort vorgeschlagen Alex Pitulice Montag, 9. April 2012 07:06
    • Als Antwort markiert Alex Pitulice Montag, 9. April 2012 07:06
    • Tag als Antwort aufgehoben Joschy2012 Donnerstag, 12. April 2012 10:13
    Freitag, 6. April 2012 10:05
    Moderator
  • Hallo Denniver,

    Danke noch mal für deine Hilfe, Ich denke jetzt ist es für meine Zwecke einsetzbar.

    Der schlussendliche Code sieht nun so aus:

    $Dateien = Get-content "D:\VTASK-PS\dateiliste.txt"; # IF-Schleife für die abarbeitung der Dateililste .txt foreach ($Datei in $Dateien) { $file = get-item "$datei" # If-Schleife für den Abgleich des Datums der Dateien aus der Liste. # Bei brauchbaren ergebnissen ist die Farbe Grün sonst Rot foreach ($script:file in $File) { # Heutige Datei if (($file.LastWriteTime).Date -eq (Get-Date).date){ Write-Host $file -ForegroundColor Green } # Dateien älter 2 Tage elseif ( $file.LastWriteTime -lt (Get-Date).adddays(-2) ) { Write-Host $file -ForegroundColor red } # alle anderen else { Write-Host $file -ForegroundColor green } } # Abstand zum nächsten Schleifendurchlauf Echo "" Echo "------Nächste-Überprüfung------------------------" Echo "" }

    __________________________________________________________________________________________________________________

    Das Resultat:

    Das Buch habe ich erhalten und ich werde es mal durchackern sofern es die Zeit zulässt.

    Es sind noch ein paar änderungen gefragt wie z.B. das nur die letzte Datei angezeigt wird und auch das Datum

    ersichtlich ist. Mal sehen.

    G

    Joschy

    Donnerstag, 12. April 2012 10:21