博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PowerCLI 对vm批量关机
阅读量:4322 次
发布时间:2019-06-06

本文共 2450 字,大约阅读时间需要 8 分钟。

  参考文档

获取 引用 库

Save-Module -Name VMware.PowerCLI -Path D:\PowerCLI 

$ENV:PSModulePath  查看 ps模块路径

把下载的 模块 复制到 ps模块路径下(如把PowerCLI里的内容移到到C:\Program Files\WindowsPowerShell\Modules内)

 

 

 

 

建立一个 powershell 文件,代码如下,

应注意  修改下 EsxiHost  为Esxi 的IP,或vCenter的IP或安装VMware Workstation 的IP。

还要相应的密码EsxiPassWd 。

思路:

1:链接前,先禁用无证书 提示(有证书的忽略此处)。

2:获取所有 加电的主机

3:遍历主机的ToolsStatus ,也就是 tools 状态

4:如果tools 状态不为 toolsNotInstalled 的,则关闭客户机否则关机。

5:5秒后,获取所有加电主机。

6:如果数量不为0,则返回第2步,否则 向主机发送关机指令。

 

 

 

 

 

 

$TextUtf8 = New-Object -typename System.Text.UTF8EncodingWrite-HostWrite-Host "      安装tools的关闭系统,没安装tools的关闭电源"Write-Host "      vCnter关机要 4-6 分钟"Write-Hostpause $EsxiHost = "127.0.0.1"$EsxiUser = "root"$EsxiPassWd = "Passwd@yhc18"Write-Host " 正在连接 服务器 。。。 。。。"$ConnIgnore = Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -confirm:$false$ConnectVIServer = Connect-VIServer -Server $EsxiHost -username $EsxiUser -Password $EsxiPassWd while(1 -eq 1){       $PowerOnVm = get-vm | where {$_.PowerState -eq "PoweredOn"}    $PowerOnNum=$PowerOnVm.count    if($PowerOnVm.count -gt 0){                cls        Write-Host "ID" . "vmName" "ToolsStatus" "(正在运行中)"        $index = 0               $PowerOnVm | foreach{            $index++             if($_.extensiondata.guest.ToolsStatus -ne "toolsNotInstalled"){                Write-Host $index.    $_.Name    "    on"             }else{                Write-Host $index.    $_.Name    "    off"             }        }        Write-Host "------------------------------------------"        $index2=0        $PowerOnVm | foreach{                          if($_.extensiondata.guest.ToolsStatus -ne "toolsNotInstalled"){                $index2++;                Write-Host "$index2/$PowerOnNum"  "关闭客户机" $_.Name                $stopGuest = Get-Vm -Name $_.Name |stop-VMGuest -confirm:$false -ErrorAction SilentlyContinue                Start-Sleep -Seconds 3            }else{                $index2++;                Write-Host "$index2/$PowerOnNum"  "关闭机器" $_.Name                $stopGuest = Get-Vm -Name $_.Name |stop-VM -confirm:$false -ErrorAction SilentlyContinue                Start-Sleep -Seconds 3                            }        }    }else{        $PowerOnHosts = Get-VMHost| Where {$_.Name -eq $EsxiHost} | Stop-VMHost -confirm:$false -Force:$true        cls        echo "虚拟机已关机完毕,发送Esxi关机指令,等待Esxi主机关机"        pause        break #跳出循环           }    Start-Sleep -Seconds 5}

 

转载于:https://www.cnblogs.com/likehc/p/11439544.html

你可能感兴趣的文章
python自动化测试-D11-学习笔记之一(yaml文件,ddt)
查看>>
mysql存储过程使用游标循环插入数据
查看>>
Ubuntu 12.04 添加新用户并启用root登录
查看>>
20145309信息安全系统设计基础第9周学习总结上
查看>>
c# 字段、属性get set
查看>>
td内容超出隐藏
查看>>
Spring CommonsMultipartResolver 上传文件
查看>>
Settings app简单学习记录
查看>>
SQLAlchemy
查看>>
多线程
查看>>
使用缓存的9大误区(下)转载
查看>>
appium键值对的应用
查看>>
MyEclipse 8.X 通用算法
查看>>
selenium.Phantomjs设置浏览器请求头
查看>>
分布式数据库如何选择,几种分布式数据库优缺点一览
查看>>
BZOJ 4443: 小凸玩矩阵【二分图】
查看>>
苹果 OS X制作u盘启动盘
查看>>
Jquery便利对象
查看>>
MVC: Connection String
查看>>
idea常用设置汇总
查看>>