larz
Goto Top

Abfrage, ob Dateien aus einem bestimmten Verzeichnis geöffnet sind

Hallo zusammen,

ich habe hier einen Server auf dem eine Anwendung läuft, die häufiger Updates und Konvertierungsläufe benötigt. Nun ist es so dass der Fachverantwortliche die Anwendung während eines Updates sperrt, so dass die Benutzer beim Anmeldeversuch eine entsprechende Meldung bekommen und über die Anmeldemaske nicht drüber kommen.
Leider reciht es aus dass die Anmeldemaske geöffnet ist, um das Update zu blockieren. Daher folgende Frage:

Ist es möglich per Batch aus der Computerverwaltung eines entfernten Computers unter "Systen/Freigegebene Ordner/Geöffnete Dateien" auszulesen, ob Dateien aus einem bestimmten Verzeichnis geöffnet sind? Soll für den Fachverantwortlichen eben möglichst einfach sein, da er mit Windows-Administration nix am Hut hat

Bin dankbar für jeden Vorschlag


Gruß
Larz

Content-Key: 132146

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

Printed on: April 18, 2024 at 06:04 o'clock

Member: rubberman
rubberman Dec 22, 2009 at 18:03:47 (UTC)
Goto Top
Hallo Larz,

ich bin mir nicht sicher, ob Dir openfiles.exe an der Stelle was bringen könnte, á la
openfiles.exe /query [/s Computer [/u Domain\User [/p Password]]] [/fo {TABLE|LIST|CSV}] [/nh] [/v]

Grüße
rubberman
Member: Larz
Larz Dec 23, 2009 at 11:57:35 (UTC)
Goto Top
Hallo rubberman,

super, das passt schon mal! Einen Dump der Liste habe ich nun schon. Ist 400 kB groß. Jetzt wollte ich mit

for /f "delims=" %%i in ('findstr "C:\..\Verzeichnis\Unterverzeichnis\" c:\\temp\openfiles.txt') do echo %%i"  

alle Zeilen auslesen, die "C:\..\Verzeichnis\Unterverzeichnis\" enthalten - aber das Script bleibt dabei hängen und ich finde den Fehler nicht...
Any ideas?


Gruß
Larz
Member: rubberman
rubberman Dec 23, 2009 at 12:30:13 (UTC)
Goto Top
Hallo Larz,

der Fehler sollte darin begründet sein, dass FINDSTR jede Suchzeichenfolge erstmal grundsätzlich wie einen regulären Ausdruck behandelt (RegExp).
Afaik 2 Möglichkeiten - entweder du escapest jeden Backslash durch einen zweiten oder du benutzt die Option /L.

Grüße
rubberman
Member: Larz
Larz Dec 23, 2009 at 13:51:17 (UTC)
Goto Top
Hallo Rubberman,

ja, die doppelten Backslashes haben geholfen - jetzt sieht das Script so aus:

REM Hier zu prüfenden Computernamen eingeben
set CompName=SERVERNAME
REM hier den Suchstring eingeben 
set SearchString=C:\\..\\Unterverzichnis\\UnterUnterverzeichnis\\
@echo Erstelle Liste offener Dateien
openfiles /query /s %CompName% > %temp%\OpenFiles_%CompName%.txt
for /f "delims=" %%i in ('findstr "%SearchString%" %temp%\OpenFiles_Filer-b.txt') do echo %%i >> %temp%\Wer_hat_auf_%CompName%_noch_Dateien_auf.txt  
%temp%\Wer_hat_auf_%CompName%_noch_Dateien_auf.txt
del %temp%\OpenFiles_%CompName%.txt
del %temp%\Wer_hat_auf_%CompName%_noch_Dateien_auf.txt

ABER: Er schreibt mir in die Ergebnisdatei nur geöffnete/ausgeführte exe-Dateien, nicht jedoch DBF-Dateien z.B....

hm...


Larz
Member: rubberman
rubberman Dec 23, 2009 at 15:53:14 (UTC)
Goto Top
Hallo Larz,

bin im Winterurlaub und kann das ganze gerade so gar nicht testen. Welche der beiden Ergebnisdateien meinst du, bzw welche Zusatzinformationen bekommst du denn mit der Option /V von OPENFILES?

Grüße
rubberman
Member: Larz
Larz Jan 05, 2010 at 06:46:04 (UTC)
Goto Top
Moin rubberman,

da bekomme ich lediglich noch Infos über Lese- und/oder Schreibrechte...

Gruß
Larz
Member: rubberman
rubberman Jan 05, 2010 at 13:02:32 (UTC)
Goto Top
Hallo Larz,

also verstehe ich es richtig, dass in der von OPENFILES erzeugten Datei bereits die Daten fehlen?!

Hmm. WMI wäre mglw. noch eine Alternative. Vielleicht denke ich aber auch verkehrt.
Passe mal dieses VBScript deinen Bedürfnissen an:

*.vbs
strcomputer = "."  
Set objInstances = GetObject("winmgmts://" & strcomputer & "/root\cimv2").InstancesOf("Win32_Process", 48)  
On Error Resume Next
For Each objInstance in objInstances
  With objInstance
    IF .CommandLine <> "" Then  
      CmdLines = CmdLines & .CommandLine & vbCrLf
    End If
  End With
On Error Goto 0
Next

WScript.Echo CmdLines
Zumindest würde eine an die exe übergebene Datei als Parameter mit erscheinen.

Grüße
rubberman
Member: Larz
Larz Jan 07, 2010 at 07:03:20 (UTC)
Goto Top
Hallo Rubberman,

WMI ist leider keine Option. Das Zielgerät, der "Computer" ist nämlich in Wirklichkeit ein Netzwerkspeichersystem, ein "Filer" von Advanced Unibyte.
Da geht eine Abfrage via WMI nicht. Ich komme eben nur per Computerverwaltungs-Snapin auf die offenen Dateien...


Gruß
Larz