1. 程式人生 > >Scripts for configure VM

Scripts for configure VM

scripts for VM

How to batch extend VM disk

Add-PSSnapin vmWARE.VimAutomation.Core

$vc="vCenterHostName"

connect-viserver $vc

$VMinfo = get-content "c:\VMName.csv"

foreach ($VM in $VMinfo){

Get-HardDisk -vm $VM | where {$_.Name -eq "Hard Disk 1"} |Set-HardDisk -CapacityGB 60 -Confirm:$false

} 

根據實際情況更改VC名字和Hard disk number and size.

How to batch create VM disks

Add-PSSnapin vmware.vimautomation.core
$vc="vcname"
Connect-viserver $vc
$vminfo=get-content "C:\vmname.csv"
foreach ($vm in $vminfo){
New-HardDisk -vm $vm -CapacityGB 2 -StorageFormat:EagerZeroedThick -Confirm:$false
New-HardDisk -vm $vm -CapacityGB 1 -Confirm:$false
}
Disconnect-VIServer -Confirm:$false 

Finding VMs with Duplicate MAC Addresses

At one of my customers‘ sites today, I saw an error message that I‘ve not seen before: VM MAC Conflict. "Well, that‘s certainly not good," I thought, as I poked around at the error message. To my chagrin, I could only find that error message for a single VM in the environment, and that error message wouldn‘t tell me with which other VM it was conflicting. So, I could only think of one way to figure out what was going on with this conflict: look at the MAC Address assigned to every NIC on every VM in the environment, and figure out what was causing the conflict. Easy!

No, really, it was easy. Had I done it by hand, I would certainly have driven myself crazy, but PowerCLI made it nice and easy. I just used this command:

(get-vm | get-networkadapter | ? {$_.MacAddress -eq "<offending MAC Address>").parent

Lo-and-behold, it returned 2 VMs. One was the known VM that had flagged the error and the other was a powered-off VM. Maybe that‘s why it wasn‘t also flagging the error, but regardless, we easily identified the source of the problem and were able to resolve it.

P.S. if you ever need to find all duplicate MAC addresses in an environment, you can use these commands:

$allNICs = get-vm | get-networkAdapter
 $dupeMACs = (compare-object $allNICs.macAddress ($allNICs.macAddress | select -unique)).inputObject

 foreach ($thisMAC in $dupeMACs){
    "="*17 + "`n$thisMAC`n" + "="*17
    ($allNICs | ? {$_.macAddress -eq $thisMAC}).parent.name
 }

Report VM with 3 days older VM Snapshots

#Script Name : VMSnapShot3DaysOld.ps1
#Purpose : Get the report of VMS Snapshot 3 Days Old and save it in CSV file

If(!(Get-PSSnapin | Where {$_.Name -Eq "VMware.VimAutomation.Core"}))
{
Add-PSSnapin VMware.VimAutomation.Core
}
$VCServer = Read-Host ‘Enter VC Server name‘
$vcUSERNAME = Read-Host ‘Enter user name‘
$vcPassword = Read-Host ‘Enter password‘ -AsSecureString
$vccredential = New-Object System.Management.Automation.PSCredential ($vcusername, $vcPassword)

$LogFile = "VMSnapShot3DaysOld_" + (Get-Date -UFormat "%d-%b-%Y-%H-%M") + ".csv"

Write-Host "Connecting to $VCServer..." -Foregroundcolor "Yellow" -NoNewLine
$connection = Connect-VIServer -Server $VCServer -Cred $vccredential -ErrorAction SilentlyContinue -WarningAction 0 | Out-Null
$Result = @()

If($? -Eq $True)

{
Write-Host "Connected" -Foregroundcolor "Green"
$Results = @()
$datetime = Get-Date

$threeDaysAgo = (Get-Date).AddDays(-3)
Get-VM | Foreach-Object {
Get-Snapshot -VM $ | Foreach-Object {
If($.Created -lt $threeDaysAgo) {
$Result += $ | Select VM,@{Name="Snapshot Name";E={$.Name}},@{Name="Date Created";E={$_.Created}}
}
}
}

$Result | Export-Csv -NoTypeInformation $LogFile
}
Else
{
Write-Host "Error in Connecting to $VIServer; Try Again with correct user name & password!" -Foregroundcolor "Red"
}

Disconnect-VIServer * -Confirm:$false

http://www.vmwarearena.com/powercli-script-report-virtual-machines-3-days-older-vm-snapshots/

Report Powered off VM’s older than 30 days

#Script Name:   VMPoweredOff30DaysAgo.ps1
#Purpose    :   Get the report of VMS Powered Off 30 Days ago               

If(!(Get-PSSnapin | Where {$_.Name -Eq "VMware.VimAutomation.Core"}))
{
    Add-PSSnapin VMware.VimAutomation.Core
}
$VCServer = Read-Host ‘Enter VC Server name‘
$vcUSERNAME = Read-Host ‘Enter user name‘
$vcPassword = Read-Host ‘Enter password‘ -AsSecureString
$vccredential = New-Object System.Management.Automation.PSCredential ($vcusername, $vcPassword)

$LogFile = "VMPoweredOff_" + (Get-Date -UFormat "%d-%b-%Y-%H-%M") + ".csv" 

Write-Host "Connecting to $VCServer..." -Foregroundcolor "Yellow" -NoNewLine
$connection = Connect-VIServer -Server $VCServer -Cred $vccredential -ErrorAction SilentlyContinue -WarningAction 0 | Out-Null
$Global:Report = @()

If($? -Eq $True)

{
    Write-Host "Connected" -Foregroundcolor "Green" 

    $PoweredOffAge = (Get-Date).AddDays(-30)
    $Output = @{}
    $PoweredOffvms = Get-VM | where {$_.PowerState -eq "PoweredOff"}
    $EventsLog = Get-VIEvent -Entity $PoweredOffvms -Finish $PoweredOffAge  -MaxSamples ([int]::MaxValue) | where{$_.FullFormattedMessage -like "*is powered off"}
    If($EventsLog)
    {
        $EventsLog | %{ if($Output[$_.Vm.Name] -lt $_.CreatedTime)
            {
                $Output[$_.Vm.Name] = $_.CreatedTime
            }
        }
    }
    $Result = $Output.getEnumerator() | select @{N="VM";E={$_.Key}},@{N="Powered Off Date";E={$_.Value}}

    If($Result)
    {
        $Result | Export-Csv -NoTypeInformation $LogFile
    }
    Else
    {
        "NO VM‘s Powered off last 30 Days"
    }
}
Else
{
    Write-Host "Error in Connecting to $VIServer; Try Again with correct user name & password!" -Foregroundcolor "Red" 
}

Disconnect-VIServer * -Confirm:$false

http://www.vmwarearena.com/powercli-script-report-powered-off-vms-older-30-days/

Scripts for configure VM