Geöffnete Dateien auf Windows Server mit VBScript prüfen

Manche Anwendungen mögen es nicht, wenn ihre Dateien während der Datensicherung in Benutzung sind. Automatische Backups sind dadurch nicht möglich oder können Dateien beschädigen. Ich hatte so einen Fall, bei dem in ca. 50% der Fälle die Datenbank der Anwendung beschädigt wurde.

Das Problem lässt sich einfach durch eine vorherige Prüfung des Serverdienstes auf geöffnete Dateien umgehen.

In dem folgenden VBScript wird geprüft ob in dem Verzeichnis D:\Data geöffnete Dateien sind. Falls ja, wird eine Meldung im Ereignis Log vorgenommen und das Backup nicht ausgeführt. Ansonsten wird das unter RUN_ON_SUCCESS angegebene Script ausgeführt.
Download check_lanmanserver_openfiles.vbs

' Fadil Karalic <fk@kworx.de>
Option Explicit
On Error Resume Next     ' the last oRes is always an error :-(
 
const CHECKOPEN="D:\Data"     ' folder to check for open files
const RUN_ON_SUCCESS="C:\scripts\backup.bat"    ' backup_script
 
' Event Log
const SUCCESS=0
const ERROR=1
const WARNING=2
const INFORMATION=4
const AUDIT_SUCCESS=8
const AUDIT_FAILURE=16
 
const SERVER="127.0.0.1"
 
Dim oWinNt, oRes, wso
Dim smsg
Dim OPENFILES
Dim ret
 
Set oWinNT = GetObject("WinNT://" &SERVER & "/LanManServer")
Set wso = CreateObject("WScript.Shell")
 
OPENFILES=0
 
For Each oRes In oWinNT.Resources
	if(InStr(CStr(oRes.Path),CHECKOPEN,1))then
		OPENFILES=OPENFILES+1
		sMsg = sMsg & CStr(oRes.User) & " - "
		sMsg = sMsg & CStr(oRes.Path) & vbCrLf
	end if
Next
 
if(OPENFILES>1)then
	ret=wso.LogEvent(WARNING,"Found " & OPENFILES & _
                " open file(s). Backup aborted!" & _
		vbCrLf & sMsg)
        ' do something 
else
	ret=wso.run(RUN_ON_SUCCESS,,true)
	ret=wso.LogEvent(SUCCESS,"Backup done. " & vbCrLf & ret)
end if
 
Set oWinNt = Nothing
Set wso = Nothing

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.