用于关闭 VMS 的 Powershell 脚本 - 错误
Powershell script to shut down VMS - erros
第一个 post 但常客。
我试图拼凑一个 powershell 脚本来启动 .csv 中 vSphere 机器列表的关闭。 vSphere 的版本为 5.1u2,vcenter 在 2008 R2 上运行。我正在 ps 脚本的开头加载 powercli 内容。
我找到了一个似乎完全符合我需要的脚本,但它看起来有一些问题。不确定我是否可以 post 链接到原文,所以这里是。
这是我尝试让它工作的尝试。使用Powershell,以便在检测到特定状态时可以通过监控工具启动它。
在此状态下,它在第 12 行第 44 个字符处给出了一个赋值表达式错误。不过,脚本的错误似乎远不止于此,尝试不同的东西会产生各种错误,包括 "The term import-csv is not recognised as a 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"
您是否尝试删除该行并手动输入?因为据我所知,第 12 行一切正常(这是来自 VMware 官方帮助的代码:
$vm = Get-View -ViewType VirtualMachine -Filter @{"Name" = "VM"}
所以可能有一些 copy\paste 问题?另外,您是否尝试在 ISE 中调试它?你得到了什么错误?
而不是
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.
想通了。 'Import-Csv C:\myfile\here.csv' 无法识别,cmdlet 的名称
原因很简单,一如既往。有问题的 cmdlet 不会在 powershell 1 上工作,我正在测试的服务器是默认安装。修复丢失的引号和中提琴后更新到版本 3!
我勾选了 4c74356b41 的答案,因为添加缺少的引号导致我遇到下一个错误,这让我意识到我使用的是版本 1。
现在看看我是否可以针对列表中的每个服务器异步获取它 运行 然后等待并关闭所有剩余的东西。
第一个 post 但常客。 我试图拼凑一个 powershell 脚本来启动 .csv 中 vSphere 机器列表的关闭。 vSphere 的版本为 5.1u2,vcenter 在 2008 R2 上运行。我正在 ps 脚本的开头加载 powercli 内容。
我找到了一个似乎完全符合我需要的脚本,但它看起来有一些问题。不确定我是否可以 post 链接到原文,所以这里是。
这是我尝试让它工作的尝试。使用Powershell,以便在检测到特定状态时可以通过监控工具启动它。
在此状态下,它在第 12 行第 44 个字符处给出了一个赋值表达式错误。不过,脚本的错误似乎远不止于此,尝试不同的东西会产生各种错误,包括 "The term import-csv is not recognised as a 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"
您是否尝试删除该行并手动输入?因为据我所知,第 12 行一切正常(这是来自 VMware 官方帮助的代码:
$vm = Get-View -ViewType VirtualMachine -Filter @{"Name" = "VM"}
所以可能有一些 copy\paste 问题?另外,您是否尝试在 ISE 中调试它?你得到了什么错误?
而不是
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.
想通了。 'Import-Csv C:\myfile\here.csv' 无法识别,cmdlet 的名称
原因很简单,一如既往。有问题的 cmdlet 不会在 powershell 1 上工作,我正在测试的服务器是默认安装。修复丢失的引号和中提琴后更新到版本 3!
我勾选了 4c74356b41 的答案,因为添加缺少的引号导致我遇到下一个错误,这让我意识到我使用的是版本 1。
现在看看我是否可以针对列表中的每个服务器异步获取它 运行 然后等待并关闭所有剩余的东西。