Извлечение CD
Данный скрипт проверяет наличие диска в приводе, если он присутствует, то извлекается, если нет, то скрипт завершает работу
foreach ($d in [IO.DriveInfo]::GetDrives()) { if (($d.DriveType -eq "CDRom") -and ($d.IsReady)) { Write-Host В приводе $d.Name имеется компакт диск. -f green $res = Read-Host Извлечь компакт диск из привода? [y/n] if ($res -eq "y") { $shell = New-Object -com Shell.Application $shell.NameSpace(17).ParseName($d.Name).InvokeVerb("&Извлечь") } } }
Тоже самое, но с использованием WinAPI
#код библиотеки $code = @' using System; using System.Runtime.InteropServices; namespace LibWrap { public class OpenCloseCD { [DllImport("winmm.dll", EntryPoint = "mciSendStringA", CharSet = CharSet.Ansi)] public static extern int mciSendString(string lpCommand,string retString, uint retLength, int callback); } } '@ #переменные (посылаемые команды) [string]$eject = "set cdaudio door open" [string]$close = "set cdaudio door closed" #функция для сборки библиотеки - для PowerShell v2 в данном #случае лучше вообще воспользоваться командлетом Add-Type function BuildAssembly { $cscp = New-Object Microsoft.CSharp.CSharpCodeProvider $cpar = New-Object CodeDom.Compiler.CompilerParameters $cpar.GenerateInMemory = $true $exec = $cscp.CompileAssemblyFromSource($cpar, $code) } #узнаем состояние CD-привода через IsReady foreach ($d in [IO.DriveInfo]::GetDrives()) { if (($d.DriveType -eq "CDRom") -and ($d.IsReady)) { BuildAssembly #открываем лоток привода [void][LibWrap.OpenCloseCD]::mciSendString($eject, $null, 0, 0) #делаем паузу, чтобы дать пользователю время вынуть диск Start-Sleep -m 5500 #задвигаем лоток [void][LibWrap.OpenCloseCD]::mciSendString($close, $null, 0, 0) } elseif (($d.DriveType -eq "CDRom") -and !($d.IsReady)) { Write-Host В приводе $d.Name нет диска. -f magenta } }
Голосов пока нет
Оставить комментарий