PowerShell:复制项引发DriveNotFoundException
我的脚本一直困扰着我,但有以下例外PowerShell:复制项引发DriveNotFoundException,exception,powershell,copy-item,Exception,Powershell,Copy Item,我的脚本一直困扰着我,但有以下例外 copy-item : Cannot find drive. A drive with the name 'F' does not exist. At C:\Program Files (x86)\CA\ARCserve Backup\Templates\RB_Pre_Process.ps1:58 char:1 + copy-item -Path $drive -Destination $DST_DRIVE -Recurse -ErrorAction Stop
copy-item : Cannot find drive. A drive with the name 'F' does not exist.
At C:\Program Files (x86)\CA\ARCserve Backup\Templates\RB_Pre_Process.ps1:58 char:1
+ copy-item -Path $drive -Destination $DST_DRIVE -Recurse -ErrorAction Stop
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (F:String) [Copy-Item], DriveNotFoundException
+ FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.CopyItemCommand
这就是我的脚本的样子。我正在驱动器F上挂载一个ISO映像:并且我添加了一个“start slepp-s 5”命令,这样我就可以验证映像是否挂载了,它确实挂载了
$BACKUP_PATH = "E:\00_BACKUP_DATA"
$DR_PATH = "E:\01_DR_DATA"
$ISO_IMAGE = "C:\Program Files (x86)\CA\ARCserve Backup\Templates\Winpe_x64.iso"
$DST_DRIVE = "E:\"
try {
New-EventLog -LogName Application -Source "RB_Pre_Process.ps1" -ErrorAction Stop
} catch [System.InvalidOperationException] {
Write-host $_
}
try {
Write-Host "Preparing RDX cartridge..."
# Query for disk object
$disk_number = (Get-Disk | Where-Object -Property FriendlyName -like "TANDBERG RDX*").Number
# Remove partitions
Get-Disk $disk_number | Clear-Disk -RemoveData -Confirm:$false | Out-Null
# Create new partition
New-Partition -DiskNumber $disk_number -UseMaximumSize | Out-Null
# Format partition
Format-Volume -DriveLetter E -FileSystem NTFS -NewFileSystemLabel "RDX_TAPE" -Confirm:$false | Out-Null
# Set partition as active
Set-Partition -DriveLetter E -IsActive:$true | Out-Null
} catch {
Write-Host $_
Write-EventLog -LogName Application -Source $MyInvocation.MyCommand.Name -EventID 2 -Message $_
}
try {
Write-Host "Creating folder structure..."
new-item -itemtype directory -Path $BACKUP_PATH -ErrorAction stop | Out-Null
new-item -itemtype directory -path $DR_PATH -ErrorAction stop | Out-Null
} catch {
Write-Host $_
Write-EventLog -LogName Application -Source $MyInvocation.MyCommand.Name -EventID 2 -Message $_
}
try {
Write-Host "Mounting ISO image..."
$image = Mount-DiskImage -ImagePath $ISO_IMAGE -PassThru -ErrorAction Stop
} catch [ParameterBindingException] {
Write-Host $_
Write-EventLog -LogName Application -Source $MyInvocation.MyCommand.Name -EventId 2 -Message $_
}
$drive = ($image | Get-Volume).DriveLetter
$drive += ":\*"
Start-Sleep -s 5
try {
Write-Host "Copying ISO content..."
copy-item -Path $drive -Destination $DST_DRIVE -Recurse -ErrorAction Stop
} catch {
Write-Host $_
Write-EventLog -LogName Application -Source $MyInvocation.MyCommand.Name -EventId 2 -Message $_
}
try {
Write-Host "Unmounting ISO image..."
Dismount-DiskImage -ImagePath $ISO_IMAGE -ErrorAction Stop
} catch [System.Exception] {
Write-Host $_
Write-EventLog -LogName Application -Source $MyInvocation.MyCommand.Name -EventId 2 -Message $_
}
那么,这里出了什么问题?有时有效有时无效 似乎无法在powershell中访问装载的映像。我认为这是供应商的限制。一种可能的解决方法是发出CMD命令。你可以代替
copy-item -Path $drive -Destination $DST_DRIVE -Recurse -ErrorAction Stop
与
这里我只举一个例子,你可能需要做进一步的工作来递归复制。你可以使用
xcopy
或robocopy
来处理递归复制。我“解决”了这个问题。。。当直接从PowerShell提示符而不是PowerShell ISE启动时,我的脚本工作得非常好。。。所以IDE就是罪魁祸首。很高兴我找到了这个。在我正在处理的几个函数中,我一直在对此进行故障排除。有趣的是,.NET调用可以正常工作。两个小时的浪费:(不管怎样,就像你提到的,控制台主机没有问题,所以现在我可以使用.NET或者在一个新的powershell进程中执行命令。我花了整整一个晚上来解决这个问题。谢谢!
& cmd /C "copy F:\* G:\dest\"