Script per chiusura di file aperti
Talvolta, soprattutto su server datati può essere necessario chiudere file che rimangono erroneamente aperti quando utilizzati dagli utenti tramite share per i motivi più svariati (applicazioni che si bloccano o non gestiscono correttamente la chiusura dei file utilizzati, eventuali errori di rete, blocchi inaspettati della sessione lavoro o utenti RDS che non eseguono il logoff).
Di seguito uno script DOS pensato per server senza supporto a PowerShell in cui basta impostare il path della cartella di cui si intende chiudere i file trovati aperti:
@ECHO OFF
SET FOLDERPATH=C:\Shared\
REM Ricerca file aperti
FOR /f “Skip=8 tokens=1,4 delims=,” %%i in (‘OPENFILES /QUERY /FO CSV /NH’) DO (
CALL :CloseFile %%i “%%j”
)
GOTO :EOF
:CloseFile
SET ID=%1
SET ID=%ID:~1,-1%
SET ITEM=%2
SET ITEM=%ITEM:~1,-1%
SET ITEM=%ITEM:~1,-1%
REM Controllo Path iniziante col contenuto della variabile FOLDERPATH
ECHO %ITEM%|FINDSTR /I /B /C:%FOLDERPATH% > nul
IF NOT ErrorLevel 1 (
ECHO Chiusura file %ID% %ITEM%
OPENFILES /DISCONNECT /ID %ID%
)
Lo script utilizza il comando OPENFILES che permette di ricercare e chiudere i file aperti, per ottenere i dati completi occorre utilizzate la modalità CSV (tramite il parametro /FO CSV ) in quanto la modalità di default (TABLE) potrebbe troncare i dati.
Ovviamente in PowerShell le cose si semplificano parecchio soprattutto grazie ai comandi Get-SmbOpenFile e Close-SmbOpenFile introdotti in Windows PowerShell 4.0 e supportati nativamente da WS2012 R2/W8.1. Infatti utilizzando PowerShell lo script si riduce drasticamente:
Get-SmbOpenFile | Where-Object -Property Path -Like “C:\Shared\*” | Close-SmbOpenFile –Force
A riguardo si veda PowerTip: Close Open SMB File Shares with PowerShell.
Forse sbaglio qualcosa, ma lanciando lo script ottengo:”8 was unexpected at this time”. L’unica modifica che ho fatto allo script è stata sostituire “C:\Shared” con “D:\Shared”
Dimenticavo, il sistema operativo è Windows Server 2003 R2 SP2 ed ha ruolo di File Server.
Grazie mille
Se hai copiato e incollato lo script dalla pagina web potrebbe essere che le virgolette non siano corrette prova a digitarle manualmente o he nella riga sia rimando qualche carattere non corretto…