AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 654415
Accepted
TechGuyTJ
TechGuyTJ
Asked: 2014-12-24 06:42:41 +0800 CST2014-12-24 06:42:41 +0800 CST 2014-12-24 06:42:41 +0800 CST

PowerCLI Move-VM 返回失败,但 vm 仍在移动

  • 772

我有一个将虚拟机从一个数据存储移动到另一个的脚本。我有其他逻辑来保护存储后端和结构免于过度订阅并等待在特定时间提交新请求(业务需求)。我只移动数据存储而不移动主机。我在 Move-VM 周围有一个 try catch 块,因为我想处理故障。我运行脚本的前两三次只发生了一些错误,并且按预期进行了处理。最后 5 次移动返回错误,但 VM 移动请求成功,如我在 vCenter 中看到的任务所示。该作业也成功完成。Move-VM 未使用 RunAsync 开关。什么会导致 Move-VM 返回错误但成功提交移动请求。

$VMs = Get-VM -Name $ComputerName
$CurrentDataStores = Get-Datastore

foreach ($VM in $VMs){
   foreach ($store in $CurrentDataStores){
      if ($store.name -eq "$Datastore"){
         $rawDatastore = $store
      }
      if ($store.id -Match $VM.DatastoreIdList){
         $VMDatastore = $store.name
      } 
   }
   if ($VMDatastore -eq "$Datastore"){
      Write-Output "$VM : is already on requested Datastore"
   }
   else{
      try {
          Move-VM -VM $VM -Datastore $rawDatastore -ErrorAction Stop
      }
      catch {
         Write-OutPut "$VM : Unable to move VM to new Datastore" 
         continue
      }
   }
}

Move-VMDatastore : <VM Name> : Unable to move VM to new Datastore
At line:1 char:1
+ Move-VMDatastore -ComputerName <VM Name> -Datastore <Move TO Datastore>
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Move-VMDatastore


Move-VMDatastore : 12/24/2014 12:50:02 AM    Move-VM        Operation is not valid due to the current state of the
object.
At line:1 char:1
+ Move-VMDatastore -ComputerName <ComputerName[]> -Datastore <Datastore>
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Move-VMDatastore
powershell
  • 3 3 个回答
  • 7531 Views

3 个回答

  • Voted
  1. Best Answer
    GFK
    2015-12-17T10:05:09+08:002015-12-17T10:05:09+08:00

    我对这个问题的理解是,在 Move-VM 的实现中,PowerCLI 运行一个异步任务,获取任务然后Wait-Task在其上运行。

    如果操作非常快,则会因此问题而失败。这是一个有根据的猜测,因为这是您Wait-Task完成任务时遇到的确切异常。

    所以基本上你的问题是你的VMware服务器太快了......

    一种解决方法是使用 -RunAsync 开关并自己实现正确的行为。就像是:

    $Task = Move-VM -VM $VM -Datastore $rawDatastore -ErrorAction Stop -RunAsync
    while($true)
    {
        switch ($task.State)
        {
             'Success' { $Task.Result; break }
             'Error' { throw $Task.ExtensionData.Info.Error.LocalizedMessage }
             Start-Sleep 5
        }
    }
    

    编辑:我已经看到了与 Stop-VM 和 Remove-VM 完全相同的问题,并以同样的方式解决了它们

    此问题已在此处提交给 PowerCLI 团队以进行改进: https ://powercli.ideas.aha.io/ideas/PCLI-I-208

    • 5
  2. JonnoT
    2017-05-12T23:05:50+08:002017-05-12T23:05:50+08:00

    以防万一其他人遇到此问题,$task 变量似乎不会自行更新。就我而言,我必须这样做:

     while($task.state -eq "Running")
     {
       Start-Sleep 5
       $task = Get-Task -ID $task.id
     }
    
    • 2
  3. Joe A
    2015-09-25T08:40:39+08:002015-09-25T08:40:39+08:00

    我也遇到过这个问题。似乎某些原因导致从 powercli 到 vCenter 服务器的连接损坏。每次我在事后运行它都会产生相同的错误。我必须关闭命令窗口并打开一个全新的窗口才能解决问题。

    • -1

相关问题

  • 资源锁和电源外壳

  • 脚本 - 如何断开远程桌面会话?

  • 如何限制向通讯组发送到外部地址?

  • Powershell对值与数组的作用不同?

  • Windows Powershell Vim 键绑定

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve