Powershell脚本关闭VMS - 错误

时间:2016-03-31 15:54:19

标签: powershell vsphere powercli

第一篇文章但是常客。  我正在尝试拼凑一个PowerShell脚本来启动.csv中vSphere机器列表的关闭。 vSphere的版本为5.1u2,vcenter的版本为2008 R2。我正在ps脚本的开头加载powercli东西。

我找到了一个似乎完全符合我需求的脚本,但看起来它有一些问题。不确定我是否可以发布原始链接,所以这里。

这是我试图让它运作的尝试。使用Powershell,以便在检测到某种状态时通过监视工具启动它。

在这种状态下,它在第12行字符44处给出了一个分配表达式错误。但是,脚本似乎有更多错误,尝试不同的东西会产生各种错误,包括“术语import-csv无法识别作为一个cmdlet“。

我很感激任何指针 - 对于狡猾的代码插入感到抱歉!

# Adds the base cmdlets needed to use powershell directly. Note the location of the powercli environment ps1 script - this may change in future releases of vsphere
Add-PSSnapin VMware.VimAutomation.Core
Add-PSSnapin VMware.VumAutomation
. "C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1"
#The next line is only relevant and needs running once if you get an invalid ssl related message
#Set-PowerCLIConfiguration -InvalidCertificateAction Ignore
connect-viserver vc5
#Get the names of VMs from a .csv then shut down gracefully - assumes we have vmware to be effective on all
Import-Csv C:\CLIout\listofcriticalvms.csv |  
    foreach {  
        $strNewVMName = $_.name             #Generate a view for each vm to determine power state  
        $vm = Get-View -ViewType VirtualMachine -Filter @{"Name" = $strNewVMName}  
        #If vm is powered on then VMware Tools status is checked  
               if ($vm.Runtime.PowerState -ne "PoweredOff") {  
                   if ($vm.config.Tools.ToolsVersion -ne 0) {  
                   Write-Host "VMware tools installed. Graceful OS shutdown ++++++++ $strNewVMName ----"  
                   Shutdown-VMGuest $strNewVMName -Confirm:$false 
    
 #For generating email  
                           $Report += $strNewVMName + " --- VMware tools installed. Graceful OS shutdown `r`n"  
               }  
               else {  
                      Write-Host "VMware tools not installed. Force VM shutdown ++++++++ $strNewVMName ----"  
                      Stop-VM $strNewVMName -Confirm:$false 
                   $Report += $strNewVMName + " --- VMware tools not installed. Force VM shutdown `r`n"  
               }  
           }  
}  
$Report | export-csv "C:\CLIout\GraceorHardfromcriticaloutput.csv"    

3 个答案:

答案 0 :(得分:0)

您是否尝试删除该行并手动输入?因为据我所知,第12行的一切都很好(这里有来自VMware官方帮助的代码:

$vm = Get-View -ViewType VirtualMachine -Filter @{"Name" = "VM"}

所以也许有一些copy \ paste问题?另外,您是否尝试在ISE中进行调试?你得到什么错误?

答案 1 :(得分:0)

而不是

Import-Csv C:\CLIout\listofcriticalvms.csv

尝试

$csv = "C:\CLIout\listofcriticalvms.csv"
Import-Csv -Path $csv

或只是

$csv = "C:\CLIout\listofcriticalvms.csv"
Import-Csv $csv

或者参考这个 https://github.com/gajuambi/vmware/blob/master/vTool/vToolMenus/MainMenu/vCenterMenu/vdsMenu/AddDpg.ps1 正确使用csv。

答案 2 :(得分:0)

想出来。无法识别“Import-Csv C:\ myfile \ here.csv”和cmdlet的名称

原因总是如此简单。有问题的cmdlet赢了;在PowerShell 1上工作,我正在测试的服务器是默认安装。在修复缺失的引号和中提琴后更新到版本3!

我勾选了4c74356b41的答案,因为添加了缺少的引号,导致我发现下一个错误,这让我意识到我在版本1上。

现在看看我是否可以异步运行列表中的每个服务器,然后等待并关闭所有剩下的服务器。