服务器计划任务执行备份脚本,放在备份脚本前,避免服务器执行备份时负载过高,从而失去响应。
# 定义空数组,不进行空数组定义,脚本报错。
$idposition = @()
# 获取正在运行的虚拟机,输出包含名称及UUID,结果以字符串格式赋值。
$runningvms = ( C:\"Program Files"\"Oracle"\"VirtualBox"\VboxManage.exe list runningvms | Out-String)
# 以runningvms字符数大于0为条件执行。
if ($runningvms.length -gt 0) {
# 将runningvms中所有“{*}”结束字符的所在位置加入idposition数组。
$idposition += [regex]::matches($runningvms, '\{*\}') | foreach {$_.index}
# 循环次数限制为$idposition元素数量。
for ($l = 0; $l -le($idposition.count -1); $l++) {
# 提取runningvms中虚拟机的UUID,从idposition的位置向左读取36字符,字符串格式赋值。
$vmid = $runningvms.Substring(($idposition[$l] -36), 36) | Out-String
# 以vmid为标识执行标准关机。
Start-Process -FilePath "C:\Program Files\Oracle\VirtualBox\VboxManage.exe" -ArgumentList "controlvm $vmid acpipowerbutton" -Wait
}
}