Как создать сценарий PowerShell для копирования файла на флэш-накопитель USB? - PullRequest
2 голосов
/ 28 июня 2011

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

Ответы [ 2 ]

3 голосов
/ 28 июня 2011

Я бы установил имя тома диска, проверил все подключенные диски и нашел бы диск с этим именем тома. Вот как я делаю это в 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
2 голосов
/ 28 июня 2011

Этот код получает последний готовый к использованию съемный диск (например, только что подключенный 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-накопители, не зная / не устанавливая их имена.


UPDATE Чтобы выполнить перетаскивание части задания, вы можете сделать это.

Создайте сценарий 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-накопитель.

...