Turun dari USB External Drive menggunakan PowerShell

12

Saya mencoba untuk turun dari drive USB eksternal menggunakan PowerShell dan saya tidak berhasil melakukannya. Script berikut adalah apa yang saya gunakan:

#get the Win32Volume object representing the volume I wish to eject 

$drive = Get-WmiObject Win32_Volume -filter "DriveLetter = 'F:'"

#call dismount on that object there by ejecting drive

$drive.Dismount($Force , $Permanent)

Saya kemudian memeriksa komputer saya untuk memeriksa apakah drive tidak di-mount tetapi tidak.

Parameter Boolean $ force dan $ permanen telah dicoba dengan permutasi yang berbeda tetapi tidak berhasil. Kode keluar yang dikembalikan oleh perintah turun turun ketika params diaktifkan.

(0,0) = exit code 0

(0,1) = exit code 2

(1,0) = exit code 0

(1,1) = exit code 2

Dokumentasi untuk kode keluar 2 menunjukkan bahwa ada titik pemasangan yang ada sebagai alasan mengapa tidak dapat turun. Meskipun saya mencoba untuk menurunkan satu-satunya titik mount yang ada, jadi saya tidak yakin apa kode keluar ini mencoba untuk memberi tahu saya.

Setelah menjaring web untuk orang-orang yang mengalami masalah serupa, saya hanya menemukan satu perintah tambahan untuk dicoba dan itu adalah sebagai berikut:

# executed after the .Dismount() command

$drive.Put() 

Perintah tambahan ini tidak membantu.

Saya kehabisan hal untuk dicoba, sehingga bantuan siapa pun dapat memberi saya akan sangat dihargai.

JB.
sumber
Anda mungkin tidak ingin turun dari drive usb. Anda harus menetapkan kembali huruf drive di manajemen disk nanti.
js2010

Jawaban:

11

Solusi bersih yang tidak meninggalkan setengah referensi terbuka seperti sampel dari pk tidak adalah:

  $driveEject = New-Object -comObject Shell.Application
  $driveEject.Namespace(17).ParseName("E:").InvokeVerb("Eject")

Diperoleh dari http://sushihangover.blogspot.nl/2012/02/powershell-eject-local-or-remote.html

Koen Zomers
sumber
Solusi saya yang diposting sebelumnya memang benar. Saya agak tidak yakin bagaimana saya menawarkannya! Silakan gunakan metode ini.
pk.
1
Perhatikan bahwa ini dapat dibuat dijalankan sebagai satu baris dari dialog Run:powershell (New-Object -comObject Shell.Application).Namespace(17).ParseName(\"E:\").InvokeVerb(\"Eject\")
Deebster
One-liner itu bekerja tetapi tanpa garis miring terbalik.
js2010
Sayangnya, itu tidak berfungsi di sini. Saya juga tidak mendapatkan pesan kesalahan atau pesan kesalahan apa pun. $?adalah Truesetelah memohon baris kedua. Apakah ada sesuatu yang saya bisa lakukan?
René Nyffenegger
1

Saya tidak bisa melakukan pekerjaan yang baik menjawab dari ujung PowerShell, oleh Anda mungkin ingin melihat bagaimana mountvolberoperasi . Ada berbagai tingkat penurunan.

Mountvol atau Mountvol /?

Menampilkan nama, pengidentifikasi unik global (GUID), dan lokasi volume.

Pasang [drive:] lintasan VolumeName

Menciptakan titik pemasangan volume baru. Tentukan direktori root huruf kandar atau direktori kosong NTFS yang ada sebagai sumber titik pemasangan dan nama volume sebagai target.

Pasang [drive:] jalur / D

Menghapus titik pemasangan volume yang ada.

Pasang [drive:] jalur / L

Daftar nama volume untuk titik pemasangan volume yang diberikan.

Saya mencoba melakukan sesuatu yang mirip dengan apa yang Anda butuhkan dalam VBScript untuk menyusun ulang perangkat pada desktop lama di mana drive mount untuk perangkat yang lebih tua yang terlalu membosankan untuk dihapus (baca Flash drive) mengganggu pintasan pada GUI khusus di mana saya hanya bisa secara eksplisit menyebutkan mountpoints ( D :, E :, F :) dengan tujuan tertentu. Ini menjadi sangat frustasi, dan Anda harus meng-unmount dan me-remount hal-hal menggunakan input dan output mountvol untuk memverifikasi itu berjalan dengan baik dan melanjutkan dengan perubahan. Saya harap Anda memiliki keberuntungan yang lebih baik daripada saya.

songei2f
sumber