Tháo ổ đĩa ngoài USB bằng powershell


12

Tôi đang cố gắng tháo gỡ một ổ USB ngoài bằng powershell và tôi không thể thực hiện thành công việc này. Kịch bản sau đây là những gì tôi sử dụng:

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

Sau đó tôi kiểm tra máy tính của mình để kiểm tra xem ổ đĩa có bị ngắt không nhưng nó không.

Các tham số Boolean $ force và $ Permanent đã được thử với các hoán vị khác nhau nhưng không có kết quả. Mã thoát được trả về bởi lệnh tháo gỡ thay đổi khi các thông số được bật.

(0,0) = exit code 0

(0,1) = exit code 2

(1,0) = exit code 0

(1,1) = exit code 2

Tài liệu về mã thoát 2 chỉ ra rằng có các điểm gắn kết hiện tại là lý do tại sao nó không thể tháo gỡ. Mặc dù tôi đang cố gắng tháo gỡ điểm gắn kết duy nhất tồn tại nên tôi không chắc mã thoát này đang cố nói gì với tôi.

Đã xử lý trang web cho những người gặp vấn đề tương tự, tôi chỉ tìm thấy một lệnh bổ sung để thử và đó là:

# executed after the .Dismount() command

$drive.Put() 

Lệnh bổ sung này không giúp đỡ.

Tôi đang cạn kiệt mọi thứ để thử, vì vậy mọi sự trợ giúp của bất kỳ ai có thể giúp tôi đều được đánh giá cao.


Bạn có thể không muốn tháo ổ đĩa USB. Bạn sẽ phải gán lại ký tự ổ đĩa trong quản lý đĩa sau này.
js2010

Câu trả lời:


11

Một giải pháp sạch sẽ không để lại bất kỳ tài liệu tham khảo mở nào được nướng như mẫu từ pk là:

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

Lấy từ http://sushihangover.blogspot.nl/2012/02/powershell-eject-local-or-remote.html


Giải pháp được đăng trước đây của tôi là thực sự chính xác. Tôi có một chút không chắc chắn về cách tôi từng cung cấp nó! Vui lòng sử dụng phương pháp này.
pk.

1
Lưu ý rằng điều này có thể được thực hiện dưới dạng một dòng từ hộp thoại Run:powershell (New-Object -comObject Shell.Application).Namespace(17).ParseName(\"E:\").InvokeVerb(\"Eject\")
Deebster

Đó là một lớp lót hoạt động nhưng không có dấu gạch chéo ngược.
js2010

Đáng tiếc, điều đó không làm việc ở đây. Tôi cũng không nhận được bất kỳ thông báo lỗi hoặc bất kỳ thông báo lỗi. $?Truesau khi gọi dòng thứ hai. Có bất cứ điều gì tôi có thể làm?
René Nyffalanger

1

Tôi không thể thực hiện công việc tuyệt vời khi trả lời từ đầu PowerShell, bởi bạn có thể muốn xem cách mountvolvận hành . Có nhiều mức độ khác nhau của tháo gỡ.

Mountvol hoặc Mountvol /?

Hiển thị tên, mã định danh duy nhất toàn cầu (GUID) và vị trí của âm lượng.

Đường dẫn Mountvol [ổ đĩa:] VolumeName

Tạo một điểm gắn kết âm lượng mới. Chỉ định thư mục gốc của ký tự ổ đĩa hoặc thư mục NTFS trống hiện có làm nguồn của điểm gắn kết và tên âm lượng làm mục tiêu.

Mountvol [ổ đĩa:] đường dẫn / D

Xóa một điểm gắn kết âm lượng hiện có.

Mountvol [ổ đĩa:] đường dẫn / L

Liệt kê một tên âm lượng cho một điểm gắn âm lượng nhất định.

Tôi đã thử làm một cái gì đó tương tự như những gì bạn yêu cầu trong VBScript để sắp xếp lại các thiết bị trên máy tính để bàn cũ, nơi ổ đĩa gắn cho phần cứng cũ quá tẻ nhạt (đọc ổ Flash) đã can thiệp vào các phím tắt trên GUI tùy chỉnh trong đó tôi chỉ có thể đề cập rõ ràng về các điểm gắn kết ( D:, E:, F :) với một mục đích cụ thể. Điều này trở nên cực kỳ bực bội, và bạn phải tháo gỡ và kể lại mọi thứ bằng cách sử dụng đầu vào và đầu ra của mountvol để xác minh nó diễn ra tốt đẹp và tiến hành thay đổi. Tôi hy vọng bạn có may mắn hơn tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.