dismount USB External Drive โดยใช้ PowerShell


12

ฉันพยายามที่จะลงจากไดรฟ์ USB ภายนอกโดยใช้ PowerShell และฉันไม่สามารถทำสิ่งนี้ได้สำเร็จ สคริปต์ต่อไปนี้เป็นสิ่งที่ฉันใช้:

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

ฉันจะตรวจสอบคอมพิวเตอร์ของฉันเพื่อตรวจสอบว่าไดรฟ์นั้นไม่ได้ต่อเชื่อมหรือไม่

พารามิเตอร์ $ บังคับใช้กับบูลีนและ $ ถาวรได้ถูกลองด้วยวิธีเรียงสับเปลี่ยนที่ต่างกันโดยไม่มีประโยชน์ โค้ดทางออกที่ส่งคืนโดยคำสั่ง dismount จะเปลี่ยนเมื่อ params ถูกสลับ

(0,0) = exit code 0

(0,1) = exit code 2

(1,0) = exit code 0

(1,1) = exit code 2

เอกสารประกอบสำหรับรหัสออก 2 บ่งชี้ว่ามีจุดเชื่อมต่อที่มีอยู่เป็นเหตุผลว่าทำไมจึงไม่สามารถลงจากหลังม้าได้ แม้ว่าฉันพยายามที่จะลงจากจุดเมานท์เดียวที่มีอยู่ดังนั้นฉันไม่แน่ใจว่ารหัสทางออกนี้กำลังพยายามบอกฉัน

มี trawled เว็บสำหรับผู้ที่ประสบปัญหาที่คล้ายกันฉันพบเพียงหนึ่งคำสั่งเพิ่มเติมเพื่อลองและนั่นคือต่อไปนี้:

# executed after the .Dismount() command

$drive.Put() 

คำสั่งเพิ่มเติมนี้ไม่ได้ช่วย

ฉันหมดสิ่งที่ต้องลองดังนั้นความช่วยเหลือใด ๆ ที่ทุกคนสามารถให้ฉันจะได้รับการชื่นชมอย่างมาก


คุณอาจไม่ต้องการถอดไดรฟ์ usb คุณจะต้องกำหนดอักษรชื่อไดรฟ์ใหม่ในการจัดการดิสก์ในภายหลัง
js2010

คำตอบ:


11

วิธีการแก้ปัญหาแบบสะอาดที่ไม่ทิ้งการอ้างอิงแบบเปิดไว้ครึ่งหนึ่งอย่างเช่นตัวอย่างจาก pk คือ:

  $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


โซลูชันที่โพสต์ก่อนหน้านี้ถูกต้องแน่นอน ฉันมีความไม่แน่นอนเล็กน้อยเกี่ยวกับวิธีที่ฉันเสนอให้มันขึ้นมา! กรุณาใช้วิธีนี้
pk

1
โปรดทราบว่าสิ่งนี้สามารถทำให้ทำงานเป็นบรรทัดเดียวจากไดอะล็อก Run:powershell (New-Object -comObject Shell.Application).Namespace(17).ParseName(\"E:\").InvokeVerb(\"Eject\")
Deebster

ซับเดียวทำงานได้ แต่ไม่มีแบ็กสแลช
js2010

โชคไม่ดีที่ไม่ได้ทำงานที่นี่ ฉันยังไม่ได้รับข้อความแสดงข้อผิดพลาดหรือข้อความแสดงข้อผิดพลาดใด ๆ $?คือTrueหลังจากเรียกใช้บรรทัดที่สอง มีอะไรที่ฉันพอจะทำได้บ้าง?
René Nyffenegger

1

ฉันไม่สามารถทำผลงานยอดเยี่ยมตอบรับจากปลาย PowerShell โดยคุณอาจต้องการที่จะดูที่วิธีการmountvolดำเนินการ มีองศาการลงจากหลังที่แตกต่างกัน

Mountvol หรือ Mountvol /?

แสดงชื่อ, ตัวระบุที่ไม่ซ้ำกันทั่วโลก (GUID) และตำแหน่งของไดรฟ์

Mountvol [ไดรฟ์:] เส้นทาง VolumeName

สร้างจุดเชื่อมต่อไดรฟ์ข้อมูลใหม่ ระบุไดเรกทอรีรูทอักษรของไดรฟ์หรือไดเรกทอรี NTFS ว่างที่มีอยู่เป็นแหล่งที่มาของจุดเมานท์และชื่อไดรฟ์เป็นเป้าหมาย

Mountvol [drive:] path / D

ลบจุดเมานต์ระดับเสียงที่มีอยู่

Mountvol [drive:] path / L

แสดงรายการชื่อโวลุ่มสำหรับจุดเมานต์ที่กำหนด

ฉันพยายามทำสิ่งที่คล้ายกับสิ่งที่คุณต้องการใน VBScript เพื่อจัดลำดับอุปกรณ์บนเดสก์ท็อปเก่าซึ่งไดรฟ์เมานต์สำหรับฮาร์ดแวร์รุ่นเก่าที่น่าเบื่อเกินไปที่จะลบ (อ่านแฟลชไดรฟ์) กำลังรบกวนทางลัดบน GUI ที่กำหนดเอง D :, E :, F :) โดยมีวัตถุประสงค์เฉพาะ สิ่งนี้กลายเป็นสิ่งที่น่าผิดหวังอย่างมากและคุณต้องยกเลิกการต่อเชื่อมและติดตั้งใหม่โดยใช้อินพุตและเอาต์พุต mountvol เพื่อตรวจสอบว่ามันไปได้ดีและดำเนินการเปลี่ยนแปลงต่อไป ฉันหวังว่าคุณจะโชคดีกว่าฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.