Wenn ihr einen vSphere Cluster ohne DRS (weil die Essentials-Lizenz es leider nicht beinhaltet) betreut dann habe ich hier 2 kleine PowerCLI Scripte, die euch helfen können und natürlich auch die Basis für andere Projekte sein kann.
Auf alle Fälle muss auf dem PC die aktuelle Version von PowerCLI installiert werden. Das kann man hier runterladen.
https://code.vmware.com/web/tool/12.0.0/vmware-powercli
Eine ältere Version, passend zu eurem Umfeld tut es natürlich auch. Und das ganze kann auch genutzt werden, um z.B. einen Knoten mal freizuschalten per Script.
Normalerweise aktiviere ich den Wartungsmode auf dem Knoten und DRS räumt den Knoten frei. Und hier setzt dann das Script an.
Grundsätzlich geht es auch über die Weboberfläche aber wir sind ja Scripter also wird gescriptet.
Das erste Script verschiebt alle VMs von einem auf einen anderen Knoten.
#######################################
# Script zum Verschieben aller VMs
#
# V1.0 02.04.2020 Bulletproof-Admin.de
#####################################
write-host "Verbindung zum Sphere Server..."
Connect-VIServer -Server vcenter -User "***USERNAME**" -Password "***PASSWORT***" | Out-Null
$quelle = Get-VMHost | Out-GridView -Title "Host wählen, der geleert werden soll..." -OutputMode Single
if (-not $quelle)
{
Write-Host "Abbruch" -ForegroundColor Red
exit
}
$ziel = Get-VMHost | Out-GridView -Title "Host wählen, der das Ziel werden soll..." -OutputMode Single
if (-not $ziel)
{
Write-Host "Abbruch" -ForegroundColor Red
exit
}
$vms = Get-VM -Location $quelle.name
foreach ($vm in $vms)
{
Move-VM -VM $vm.name -Destination $ziel.name
}
Als Selector nutze ich einfach den Out-GridView Dialog.
Im zweiten Script können dann einzelne VMs von einem Host auf einen anderen Host verschoben werden. Auch hier kommt wieder das GridView zum Einsatz.
#######################################
# Script zum Verschieben einiger VMs
#
# V1.0 02.04.2020 Bulletproof-Admin.de
#####################################
write-host "Verbindung zum Sphere Server..."
Connect-VIServer -Server vcenter -User "**USERNAME***" -Password "**PASSWORD***" | Out-Null
$quelle = Get-VMHost | Out-GridView -Title "Host wählen, der Quelle ist..." -OutputMode Single
if (-not $quelle)
{
Write-Host "Abbruch" -ForegroundColor Red
exit
}
$ziel = Get-VMHost | Out-GridView -Title "Host wählen, der Ziel sein soll..." -OutputMode Single
if (-not $ziel)
{
Write-Host "Abbruch" -ForegroundColor Red
exit
}
$vms = Get-VM -Location $quelle.name | Out-GridView -Title "VMs zum verschieben wählen" -PassThru
if (-not $vms)
{
Write-Host "Abbruch" -ForegroundColor Red
exit
}
foreach ($vm in $vms)
{
Move-VM -VM $vm.name -Destination $ziel.name
}
Ihr müsste natürlich euren Host und die passenden Credentials eintragen.
In den Zuge wollte ich mal wieder betonen, wie wichtig es ist, euren PowerShell Code zu signieren. Das komplette Freigeben von PowerShell mit Execution-Policy ist definit keine gute Idee. Das ist ein Einfallstor für Viren und Trojaner. Weil PowerShell eben so mächtig ist, wird es dafür leider genutzt. Bei uns im LAN ist nur Signierter Code von extern oder aus unserer CA per GPO erlaubt.

Zum Thema Code-Signing und PowerShell werde ich noch Beiträge erstellen. Ich habe dazu auch ein paar coole Scripts.
#WirBleibenZuhause
Alex
0 Kommentare