Der Beitrag ist ja schon älter, aber partiell falsch. Man kann USB-Laufwerke mit Cache einrichten (dann sind sie oft erheblich schneller - und müssen unbedingt ausgeworfen werden) und ohne Cache (Standard). Um ein Laufwerk (hier D:) auszuwerfen, genügt ein Batch-Befehl:
@powershell -Executionpolicy Bypass -NoProfile -NoLogo -Command "(New-Object -comObject Shell.Application).Namespace(17).ParseName('D:').Verbs() | ?{$_.Name.
replace('&','') -match '^(Auswerfen|Eject)$'} | %{$_.Doit()}"