Smontare l'unità esterna USB utilizzando PowerShell


12

Sto tentando di smontare un'unità USB esterna utilizzando PowerShell e non riesco a farlo correttamente. Il seguente script è quello che uso:

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

Quindi controllo il mio computer per verificare se l'unità è smontata ma non lo è.

I parametri booleani $ force e $ permanent sono stati provati con diverse permutazioni senza risultati. Il codice di uscita restituito dal comando smonta cambia quando i parametri sono attivati.

(0,0) = exit code 0

(0,1) = exit code 2

(1,0) = exit code 0

(1,1) = exit code 2

La documentazione per il codice di uscita 2 indica che esistono punti di montaggio esistenti come motivo per cui non è possibile smontare. Anche se sto cercando di smontare l'unico punto di montaggio esistente, quindi non sono sicuro di cosa stia cercando di dirmi questo codice di uscita.

Avendo già esplorato il Web per persone con problemi simili, ho trovato solo un comando aggiuntivo da provare ed è il seguente:

# executed after the .Dismount() command

$drive.Put() 

Questo comando aggiuntivo non aiuta.

Sto finendo le cose da provare, quindi qualsiasi tipo di assistenza che qualcuno può darmi sarebbe molto apprezzato.


Probabilmente non vuoi smontare un'unità USB. In seguito dovrai riassegnare la lettera dell'unità nella gestione del disco.
js2010,

Risposte:


11

Una soluzione pulita che non lascia riferimenti aperti a metà come fa il campione da pk è:

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

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


La mia soluzione precedentemente pubblicata era effettivamente corretta. Sono un po 'incerto su come l'ho mai offerto! Si prega di utilizzare questo metodo
pk.

1
Si noti che questo può essere eseguito come una singola riga dalla finestra di dialogo Esegui:powershell (New-Object -comObject Shell.Application).Namespace(17).ParseName(\"E:\").InvokeVerb(\"Eject\")
Deebster

Quel one-liner funziona ma senza le barre rovesciate.
js2010,

Sfortunatamente, qui non funziona. Inoltre non ricevo alcun messaggio di errore o alcun messaggio di errore. $?è Truedopo aver invocato la seconda riga. C'è qualcosa che posso fare?
René Nyffenegger,

1

Non riesco a fare un ottimo lavoro rispondendo dalla parte di PowerShell, potresti voler vedere come mountvolfunziona . Esistono diversi gradi di smontaggio.

Mountvol o Mountvol /?

Visualizza il nome, l'identificatore univoco globale (GUID) e la posizione del volume.

Mountvol [drive:] percorso VolumeName

Crea un nuovo punto di montaggio del volume. Specificare una directory radice lettera di unità o una directory NTFS vuota esistente come origine del punto di montaggio e un nome volume come destinazione.

Mountvol [drive:] percorso / D

Elimina un punto di montaggio del volume esistente.

Mountvol [drive:] percorso / L

Elenca un nome di volume per un determinato punto di montaggio del volume.

Ho provato a fare qualcosa di simile a quello richiesto in VBScript per riordinare i dispositivi su vecchi desktop in cui i supporti per unità per hardware più vecchio che era troppo noioso per rimuovere (leggi l'unità Flash) interferivano con le scorciatoie su una GUI personalizzata dove potevo solo menzionare esplicitamente mountpoint ( D :, E :, F :) con uno scopo particolare. Questo è diventato incredibilmente frustrante e devi smontare e rimontare le cose usando input e output mountvol per verificare che sia andato bene e procedere con le modifiche. Spero tu abbia più fortuna di me.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.