USB Harici Sürücüyü powershell kullanarak çıkarın


12

Harici bir USB sürücüyü powershell kullanarak sökmeye çalışıyorum ve bunu başarıyla yapamıyorum. Aşağıdaki komut dosyası kullanıyorum:

#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)

Daha sonra sürücünün takılı olmadığını ancak olmadığını kontrol etmek için bilgisayarımı kontrol ediyorum.

$ Force ve $ permanent Boolean parametreleri boşuna farklı permütasyonlarla denenmiştir. Çıkarma komutu tarafından döndürülen çıkış kodu, parametreler açıldığında değişir.

(0,0) = exit code 0

(0,1) = exit code 2

(1,0) = exit code 0

(1,1) = exit code 2

Çıkış kodu 2 belgeleri, sökülememesinin bir nedeni olarak mevcut bağlama noktalarının olduğunu gösterir. Her ne kadar bu çıkış kodu bana anlatmaya çalıştığından emin değilim var olan tek bağlama noktasını sökmeye çalışıyorum.

Zaten benzer sorunları yaşayan insanlar için web trol ben denemek için sadece bir ek komut bulduk ve bu:

# executed after the .Dismount() command

$drive.Put() 

Bu ek komut yardımcı olmuyor.

Ben denemek için şeyler tükeniyor, bu yüzden herkes bana verebilir herhangi bir yardım büyük mutluluk duyacağız.


Muhtemelen bir usb sürücüsünü çıkarmak istemezsiniz. Disk yönetiminde sürücü harfini daha sonra yeniden atamanız gerekir.
js2010

Yanıtlar:


11

Pk örneği gibi yarı pişmiş açık referans bırakmayan temiz bir çözüm:

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

Http://sushihangover.blogspot.nl/2012/02/powershell-eject-local-or-remote.html adresinden erişildi.


Daha önce gönderdiğim çözüm gerçekten doğruydu. Nasıl sunduğum konusunda biraz emin değilim! Lütfen bu yöntemi kullanın.
pk.

1
Bunun, Çalıştır iletişim kutusundan tek bir satır olarak çalıştırılabileceğini unutmayın:powershell (New-Object -comObject Shell.Application).Namespace(17).ParseName(\"E:\").InvokeVerb(\"Eject\")
Deebster

Bu tek astar çalışır, ancak ters eğik çizgiler olmadan.
js2010

Ne yazık ki, bu burada işe yaramıyor. Ayrıca herhangi bir hata mesajı veya hata mesajı almıyorum. $?bir Trueikinci satırı yürütmesini sonra. Yapabileceğim bir şey var mı?
René Nyffenegger

1

PowerShell sonundan yanıt vererek harika bir iş yapamıyorum, nasıl mountvolçalıştığına bakmak isteyebilirsiniz . Farklı derecelerde sökme vardır.

Mountvol veya Mountvol /?

Birimin adını, genel benzersiz tanımlayıcısını (GUID) ve konumunu görüntüler.

Mountvol [sürücü:] yol VolumeName

Yeni bir birim bağlama noktası oluşturur. Bağlama noktasının kaynağı olarak sürücü harfi kök dizinini veya varolan boş bir NTFS dizinini ve hedef olarak birim adını belirtin.

Mountvol [sürücü:] yol / D

Mevcut birim bağlama noktasını siler.

Mountvol [sürücü:] yol / L

Belirli bir birim bağlama noktası için birim adını listeler.

Kaldırmak için çok sıkıcı (Flash sürücüyü okuyun) eski donanımlar için sürücü bağlar, sadece açık söz noktaları (sadece açık söz noktaları olabilir) özel bir GUI kısayolları ile müdahale ediyordu eski masaüstlerinde cihazları yeniden sıralamak için VBScript ne gerek benzer bir şey yapmaya çalıştım. D :, E :, F :) belirli bir amaç için. Bu son derece sinir bozucu oldu ve iyi gittiğini doğrulamak ve değişikliklere devam etmek için mountvol girişlerini ve çıkışlarını kullanarak işleri söküp yeniden takmanız gerekiyor. Umarım benden daha iyi şansın vardır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.