Saya bertanya-tanya apakah ada alat baris perintah yang memungkinkan saya untuk menutup semua pegangan file yang terbuka di bawah folder tertentu.
Saya telah mencoba ProcessExplorer , Unlocker dan alat serupa, tetapi mereka menawarkan antarmuka GUI, dan tidak berguna dalam lingkungan pemrograman
Solusi pada Python, cmd atau PowerShell akan ideal.
Jawaban:
Unlocker mengklaim itu memberi Anda kemampuan ini:
Saya tidak yakin apakah itu mendukung penggunaan baris perintah.
MalwareByte ini FileAssassin melakukan tindakan serupa, dan tidak mendukung penggunaan baris perintah, sehingga Anda harus dapat script itu cukup mudah.
sumber
Terima kasih untuk ini. Kami telah mengalami beberapa masalah dengan pegangan file terbuka yang menyebabkan git checkout gagal dalam pekerjaan Jenkins kami yang berbasis Windows dan ini membantu memperbaiki masalah dengan mudah. Saya akan membuang dasar-dasar teknik ini:
Instal Handle.exe pada build node. Saya mengunduhnya dari sini http://technet.microsoft.com/en-us/sysinternals/bb896655 , membuka ritsletingnya dan menjatuhkan Handle.exe di bawah C: \ Windows \ System32 untuk memastikan itu akan tersedia di default% PATH%
Instal plugin Jenkins pre-scm-buildstep: https://wiki.jenkins-ci.org/display/JENKINS/pre-scm-buildstep . Ini memungkinkan kita untuk mendefinisikan operasi sebelum plugin git mulai meraih file yang berpotensi terkunci.
Menerapkan perintah batch berikut sebagai langkah membangun pra-scm:
Tampaknya bekerja dengan baik dan pasti mengurangi kegagalan palsu. Saya juga akan mencatat beberapa Gotcha yang saya kerjakan:
Handler.exe memiliki EULA yang harus diterima saat pertama kali dijalankan. Jika Anda menjalankan agen Jenkins sebagai layanan di bawah konteks Sistem Lokal, ini bermasalah karena Anda tidak bisa masuk sebagai pengguna itu dan menerimanya dengan tangan. Ketika kami mencoba menjalankannya dari pekerjaan Jenkins, proses hanya menunggu input pengguna dan butuh beberapa menit untuk mencari tahu mengapa. Saya memecahkan ini dengan menjalankannya dari pekerjaan Jenkins menggunakan flag / accepteula dan saya merekomendasikan siapa pun yang mengimplementasikan ini sebagai proses otomatis melakukan hal yang sama. Ini kebetulan merupakan pengaturan registri di bawah HKEY_CURRENT_USER \ Software \ Sysinternals \ Handle dan Anda juga dapat mengatur dan menghapusnya melalui regedit.exe jika Anda perlu memanipulasinya untuk pengguna tertentu, tetapi opsi baris perintah sepertinya lebih mudah.
Plugin langkah Jenkins Batch mengeksekusi kode batch seolah-olah itu dalam skrip bukan sebagai perintah baris perintah. Perhatikan lolos (mis. %% i, ^ |).
Terima kasih!
sumber
Kami menggunakan cuplikan berikut untuk menutup pegangan file dari pengguna ke server kami. Anda mungkin dapat memodifikasinya untuk Anda gunakan.
sumber
Saya membuat file batch kecil ini untuk secara otomatis melepaskan semua kunci ke file xml oleh gerhana saya
Anda perlu mengunduh utilitas pegangan dari situs Microsoft dan utilitas grep dari GnuWin32
Jika Anda tidak perlu memfilter menurut jenis file, Anda dapat melewati bagian grep seperti ini:
Atau jika Anda tidak perlu memfilter kunci oleh program tertentu, cukup hapus filter proses gerhana:
Ingatlah untuk mengganti
e:\git\
dengan jalur folder Anda.sumber
Jika Anda menggunakan PSTools , ini akan memaksa menutup semua file yang terbuka secara rekursif:
psfile \\serverName c:\path\toDatabase\ -c
Perhatikan bahwa
c:\path\toDatabase\
drive C: aktif\\serverName
, bukan mesin lokal Anda. Ini tidak jelas bagi saya pada awalnya jadi saya pikir saya akan menunjukkannya.Ini adalah pendekatan brute force yang hampir dijamin kehilangan data, jadi gunakan dengan hati-hati.
Kami memiliki database Access yang buruk dan berbatu yang benar-benar membuat perusahaan kami berlutut secara teratur (saya harus memperbaikinya tiga kali kemarin).
Orang yang biasanya menangani ini sedang berlibur selama beberapa minggu dan instruksinya menggunakan pendekatan berbasis UI (Mulai> Komputer> Kelola> Manajemen Komputer (Lokal)> Sambungkan ke komputer lain> Peralatan Sistem> Folder Bersama> Buka File> Tutup Buka File). JALAN terlalu banyak klik ketika saya bisa menjalankan perintah di atas & mengeluarkan seluruh perusahaan dari semua file database & memulai proses Compact & Perbaikan (yang saya juga sedang mengerjakan pendekatan skrip brute force untuk).
Triknya adalah tetap di depan orang-orang yang segera mulai menyambung kembali ke database segera setelah turun. Mereka sudah terbiasa dengan hal ini sehingga tidak terpikir oleh mereka untuk mengajukan bug terhadapnya, mereka terus memalu database sampai mereka kembali. Saya terus mem-boot-nya sampai saya memadatkan & memperbaiki tiga lusin file yang membentuk database.
sumber
Jika Anda berbicara tentang menangani file yang terbuka melalui share SMB pada server file Windows (Server 2012 atau yang lebih baru), inilah jawaban PowerShell:
Di server file Windows yang lebih lama, itu
openfiles.exe /disconnect
.Untuk menangani file sistem lokal, cara terbaik yang saya temukan adalah menggunakan Sysinternals handle.exe
sumber
Saya lebih suka http://lockhunter.com karena mendukung antarmuka GUI dan command line, dan dalam banyak kasus dapat menghapus file yang tidak dapat dihapus oleh Unlocker.
sumber
Unlocker juga dapat dijalankan dalam mode diam.
Misalnya, untuk membuka kunci semua file di dalam ruang kerja Jenkins:
Maka Anda dapat menghapus file ruang kerja dengan aman:
sumber
Anda dapat menggunakan Powershell untuk melakukan hal ini:
Untuk lebih jelasnya, lihat Thomas Ardal di sini: https://thomasardal.com/deleting-contents-of-a-folder-containing-files-with-open-file-handles-using-powershell/
sumber