Je zou de Shell.Application
COM object’s InvokeVerb
methode kunnen gebruiken. Vanaf een cmd prompt, kun je een PowerShell one-liner zo misbruiken:
powershell "(new-object -COM Shell.Application).NameSpace(17).ParseName('D:').InvokeVerb('Eject')"
Je kunt ook Windows Scripting Host (VBScript / JScript) gebruiken om het COM object aan te roepen. Hier is een voorbeeld met een hybride Batch + Jscript script (sla het op met een .bat extensie):
@if (@CodeSection == @Batch) @then
@echo off
setlocal
set "CDdrive=D:"
cscript /nologo /e:JScript "%~f0" "%CDdrive%"
goto :EOF
@end // end batch / begin JScript hybrid chimera
var oSH = WSH.CreateObject('Shell.Application');
oSH.NameSpace(17).ParseName(WSH.Arguments(0)).InvokeVerb('Eject');
Als je er de voorkeur aan geeft om je script de driveletter voor de CD drive te laten detecteren, dan kan dat ook geregeld worden. Hier is een meer complete versie met commentaar dat enkele van de niet voor zichzelf sprekende waarden uitlegt.
@if (@CodeSection == @Batch) @then
@echo off
setlocal
cscript /nologo /e:JScript "%~f0"
goto :EOF
@end // end batch / begin JScript hybrid chimera
// DriveType=4 means CD drive for a WScript FSO object.
// See http://msdn.microsoft.com/en-us/library/ys4ctaz0%28v=vs.84%29.aspx
// NameSpace(17) = ssfDRIVES, or My Computer.
// See http://msdn.microsoft.com/en-us/library/windows/desktop/bb774096%28v=vs.85%29.aspx
var oSH = new ActiveXObject('Shell.Application'),
FSO = new ActiveXObject('Scripting.FileSystemObject'),
CDdriveType = 4,
ssfDRIVES = 17,
drives = new Enumerator(FSO.Drives);
while (!drives.atEnd()) {
var x = drives.item();
if (x.DriveType == CDdriveType) {
oSH.NameSpace(ssfDRIVES).ParseName(x.DriveLetter + ':').InvokeVerb('Eject');
while (x.IsReady)
WSH.Sleep(50);
}
drives.moveNext();
}