Zastanawiałem się, czy istnieje narzędzie wiersza polecenia, które pozwala mi zamykać wszystkie uchwyty plików, które są otwarte w określonym folderze.
Próbowałem ProcessExplorer , Unlocker i podobnych narzędzi, ale oferują one interfejs GUI i nie są przydatne w środowisku programowania
Idealne byłoby rozwiązanie dla Pythona, cmd lub PowerShell.
Odpowiedzi:
Unlocker twierdzi, że daje ci tę zdolność:
Nie jestem pewien, czy obsługuje użycie wiersza polecenia.
MalwareByte za FileASSASSIN wykonuje podobne działania, a nie pomocy użycia wiersza polecenia, więc powinno być możliwe do skryptu to dość łatwo.
źródło
Dzięki za to. Występują problemy z otwartymi uchwytami plików, które powodują awarie git w naszych zadaniach Jenkins opartych na systemie Windows, co pomogło ręcznie rozwiązać problem. Wyrzucę podstawy techniki:
Zainstaluj Handle.exe w węźle kompilacji. Pobrałem go stąd http://technet.microsoft.com/en-us/sysinternals/bb896655 , rozpakowałem go i upuściłem Handle.exe pod C: \ Windows \ System32, aby upewnić się, że będzie dostępny na domyślnym% PATH%
Zainstaluj wtyczkę Jenkins pre-scm-buildstep: https://wiki.jenkins-ci.org/display/JENKINS/pre-scm-buildstep . To pozwala nam zdefiniować operacje, zanim wtyczka git zacznie sięgać po potencjalnie zablokowane pliki.
Zaimplementowano następujące polecenie wsadowe jako krok kompilacji przed scm:
Wygląda na to, że działa dobrze i zdecydowanie ogranicza fałszywe awarie. Zwrócę też uwagę na kilka błędów, przez które pracowałem:
Program Handler.exe ma umowę EULA, którą należy zaakceptować przy pierwszym uruchomieniu. Jeśli używasz agenta Jenkins jako usługi w kontekście systemu lokalnego, jest to problematyczne, ponieważ nie możesz zalogować się jako ten użytkownik i zaakceptować go ręcznie. Kiedy próbowaliśmy uruchomić go z zadania Jenkins, proces po prostu zawiesił się, czekając na dane wejściowe użytkownika i zajęło kilka minut, aby dowiedzieć się, dlaczego. Rozwiązałem ten problem, uruchamiając go z zadania Jenkins przy użyciu flagi / accepteula i polecam wszystkim, którzy wdrażają to jako zautomatyzowany proces, robią to samo. Jest to ustawienie rejestru pod HKEY_CURRENT_USER \ Software \ Sysinternals \ Handle i możesz go również ustawić i rozbroić za pomocą regedit.exe, jeśli chcesz manipulować nim dla konkretnego użytkownika, ale opcja wiersza poleceń wydawała się najłatwiejsza.
Wtyczka krokowa Jenkins Batch wykonuje kod wsadowy tak, jakby był w skrypcie, a nie jako dyrektywa wiersza poleceń. Zwróć uwagę na ucieczki (np. %% i, ^ |).
Dzięki!
źródło
Używamy następującego fragmentu kodu, aby zamknąć uchwyt pliku od użytkowników do naszego serwera. Możesz go zmodyfikować do własnego użytku.
źródło
Tworzę ten mały plik wsadowy, aby automatycznie zwolnić wszystkie blokady do pliku xml przez moje zaćmienie
Musisz pobrać narzędzie uchwyt z witryny Microsoft i narzędzie grep z GnuWin32
Jeśli nie potrzebujesz filtrować według typu pliku, możesz pominąć część grep w następujący sposób:
Lub jeśli nie musisz filtrować blokad według określonego programu, po prostu usuń filtr procesu zaćmienia:
Pamiętaj, aby zastąpić
e:\git\
ścieżką folderu.źródło
Jeśli mówisz o uchwytach plików otwartych przez udział SMB na serwerze plików Windows (Server 2012 lub nowszy), oto odpowiedź PowerShell:
Na starszym serwerze plików Windows tak jest
openfiles.exe /disconnect
.W przypadku lokalnego uchwytu pliku systemowego najlepszym sposobem, jaki znalazłem, jest użycie narzędzia Sysinternals handle.exe
źródło
Jeśli używasz PSTools , wymusi to zamknięcie wszystkich otwartych plików rekurencyjnie:
psfile \\serverName c:\path\toDatabase\ -c
Pamiętaj, że
c:\path\toDatabase\
jest włączony dysk C:, a\\serverName
nie komputer lokalny. Na początku było to dla mnie niejasne, więc pomyślałem, że zwrócę na to uwagę.To brutalna metoda, która prawie gwarantuje utratę danych, więc używaj jej ostrożnie.
Mamy źle skompletowaną bazę danych Access, która dosłownie rzuca naszą firmę na kolana (musiałem to naprawić trzy razy wczoraj).
Facet, który normalnie sobie z tym radzi, jest na urlopie przez kilka tygodni, a jego instrukcje wykorzystują podejście oparte na interfejsie użytkownika (Start> Komputer> Zarządzaj> Zarządzanie komputerem (lokalne)> Połącz z innym komputerem> Narzędzia systemowe> Foldery udostępnione> Otwórz pliki> Zamknij Otwórz pliki). ODPOWIEDŹ zbyt wiele kliknięć, gdy mogę po prostu uruchomić powyższe polecenie i wykopać całą firmę ze wszystkich plików bazy danych i rozpocząć proces Kompaktowania i naprawy (nad którym pracuję również przy użyciu skryptu brute force).
Sztuką jest wyprzedzanie ludzi, którzy natychmiast zaczynają ponownie łączyć się z bazą danych, gdy tylko się zepsuje. Są do tego tak przyzwyczajeni, że nie przychodzi im do głowy zgłaszać błąd, po prostu wbijają bazę danych, dopóki nie wrócą. Po prostu je uruchamiam, dopóki nie spakuję i nie naprawię trzech tuzinów pliki tworzące bazę danych.
źródło
Wolę http://lockhunter.com, ponieważ obsługuje zarówno GUI, jak i interfejs wiersza poleceń, aw wielu przypadkach był w stanie usunąć pliki, które nie mogły zostać usunięte przez Unlocker.
źródło
Unlocker może również działać w trybie cichym.
Na przykład, aby odblokować wszystkie pliki w obszarze roboczym Jenkins:
Następnie możesz bezpiecznie usunąć pliki obszaru roboczego:
źródło
Możesz użyć programu Powershell, aby wykonać te czynności:
Aby uzyskać więcej informacji, zapoznaj się z Thomasem Ardalem tutaj: https://thomasardal.com/deleting-contents-of-a-folder-containing-files-with-open-file-handles-using-powershell/
źródło