VMware Cloud Community
vespavbb
Enthusiast
Enthusiast
Jump to solution

Foreach Rename VM with $name plus XX

Hi,

I need some help.

I wannt to do a foreach loop with import of some VM´s, shut them down and rename each VM to the original VM Name plus "_xx_delete"

so for example vm " VMADC01 will renamed to VMADC01_xx_delete after shutdown,

I have the loop but now clue how to rename it

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

$importDatei = "C:\scripts\VMliste.txt"

$vmlist = Import-Csv -Path $importDatei -Delimiter ";"

foreach ($vm in $vmlist)

{

$vm1 = Get-VM -Name $vm.name -ErrorAction:SilentlyContinue

if ($vm1.powerstate -eq "poweredon"-and $vm1.Guest.State -eq "Running")

{

$vm1  | Shutdown-VMGuest -Confirm:$false | out-null

Write-Host $vm1.name  "go offline soft"

sleep -Seconds 3

}

elseif($vm1.powerstate -eq "poweredon"-and $vm1.Guest.State -eq "NotRunning")

{

$vm1 | where {$_.Guest.State -eq "NotRunning"} | Stop-VM -Confirm:$false | out-null

Write-Host $vm1.name  "go offline hard"

sleep -Seconds 3

}

else

{write-host $vm1.name "is already offline" | Format-Table -AutoSize

}

}

VCP4,VCP5,VCP6,VCP7,VCP8
1 Solution

Accepted Solutions
LucD
Leadership
Leadership
Jump to solution

Try something like this

Invoke-VMScript -VM <your-vm> -ScriptText 'echo %Path%' -ScriptType Bat

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

$importDatei = "C:\scripts\VMliste.txt"

$vmlist = Import-Csv -Path $importDatei -Delimiter ";"

foreach ($vm in $vmlist) {

    $vm1 = Get-VM -Name $vm.name -ErrorAction:SilentlyContinue

    if ($vm1.powerstate -eq "poweredon" -and $vm1.Guest.State -eq "Running") {

        $vm1 | Shutdown-VMGuest -Confirm:$false | out-null

        Write-Host $vm1.name  "go offline soft"

        sleep -Seconds 3

    }

    elseif ($vm1.powerstate -eq "poweredon" -and $vm1.Guest.State -eq "NotRunning") {

        $vm1 | where { $_.Guest.State -eq "NotRunning" } | Stop-VM -Confirm:$false | out-null

        Write-Host $vm1.name  "go offline hard"

        sleep -Seconds 3

    }

    else {

        write-host $vm1.name "is already offline" | Format-Table -AutoSize

    }

    Set-VM -VM $vm1 -Name "$($vm1.Name)_xx_delete" -Confirm:$false

}


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

View solution in original post

3 Replies
Gidrakos
Hot Shot
Hot Shot
Jump to solution

$newVmName = ($vm1.name + "_xx_delete")

Set-VM [vmCurrentName] -Name $newVmName -confirm:$false

Throw that in the loop and it will rename it for ya Smiley Happy

LucD
Leadership
Leadership
Jump to solution

Try something like this

Invoke-VMScript -VM <your-vm> -ScriptText 'echo %Path%' -ScriptType Bat

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

$importDatei = "C:\scripts\VMliste.txt"

$vmlist = Import-Csv -Path $importDatei -Delimiter ";"

foreach ($vm in $vmlist) {

    $vm1 = Get-VM -Name $vm.name -ErrorAction:SilentlyContinue

    if ($vm1.powerstate -eq "poweredon" -and $vm1.Guest.State -eq "Running") {

        $vm1 | Shutdown-VMGuest -Confirm:$false | out-null

        Write-Host $vm1.name  "go offline soft"

        sleep -Seconds 3

    }

    elseif ($vm1.powerstate -eq "poweredon" -and $vm1.Guest.State -eq "NotRunning") {

        $vm1 | where { $_.Guest.State -eq "NotRunning" } | Stop-VM -Confirm:$false | out-null

        Write-Host $vm1.name  "go offline hard"

        sleep -Seconds 3

    }

    else {

        write-host $vm1.name "is already offline" | Format-Table -AutoSize

    }

    Set-VM -VM $vm1 -Name "$($vm1.Name)_xx_delete" -Confirm:$false

}


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

vespavbb
Enthusiast
Enthusiast
Jump to solution

Thank you so much guys,  thats exactly what I ´m looking for

VCP4,VCP5,VCP6,VCP7,VCP8
Reply
0 Kudos