Как создать сценарий PowerShell для копирования файла на флэш-накопитель USB?

У меня есть VHD-файл виртуального жесткого диска, который я хотел бы делать ежедневно, нажимая на ярлык на моем ноутбуке с Windows Vista. Я написал файл пакетного сценария с половинной опасностью (BACKUP.BAT), который завершает работу, где он открывает окно cmd и копирует файл на флэш-диск, но я хотел бы имитировать (макрос) способ отображения копирования, когда Вы вручную перетаскиваете файл на флешку в моем компьютере. Другая проблема заключается в том, что в зависимости от того, на каком компьютере это делается, на USB-накопителе может быть назначен диск E: ему назначен (WinXP), а на других компьютерах (Vista/7) это может быть диск F:. (Кажется, нет способа статически назначить букву фиксированного диска USB-накопителю, когда он вставлен в порт USB.)

2 ответа

Решение

Я бы установил имя тома диска, проверил все подключенные диски и нашел диск с таким именем тома. Вот как я делаю это в PowerShell:

param([parameter(mandatory=$true)]$VolumeName,
      [parameter(mandatory=$true)]$SrcDir)

# find connected backup drive:
$backupDrive = $null
get-wmiobject win32_logicaldisk | % {
    if ($_.VolumeName -eq $VolumeName) {
        $backupDrive = $_.DeviceID
    }
}
if ($backupDrive -eq $null) {
    throw "$VolumeName drive not found!"
}

# mirror 
$backupPath = $backupDrive + "\"
& robocopy.exe $SrcDir $backupPath /MIR /Z

Этот код получает последний готовый к использованию съемный диск (например, только что подключенный USB-накопитель):

$drives = [System.IO.DriveInfo]::GetDrives()
$r = $drives | Where-Object { $_.DriveType -eq 'Removable' -and $_.IsReady }
if ($r) {
    return @($r)[-1]
}
throw "No removable drives found."

Этот способ не требует предварительной установки имени фиксированного тома. Мы можем использовать разные USB-накопители, не зная / не устанавливая их имена.


ОБНОВЛЕНИЕ Для завершения перетаскивания части задачи вы можете сделать это.

Создайте сценарий PowerShell (используйте, например, Блокнот) C:\TEMP_110628_041140\Copy-ToRemovableDrive.ps1 (путь зависит от вас):

param($Source)

$drives = [System.IO.DriveInfo]::GetDrives()
$r = $drives | Where-Object { $_.DriveType -eq 'Removable' -and $_.IsReady }
if (!$r) {
    throw "No removable drives found."
}

$drive = @($r)[-1]
Copy-Item -LiteralPath $Source -Destination $drive.Name -Force -Recurse

Создайте файл Copy-ToRemovableDrive.bat (например, на рабочем столе), он использует скрипт PowerShell:

powershell -file C:\TEMP\_110628_041140\Copy-ToRemovableDrive.ps1 %1

Теперь вы можете подключить USB-накопитель и перетащить файл на Copy-ToRemovableDrive.bat значок на вашем рабочем столе. Это должно скопировать перетаскиваемый файл на только что подключенный USB-накопитель.

Другие вопросы по тегам