pozelei
Goto Top

Powershell Script Frage zu Ordnerübergreifung

Hallo zusammen,

ich habe mal wieder eine mehr oder minder kleine Frage.

Ich möchte ein PowerShell Script basteln, welches es mir folgende Dinge ermöglicht.

- Öffne den Ordner XY
- Wähle den obersten Ordner an und prüfe in diesem Ordner, ob Datei XY vorhanden ist, falls vorhanden löschen
- springe zurück in den vorherigen Ordner und wähle den nächsten Ordner an und prüfe, ob die Datei XY vorhanden ist, wenn ja diese löschen usw.
bis alle Ordner durchlaufen sind
- zum Schluss erstelle mir ein Log-File, von den Ordnern, indem du die Datei XY gelöscht hast und schreibe Sie mir auf C:\temp\

Folgendes Scriptschnippsel habe ich bis jetzt gebaut:

#Variable für die Datei XY

$dateixy = "C:\xy\Testdatei.txt"  
#IF Schleife

If (Test-Path $dateixy) 
{ 
    Write-Host -BackGroundColor Green "Die Datei $($dateixy) existiert."  
    Delete $dateixy 
}



Ich bin noch sehr frisch mit PowerShell bitte nehmt etwas Rücksicht ;)

Vielen Dank

Content-ID: 380740

Url: https://administrator.de/contentid/380740

Ausgedruckt am: 19.11.2024 um 14:11 Uhr

colinardo
Lösung colinardo 19.07.2018 aktualisiert um 13:04:49 Uhr
Goto Top
Servus machst du ganz einfach so ohne das ganze IF Gedöhns das ist hier überflüssig face-smile:
Start-Transcript 'C:\logdatei.txt'  
gci "C:\Oberordner\*\Testdatei.txt" -File | remove-item -Force -Verbose  
Stop-Transcript
Grüße Uwe
Pozelei
Pozelei 19.07.2018 um 13:30:37 Uhr
Goto Top
Okay, soweit so gut.
Super für die schnelle Experten Hilfe face-smile

Nun folgendes. für was steht GCI Get-Contentinformation?
Die Ordner heißen alle gleich in dem Oberordner\ erst nach löschen der Datei xy werden diese wieder mit den richtigen Namenskonventionen hinterlegt, deshalb muss in die Log-File geschrieben werden, bei welcher Namenskonvention die Datei gelöscht wurde. (ist das verständlich ausgedrückt)
Ahja und die Logfile muss so etwas wie das Datum von heute haben als Logfile_$date.txt

ich dachte da an eine Variable.
$date = "dd:mm:yy" und diese irgendwie an Out-File -Path C:\temp\Logs\Logfile_$date.txt

Geht so etwas?


Viele Grüße
colinardo
Lösung colinardo 19.07.2018 aktualisiert um 15:07:35 Uhr
Goto Top
Zitat von @Pozelei:
Nun folgendes. für was steht GCI Get-Contentinformation?
Get-ChildItem, kannst du auch als dir oder ls schreiben, das sind alles Aliase für Get-ChildItem
Die Ordner heißen alle gleich in dem Oberordner\ erst nach löschen der Datei xy werden diese wieder mit den richtigen Namenskonventionen hinterlegt, deshalb muss in die Log-File geschrieben werden, bei welcher Namenskonvention die Datei gelöscht wurde. (ist das verständlich ausgedrückt)
Jop ist ja mit obigem kein Problem
Ahja und die Logfile muss so etwas wie das Datum von heute haben als Logfile_$date.txt

ich dachte da an eine Variable.
$date = "dd:mm:yy" und diese irgendwie an Out-File -Path C:\temp\Logs\Logfile_$date.txt

Geht so etwas?
Kein Problem, erste Zeile austauschen mit :
Start-Transcript -Path "C:\temp\logs\logfile_$(get-date -f 'ddMMyyyy').txt"  
Pozelei
Pozelei 19.07.2018 um 15:05:23 Uhr
Goto Top
ZITAT:
Kein Problem, erste Zeile austauschen mit :
> Start-Transcript 'C:\temp\logs\logfile_$(get-date -f 'ddMMyyyy').txt'   
> 

Das ist das was noch nicht funktioniert es kommt der Error: Es wurde kein Positionsparameter gefunden, der das Argument "ddMMyyyy).txt" akzeptiert.

Woran kann das liegen? falsche Anführungszeichen?
colinardo
Lösung colinardo 19.07.2018 aktualisiert um 15:08:16 Uhr
Goto Top
Zitat von @Pozelei:
Woran kann das liegen? falsche Anführungszeichen?
Jepp hab mich vertippt, da gehören Doppelte drum herum da ja ansonsten keine Auflösung von Subexpressions stattfindet, ist oben korrigiert face-wink.
Pozelei
Pozelei 19.07.2018 um 15:07:31 Uhr
Goto Top
Problem gelöst, sorry für den Doppelpost. Konnte es aber nicht mehr bearbeiten:
Es muss natürlich so heißen:
Start-Transcript "C:\temp\logs\logfile_$(Get-Date -f 'ddMMyyyy').txt"
Pozelei
Pozelei 23.07.2018 um 10:06:42 Uhr
Goto Top
Hallo,

ich bin es noch einmal.

Leider hat das Script nicht funktioniert. Die Ordner heißen weiterhin D.... und die Desktop.ini wurde nicht gelöscht.
Das Script lief, nur eine halbe Minute bis Minute.

Was kann ich nun noch machen?
Soll ich das Log mal hinzufügen?
colinardo
colinardo 23.07.2018 aktualisiert um 10:22:36 Uhr
Goto Top
Zitat von @Pozelei:
Leider hat das Script nicht funktioniert.
Das Funktioniert schon, aber ...
Die Ordner heißen weiterhin D.... und die Desktop.ini wurde nicht gelöscht.
das du eine versteckte löschen willst wusste hier niemand, deswegen musst du den -Force Parameter zu Get-ChildItem hinzufügen dann klappts auch mit dem versteckten Nachbarn!!
gci "C:\Oberordner\*\desktop.ini" -File -Force | remove-item -Force -Verbose   
Einmal in die Doku schauen hätte es dir auch verraten.
Pozelei
Pozelei 23.07.2018 um 10:33:03 Uhr
Goto Top
Jetzt habe ich ja zwei -Force in dem einen Befehl oder bezieht sich das eine -Force auf Get-Childitem -File -Force auf die Datei und das andere -Force, dass er die Datei definitiv löschen soll? Wofür ist der -Verbose Parameter was sagt dieser aus?

Grüße
colinardo
colinardo 23.07.2018 aktualisiert um 10:50:47 Uhr
Goto Top
Zitat von @Pozelei:

oder bezieht sich das eine -Force auf Get-Childitem -File -Force auf die Datei und das andere -Force, dass er die Datei definitiv löschen soll?
Richtig, das eine gehört zu Get-Childitem damit dieses auch versteckte Dateien inkludiert und das andere zu Remove-Item.
Wofür ist der -Verbose Parameter was sagt dieser aus?
Der zeigt dir detaillierte Infos auf der Konsole an was beim Löschen passiert und das landet dann auch im Log.

Google kaputt?
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
-Verbose[:{$true | $false}]

Alias: vb

Displays detailed information about the operation performed by the command. This information resembles the information in a trace or in a transaction log. This parameter works only when the command generates a verbose message. For example, this parameter works when a command contains the Write-Verbose cmdlet.
Pozelei
Pozelei 25.07.2018 um 17:50:59 Uhr
Goto Top
Einen Tag hat es funktioniert, nun funktioniert es wieder nicht.
Haargenau das selbe Skript, wie kann das sein?

#Starte Script und schreibe Logfile mit aktuellem Datum in "C:\logs" 
Start-Transcript "C:\logs\logfile_$(Get-Date -Format 'ddMMyyyy').txt"  

Get-ChildItem "\\xxx\*\desktop.ini" -File -Force  | Remove-Item -Force -Verbose   

#Stoppe Script
Stop-Transcript

Es wurden keinerlei Anpassungen mehr vorgenommen, bzw. nichts in der Domäne angepasst.
Vielleicht haben sie ja noch eine Idee! face-smile

Grüße
colinardo
colinardo 25.07.2018 aktualisiert um 19:51:57 Uhr
Goto Top
nun funktioniert es wieder nicht.
Setzen sechs. Funktioniert nicht ist keine qualifizierte Meldung für ein Admin Forum liebes Kind.
Löschen kann das Skript nur auf das es auch entsprechende Zugriffsrechte besitzt und auch nur Dateien die sich nicht gerade im Zugriff befinden, gilt es ebenfalls zu berücksichtigen. Das Skript macht das was von dir gefordert war nur musst du selbst für die passende Umgebung und Randparameter sorgen!!
Also nicht rummotzen sondern Hirn einschalten und los geht's.