PowerShell Problem mit ForEach - Shutdown von VMs mit PowerCLI

[SoD]r4z0r

Enthusiast
Thread Starter
Mitglied seit
11.04.2009
Beiträge
3.950
Hallo zusammen,

ich habe nen Problem bei einem Script zum Runterfahren von VMs mit der PowerShell und VMware PowerCLI.

Hier mein Script:
Code:
# VMware PowerCLI Befehlssätze laden
Add-PSSnapIn -Name VMWare.VimAutomation.Core
& "C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1"

# Login zum vCenter Server
Connect-VIServer -Server fsp-vcenter.fsp-gmbh.com -User xxx -Password xxx

# VMs in frc-vUmgebung herunterfahren
$vms = Get-VM -Location 'frc-vUmgebung' | Where-Object {$_.PowerState -eq 'PoweredOn'}
$vms | select Name | export-csv 'C:\VMwareTests\frc.csv' -NoTypeInformation
$vmservers = @()
ForEach ($v in $vms) {
    $vmservers = $v |select name | format-list | out-string
}
echo 'VMServers: ' $vmservers
ForEach ($vm in $vmservers) {
    $vmtoolsstatus = (Get-VM $vm | Get-View).Guest.ToolsStatus
    echo 'VMTools: ' $vmtoolsstatus
    echo 'VM Name: ' $vm
    if ($vmtoolsstatus -eq 'toolsOk' -eq 'toolsOld') {
        echo 'shutdown'
        #Shutdown-VMGuest -VM $vm -Confirm:$false
    }
    else {
        echo 'shutoff'
        #Stop-VM -RunAsync -VM $vm -Confirm:$false
    }
}

Mein Problem ist der Name der jeweiligen VM.
Über Get-VM bekomme ich folgendes als Output:
Code:
 T:\> Get-VM shutdowntest01

Name                 PowerState Num CPUs MemoryGB       
----                 ---------- -------- --------       
shutdowntest01       PoweredOn  2        1,000

Ich benötige nur den reinen Namen für die ForEach Schleife, also 'shutdowntest01'. In $vmservers sollen also alle Namen der VMs stehen, die ich dann über $vm in der Schleife weiterverwenden kann.

Bei dem o. G. Konstrukt steht in $vm folgendes drin:
Code:
'Name : shutdowntest03'
Und ich bekomme folgende Fehlermeldung:
Code:
Get-VM : 19.09.2014 11:02:59    Get-VM        VM with name '

Name : shutdowntest03



' was not found using the specified filter(s).

Habt ihr Ideen wie ich das Problem gelöst bekomme?

Edit:
In der am Anfang erstellten .csv steht übrigens folgendes drin:
Code:
"Name"
"shutdowntest01"
"shutdowntest02"
"shutdowntest03"
Könnte ich nicht davon irgendwie die Namen einlesen für $vmservers, nur halt ohne die Zeile "Name"?
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Wäre eine Idee. Muss ich mal ausprobieren, melde mich sobald ich ein Ergebnis habe.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh