marcimarc85
Goto Top

Powershell-Script, welches Dateien vom aktuellen Tag einsammelt

Hallo zusammen,

Ich habe ein etwas in die Tage gekommenes Batch_Script, was mir von mehreren Remote-Servern, jeweils immer die aktuellen Logfiles vom heutigen Tag aus bestimmten Ordner einsammelt und geordnet zur Verfügung stellt.

Das ganze soll nun ein Powershell Script werden. Das Einsammeln der Scripts an sich ist nicht das Problem. Ich tue mich aber schwer die Abfrage nach Dateiänderungsdatum und heutigem Datum umzusetzten. Auch hab ich keine Idee, wie ich es hinbekomme, die Funktion des Servers im späteren Ordnerpfad der IP anzufügen.

Hier mal das aktuelle Batch-Script:

@echo off
setlocal EnableDelayedExpansion
::--------------------------------------------------------------------
:: load environment
call D:\enterprise\bin\tools\enterprise_environment.bat || (
     echo environment file not found or not executable under %~dp0\enterprise_environment.bat
     exit /b 17
)       
::--------------------------------------------------------------------

::-----------------------------------------------------
::Systemunabhängiges Datum erzeugen

for /f %%g in ('wmic os get localdatetime ^| find "."') do set _DTS=%%g  

set _day=%_DTS:~6,2%
set _month=%_DTS:~4,2%
set _year=%_DTS:~0,4%

set _hour=%_DTS:~8,2%
set _minute=%_DTS:~10,2%

	
set _datestamp=%_DTS:~0,8%
set _timestamp=%_day%%_month%%_year%_%_hour%%_minute%


set _hosts=10.241.182.239,10.241.183.58,10.241.183.17,10.241.183.77,10.241.182.229,10.241.183.11,10.241.183.82,10.241.183.56,10.241.183.72,
set _hosts_function=MySQL,Client1,WEBSERVER1,WEBSERVER2,BACKUP,INTERFACE1,INTERFACE2,INTERFACE3,INTERFACE5,

set _storage=d:\temp\hypercare-logs
set "nowDate=%date:~0,10%"  
set _title=SBB_PROD

set _zipper=D:\enterprise\bin\tools\7z.exe


set _root_dir=%_storage%\%_title%_%_timestamp%


mkdir %_root_dir% 
if not exist %_root_dir% (
	echo could not create '%_root_dir%'  
	goto :error
)


::--------------------------------------------------------------------

set i=0
for %%h in (%_hosts%) do set /A i+=1 & set _hosts[!i!]=%%h
set i=0
for %%f in (%_hosts_function%) do set /A i+=1 & set _hosts_function[!i!]=%%f
set n=%i%

::--------------------------------------------------------------------

for /L %%i in (1,1,%n%) do (
	
	set _host=!_hosts[%%i]!
	set _hostname=!_hosts[%%i]!-!_hosts_function[%%i]!
	set _current_dir=%_root_dir%\!_hostname!
	echo !_current_dir!
	
	mkdir !_current_dir!

pushd \\!_host!\d$ 
for /f "tokens=*" %%a in ('dir /b /s /a-d "\enterprise\log\*.*"')  do (  
  set "fileTime=%%~ta"  
  set "fileDate=!fileTime:~0,10!" & rem Dateidatum von Dateizeit abtrennen  
  if [!fileDate!]==[%nowDate%] (
    echo %%~a, Tag der letzen Aenderung=!fileDate! , Heutiger Tag=%nowDate%
    if [%%~xa] neq [.zip] copy /b "%%a" "!_current_dir!" >nul 2>&1 && echo %%~nxa nach !_current_dir! kopiert... || echo %%~nxa Zugriff verweigert ^^!^^!  
    echo:
  )
)
for /f "tokens=*" %%a in ('dir /b /s /a-d "\3rdparty\apache-tomcat-9\logs\*.*"')  do (  
  set "fileTime=%%~ta"  
  set "fileDate=!fileTime:~0,10!" & rem Dateidatum von Dateizeit abtrennen  
  if [!fileDate!]==[%nowDate%] (
    echo %%~a, Tag der letzen Aenderung=!fileDate! , Heutiger Tag=%nowDate%
    if [%%~xa] neq [.zip] copy /b "%%a" "!_current_dir!" >nul 2>&1 && echo %%~nxa nach !_current_dir! kopiert... || echo %%~nxa Zugriff verweigert ^^!^^!  
    echo:
  )
)
for /f "tokens=*" %%a in ('dir /b /s /a-d "\enterprise\dat\mysql57\data\*.err"')  do (  
   copy /b "%%a" "!_current_dir!"   
)
xcopy /EY \enterprise\conf !_current_dir!\conf\
  
popd
)

:end

::Zip Archiv erzeugen 
::--------------------------------------------------------------------
%_zipper% u "%_root_dir%".zip "%_root_dir%"   

echo success

::Verzeichnis löschen
::--------------------------------------------------------------------
rd /s /q %_root_dir%"  
 
exit /b 0

:error
echo error
exit /b 1

endlocal


Dieser Part:

set _hosts=10.241.182.239,10.241.183.58,10.241.183.17,10.241.183.77,10.241.182.229,10.241.183.11,10.241.183.82,10.241.183.56,10.241.183.72,
set _hosts_function=MySQL,Client1,WEBSERVER1,WEBSERVER2,BACKUP,INTERFACE1,INTERFACE2,INTERFACE3,INTERFACE5,

und dieser Part :

 set "fileTime=%%~ta"  
  set "fileDate=!fileTime:~0,10!" & rem Dateidatum von Dateizeit abtrennen  
  if [!fileDate!]==[%nowDate%] (
    echo %%~a, Tag der letzen Aenderung=!fileDate! , Heutiger Tag=%nowDate%
    if [%%~xa] neq [.zip] copy /b "%%a" "!_current_dir!"   

sind meine Sorgenkinder

Vielen Dank schonmal

Content-ID: 7736523964

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

Ausgedruckt am: 22.11.2024 um 04:11 Uhr

7426148943
7426148943 04.07.2023 aktualisiert um 13:32:47 Uhr
Goto Top
Arrays in Powershell:
$computers ="10.241.182.239","10.241.183.58","10.241.183.17","10.241.183.77"  
Datum von Dateien vergleichen und kopieren
foreach($computer in $computers){
   Get-ChildItem "\\$computer\share\enterprise\log" -File -Filter *.log | ?{$_.LastWriteTime.Date -eq (get-date).Date}) | copy-item -Destination "D:\Irgendwo\$computer\lokal" -verbose  
}

Zeppel
mayho33
mayho33 05.07.2023 um 00:14:54 Uhr
Goto Top
Hier mal nur ein Snipped mit dem du prinzipiell mal den Zeitraum einschränken kannst. Für den Rest ist es mir schon zu spät:
Get-ChildItem -Path "DEIN PFAD" -Recurse | ? {$_.CreationTime -gt (get-date).AddDays(-10) -and $_.CreationTime -lt (get-date).AddDays(-5) }  

Geht natürlich auch mit Änderungs-Zeit:
Get-ChildItem -Path "DEIN PFAD" -Recurse | ? {$_.LastWriteTime -gt (get-date).AddDays(-10) -and $_.LastWriteTime -lt (get-date).AddDays(-5) }  

Grüße!