Die Foren-SW läuft ohne erkennbare Probleme. Sollte doch etwas nicht funktionieren, bitte gerne hier jederzeit melden und wir kümmern uns zeitnah darum. Danke!

Host per Skript nach Backup-Aufgabe herunterfahren

Alles zum Thema vSphere 6, ESXi 6.0 und vCenter Server.

Moderatoren: irix, Dayworker

Member
Beiträge: 82
Registriert: 12.09.2012, 20:56

Host per Skript nach Backup-Aufgabe herunterfahren

Beitragvon albiderbaer » 13.02.2017, 11:15

Hallo Gemeinde,

wir haben bei uns ein kleines System mit 2 physischen Hosts (Vsphere 6.0 Essentials mit einem Vcenter als Appliance) und einem physischen Backupserver auf dem Windows 7 Professional (64bit) mit Veeam Backup & Replication 9.5 (Essentials) installiert ist.
Ich möchte gern einen Host als Produktivsystem laufen lassen und den anderen Host als Replikat, der nach dem Backup wieder herunterfährt.
Nun zu meiner Frage:

Wie bekomme ich es hin, dass der Replikat-Host nach dem Backup wieder sauber per Skript herunterfährt?
Auf dem Backup-Server ist VMware vSphere PowerCLI installiert und als Skript habe ich das von Dennis Bistron verwendet und angepasst:
Das Skript PowerCLI_Shutdown.ps1 sieht folgendermaßen aus:

#####################################################################
.#..
# Datei: PowerCLI_Shutdown.ps1
# Autor: Dennis Bistron
# Veröffentlicht: 03. März 2012
# Letzte Änderung: 16. Juli 2012
# Beschreibung: Automatisierter Shutdown von ESX-Hosts
# und VMs.
#
# Weitere Informationen unter:
# http://blog.bistron.eu/
# Keine Gewähr! Nutzung auf eigene Gefahr!
#
#####################################################################

##################################
# config:

$VIServer = "IP des Replikat-Host" # name/ip
$credFile = "" # VICredentialStoreItem
$datacenter = "*" # "DataCenter1","DataCenter2",...
$cluster = "*" # "Cluster1","Cluster2",...
$VMhosts = "IP des Replikat-Host" # "Host1","Host2",...
$shutdownInOrder = $false # $true/$false
$excludedVMs = @("") # @("SRV01","SRV02",...)
$maxWaitVMs = 300 # seconds
$shutdownDelay = 0 # seconds
$testDelay = 1 # seconds

##################################

Write-Host (Get-Date -Format "yyyy-MM-dd HH:mm:ss") *** StartShutdownScript ***
$endVMShutdown = (Get-Date).AddSeconds($maxWaitVMs)

Write-Host (Get-Date -Format "yyyy-MM-dd HH:mm:ss") ConnectVIServer
If($credFile.Equals("")){
Connect-VIServer $VIServer
}
else{
$loginCreds = Get-VICredentialStoreItem -file $credFile
Connect-VIServer -Server $VIServer -User $loginCreds.User -Password $loginCreds.Password
}

# Get ESX Hosts/VMs
Write-Host (Get-Date -Format "yyyy-MM-dd HH:mm:ss") CollectEnvData
#$ESXHosts = Get-Datacenter $datacenter | Get-Cluster $cluster | Get-VMHost $VMhosts # vCenter
$ESXHosts = Get-VMHost # single host

$VMsOnline = $ESXHosts | Get-VM | Where {$_.PowerState -eq "poweredOn"}
$maxVMsOnl = ($VMsOnline | Measure).count
$shutdownOrder = $ESXHosts | Get-VMStartPolicy | Sort-Object -Property @{Expression="StartAction";Descending=$true},@{Expression="StartOrder";Ascending=$shutdownInOrder}

# Shutdown VMs on ESXHosts
Foreach ($VM in $shutdownOrder){
$myVM = $VMsOnline | Where {$_.Name -eq $VM.VM}

# VM running and not excluded from shutdown?
if($myVM.PowerState -eq "PoweredOn"){
if($excludedVMs -notcontains $myVM.Name){
# tools running?
if(($myVM | Get-VMGuest).State -eq "Running"){
# Shutdown VM
Write-Host (Get-Date -Format "yyyy-MM-dd HH:mm:ss") InitShutdown $myVM.Name
$myVM | Shutdown-VMGuest -Confirm:$false
}
else{
# Poweroff VM
Write-Host (Get-Date -Format "yyyy-MM-dd HH:mm:ss") InitPoweroff $myVM.Name
$myVM | Stop-VM -Confirm:$false
}
}
else{
# count excluded VMs online
$cntExclVMs = $cntExclVMs + 1
}
sleep $shutdownDelay
}
}

Write-Host (Get-Date -Format "yyyy-MM-dd HH:mm:ss") ExcludedVMsOnl $cntExclVMs

# Wait for VM power off
$tmpVMsOnl = $maxVMsOnl

Do {
$VMsStillOnline = $ESXHosts | Get-VM | Where { $_.PowerState -eq "poweredOn" }
$cntVMsOnl = ($VMsStillOnline | Measure).count
$tmWait = ($endVMShutdown - (Get-Date))
Write-Host (Get-Date -Format "yyyy-MM-dd HH:mm:ss") Waiting $tmpVMsOnl/$maxVMsOnl VMs online / $tmWait left...

# any VM powered off?
if($cntVMsOnl -ne $tmpVMsOnl){
If($VMsStillOnline){
Foreach ($VM in (Compare-Object $VMsStillOnline $VMsOnline)){
Write-Host (Get-Date -Format "yyyy-MM-dd HH:mm:ss") PoweredOff $VM.InputObject
}
$VMsOnline = $VMsStillOnline
$tmpVMsOnl = ($VMsOnline | Measure).count
}else{
Foreach ($VM in ($VMsOnline)){
Write-Host (Get-Date -Format "yyyy-MM-dd HH:mm:ss") PoweredOff $VM.Name
$tmpVMsOnl = 0
}
}
}
if($tmpVMsOnl -ne (0 + $cntExclVMs)){sleep $testDelay}
} until ($tmpVMsOnl -eq (0 + $cntExclVMs) -or $tmWait -le 0)

# List VMs shutdown with host
if($tmpVMsOnl -ne 0){
Foreach($VM in $VMsOnline){
if($excludedVMs -notcontains $VM.Name){$marker = "!"}else{$marker = ""}
Write-Host -NoNewline (Get-Date -Format "yyyy-MM-dd HH:mm:ss") $marker
Write-host StillPoweredOn $VM.Name
}
}

# Shutdown ESXHosts
Foreach($ESXHost in $ESXHosts){
Write-Host (Get-Date -Format "yyyy-MM-dd HH:mm:ss") InitShutdown $ESXHost.Name
$ESXHost | Foreach {Get-View $_.ID} | Foreach {$_.ShutdownHost_Task($TRUE)}
}

Write-Host (Get-Date -Format "yyyy-MM-dd HH:mm:ss") *** EndShutdownScript ***



Dieses Skript wollte ich im Anschluß zur Backup-Aufgabe per Batchdatei Shutdown.bat ausführen lassen:

Die Batchdatei Shutdown.bat hat folgenden Inhalt:

C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -PSConsoleFile "C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\vim.psc1" "& "C:\Shutdown\PowerCLI-Shutdown.ps1"

Geht aber leider nicht.
Muss ich noch irgendeinen Dienst ausführen lassen um das Powershell-Skript zum Laufen zu bringen?
Wenn ich die Batchdatei direkt im Explorer ausführe, so klappt es nicht. Führe ich hingegen das Skript PowerCLI-Shutdown.ps1 in der Konsole vom VMware vSphere PowerCLI aus, so fährt der Replikat-Host wie gewünscht herunter.

Vielen Dank für Eure Hilfe

Thomas

Member
Beiträge: 82
Registriert: 12.09.2012, 20:56

Re: Host per Skript nach Backup-Aufgabe herunterfahren

Beitragvon albiderbaer » 15.02.2017, 10:54

Keiner eine Idee?

Experte
Beiträge: 1337
Registriert: 25.04.2009, 11:17
Wohnort: Thüringen

Re: Host per Skript nach Backup-Aufgabe herunterfahren

Beitragvon Supi » 15.02.2017, 13:01

Stimmt dein Pfad?
http://www.virtu-al.net/2009/07/10/runn ... uled-task/
C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -PSConsoleFile “C:\Program Files\VMware\Infrastructure\vSphere PowerCLI\vim.psc1″ ” & “C:\Scripts\MyScript.ps1”

Welche PowerCLI version? Ab 6.5 gibts das vim nicht mehr.

Aus einem TakeNet :grin: Script für PowerCli 6.5 :
# Load missing Snapins
if(get-pssnapin|where{$_.name -ne "VMware.VimAutomation.Core"}){
if(Add-PSSnapIn VMware.VimAutomation.Core -ErrorAction SilentlyContinue) {
} else {
# With PowerCLI 6.5 they switch from SnapIns to Modules
import-module VMware.VimAutomation.Core
}
}

Member
Beiträge: 82
Registriert: 12.09.2012, 20:56

Re: Host per Skript nach Backup-Aufgabe herunterfahren

Beitragvon albiderbaer » 25.02.2017, 12:38

Der Pfad stimmt und als Version habe ich Version 6.3.
Ich bekomme es aber dennoch nicht ans Laufen und die Zeit mich damit genauer zu beschäftigen ist zu knapp.
Nun frage ich einfach mal in die Runde: Kann mir jemand für nen schmalen Taler helfen ein lauffähiges kleines Script zum Herunterfahren eines Esxi-Host bauen bzw. zur Verfügung stellen? :?:
Ziel: Replikat-Host soll nach Veeam Replication-Job per Script (aus Veeam heraus) ordentlich herunterfahren.

Beste Grüße Thomas


Zurück zu „vSphere 6.0“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste