Извлечение 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
}
}
Голосов пока нет

Оставить комментарий