Powershell - VBoxManage 克隆脚本
Powershell - VBoxManage Cloning Script
我写了一个 powershell 脚本来从一个文本文件中读取数据,然后使用 VBoxManage 克隆一个虚拟机。它可以工作,但是会报告此错误。
[string]$vmPath = "C:\Users\someuser\VirtualBox VMs\"
[string]$vmName="QuestionMark"
[string]$vBoxClonevdi = "clonehd"
[string]$vBoxVMName = Get-Content -Path "C:\Users\someuser\VirtualBox VMs\log.txt"
[string]$invokeCommand
[string]$filetype=".vdi"
[string]$vBoxManagewithQuotes= "`"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe`""
if(Test-Path ("C:\Users\someuser\VirtualBox VMs\log.txt")){
[int]$ConvertNum = -1
[int]::TryParse($vBoxVMName.Substring(16), [ref]$ConvertNum)
Write-Output ("Version Number: " + $ConvertNum)
$ConvertAfter = $ConvertNum + 1
Write-Output ("New Version: " + $ConvertAfter)
$vmOut = $vmPath+$vmName+$ConvertAfter+$filetype
$vmToClone=($vmPath+$vmName+$ConvertNum+$fileType)
$write= ($vmName + $ConvertAfter)
}
if(Test-Path ("C:\Users\someuser\cloneVM.bat")){
cmd.exe /c "C:\Users\someuser\cloneVM.bat" $vmName $ConvertAfter
}
错误:
cmd.exe : 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
At C:\Users\someuser\clonevdi.ps1:28 char:6
+ cmd.exe /c "C:\Users\someuser\cloneVM.bat" $vmName $ConvertAfter
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (0%...10%...20%....0%...90%...100%:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
我不确定这个错误是什么意思。这是什么意思?我该如何解决?
很确定您看到的是 cloneVM.bat
向错误流发送数据,而 PowerShell 只是报告错误。我可以用下面的 bat 文件模拟这个
'GAME OVER MAN! GAME OVER' 1>&2
并从 PowerShell 调用该 bat 文件
cmd.exe /c C:\temp\test.bat
这会在 PowerShell 中触发以下错误
cmd.exe : 'GAME OVER MAN! GAME OVER'
At line:1 char:1
+ cmd.exe /c C:\temp\test.bat
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: ('GAME OVER MAN! GAME OVER' :String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
处理此问题的一种方法是将错误发送到输出流并将其捕获到一个变量中。如果您需要 cloneVM.bat
的其他输出,这将是首选方法。您可以使用 about_Redirection
查看其他选项
$return = cmd.exe /c C:\temp\test.bat 2>&1
如果您查看 cloneVM.bat
,我会大胆猜测您会发现一些带有 2>&1
的行
我写了一个 powershell 脚本来从一个文本文件中读取数据,然后使用 VBoxManage 克隆一个虚拟机。它可以工作,但是会报告此错误。
[string]$vmPath = "C:\Users\someuser\VirtualBox VMs\"
[string]$vmName="QuestionMark"
[string]$vBoxClonevdi = "clonehd"
[string]$vBoxVMName = Get-Content -Path "C:\Users\someuser\VirtualBox VMs\log.txt"
[string]$invokeCommand
[string]$filetype=".vdi"
[string]$vBoxManagewithQuotes= "`"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe`""
if(Test-Path ("C:\Users\someuser\VirtualBox VMs\log.txt")){
[int]$ConvertNum = -1
[int]::TryParse($vBoxVMName.Substring(16), [ref]$ConvertNum)
Write-Output ("Version Number: " + $ConvertNum)
$ConvertAfter = $ConvertNum + 1
Write-Output ("New Version: " + $ConvertAfter)
$vmOut = $vmPath+$vmName+$ConvertAfter+$filetype
$vmToClone=($vmPath+$vmName+$ConvertNum+$fileType)
$write= ($vmName + $ConvertAfter)
}
if(Test-Path ("C:\Users\someuser\cloneVM.bat")){
cmd.exe /c "C:\Users\someuser\cloneVM.bat" $vmName $ConvertAfter
}
错误:
cmd.exe : 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
At C:\Users\someuser\clonevdi.ps1:28 char:6
+ cmd.exe /c "C:\Users\someuser\cloneVM.bat" $vmName $ConvertAfter
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (0%...10%...20%....0%...90%...100%:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
我不确定这个错误是什么意思。这是什么意思?我该如何解决?
很确定您看到的是 cloneVM.bat
向错误流发送数据,而 PowerShell 只是报告错误。我可以用下面的 bat 文件模拟这个
'GAME OVER MAN! GAME OVER' 1>&2
并从 PowerShell 调用该 bat 文件
cmd.exe /c C:\temp\test.bat
这会在 PowerShell 中触发以下错误
cmd.exe : 'GAME OVER MAN! GAME OVER'
At line:1 char:1
+ cmd.exe /c C:\temp\test.bat
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: ('GAME OVER MAN! GAME OVER' :String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
处理此问题的一种方法是将错误发送到输出流并将其捕获到一个变量中。如果您需要 cloneVM.bat
的其他输出,这将是首选方法。您可以使用 about_Redirection
$return = cmd.exe /c C:\temp\test.bat 2>&1
如果您查看 cloneVM.bat
,我会大胆猜测您会发现一些带有 2>&1