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-Key: 7736523964

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

Printed on: April 28, 2024 at 12:04 o'clock

Mitglied: 7426148943
7426148943 Jul 04, 2023 updated at 11:32:47 (UTC)
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
Member: mayho33
mayho33 Jul 04, 2023 at 22:14:54 (UTC)
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!