Script: Defrag all Local VMDK’s.


powerShellIcon

De volgende function zoekt eerst alle *.VMX bestanden op en vervangt daarna de extentie *.VMX naar *.VMDK. Deze *.VMDK bestanden worden in de $List geplaatst. Daarna worden alle VMDK’s gedefragmenteerd via de vmware-vdiskmanager.exe.

function Defrag-allVMDKs{
param([string]$path)
$vdiskmanager = “C:\Program Files\VMware\VMware Workstation\vmware-vdiskmanager.exe”
$parameter = “-d”
$List = get-childitem $path -recurse | where {$_.extension -eq “.vmx”} |
foreach-object -process { $_.FullName } | ForEach-Object {$_ -replace “.vmx”, “.vmdk”}
ForEach($vmdk in $List)
{
echo $vmdk
& $vdiskmanager $parameter $vmdk
}
}

Via het volgende commando kun de bovenstaande function gebruiken.

Defrag-allVMDKs <drive>\<path>

Als je dit in de Shell uitvoerd ziet het er als volgt uit:

image

VMware: Snapshot Information in vCenter


 image

Hugo Peeters heeft een powershell script gemaakt welke het aantal snapshots laat zien in een custom field binnen vCenter.

Although I spend quite some time in the Powershell Command Line Interface, the main tool for managing the Virtual Infrastructure remains the VI Client. So wouldn’t it be great if we could somehow show the results of our Powershell VI Toolkit scripts inside the VI Client?
Well, we can! Let’s take a closer look at Custom Fields / Custom Attributes.
If you select either a VMHost (ESX Server) or a VM in the VI Client and open the Summary tab, you will see the Annotations section in the bottom left. When you click Edit, I’m sure you have used the Notes section to enter Descriptions. But have you ever used the Attributes section? Here you can manually add and remove custom attributes and their values. Go ahead and create one. Then select a cluster or datacenter and click the Hosts or Virtual Machines tab. You will notice you can display your custom attribute in this table view, just like all the other properties of your VMs / Hosts. Pretty sweet!
image

Voor meer info zie Hugo zijn post: http://www.peetersonline.nl/index.php/vmware/add-snapshot-information-to-the-vi-client-using-powershell/

Script: Backup VMware Workstation VM’s


 

Via het onderstaande script kun je redelijk eenvoudig een backup maken van je VMware Workstation VM’s. Mocht de VM nog actief zijn, dan wordt deze “netjes” afgesloten en vervolgens gekopieerd naar een directory op een netwerk share. Dit script heb ik geschreven voor een VM die bij ons in productie draait onder VMware Workstation (deze VM heeft een seriële modem aangekoppeld). Zo wordt er elke dag via een scheduled task een backup gemaakt.

De volgende parameters moet je meegeven aan de onderstaande function backup-wsvm:

  • $vmname – de naam van de VM.
  • $vmx – pad naar het vmx bestand.
  • $vmdir – de directory waarin de VM staat.
  • $vmbackup – de directory waar de VM naar toe gekopieerd moet worden.

function backup-wsvm{
  param([string]$vmname, [string]$vmx, [string]$vmdir, [string]$vmbackup)
 
  $driveltr = “v:”
  $share = \\server\share
  $date = get-date -uformat “%m-%d-%Y”
  $vmrun = “C:\Program Files\VMware\VMware Workstation\vmrun.exe”
  $stop = “stop”
  $start = “start”
  $soft = “soft”
  $Result = test-path -path “$vmbackup\$date\$vmname”

  if ($Result -eq $false)
  {
    net use $driveltr $share
    New-Item “$vmbackup\$date\$vmname” -type directory
        & $vmrun $stop $vmx $soft
            Copy-Item $vmdir $vmbackup\$date\ -recurse
                & $vmrun $start $vmx
                    net use $driveltr /Delete
   }
}

Daarna kun je via de volgende code een backup maken van je vm:

$vmname = “Powershell_Lab”
backup-wsvm “$vmname” “D:\vmware\$vmname\$vmname.vmx” “D:\vmware\$vmname” “V:\vmbackup”

How To: Schedule a Powershell script with Scheduled Task


 

In deze post lees je hoe je een Powershell script kunt schedulen via Windows Scheduled Tasks.

Start de Scheduled Task Wizard.

image

Klik op Browse… en voeg het onderstaande commando in:

%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe

image

Nadat de wizard klaar is, vink je Open advanced properties for this task when I click Finish aan. Daarna voeg je het volgende toe aan het Run veld: -command D:\Scripts\backupwsvm.ps1

image

Vervolgens druk je op OK om de task op te slaan.

Mocht je een Powershell script scheduled die gebruik maakt van de VI Toolkit. Dan moet je de onderstaande code toevoegen aan je script.

#ADD VMWARE PSSNAPIN
Add-PSSnapin -Name “VMware.VimAutomation.Core”

#FORCE TO LOAD VMWARE POWERSHELL PLUGIN
[Reflection.Assembly]::LoadWithPartialName(“vmware.vim”)

VMware: Set VMware TimeSync option with the VI Toolkit


Ik was vandaag even met Gabrie van Zanten (http://www.gabesvirtualworld.com/) aan het brainstormen over het aanpassen van de Time synchronization optie, binnen de VMware Tools via de VI Toolkit.

image

Dit is uiteindelijk gelukt (met een beetje hulp van Niket en LucD http://communities.vmware.com/message/1106816).

Je kunt het script op twee manieren gebruiken:

Het aan of uitzetten van deze optie op alle VM’s kan via het onderstaande script.

$vCenter = ”

Connect-VIServer $vCenter

[Reflection.Assembly]::LoadWithPartialName("vmware.vim")

$vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
$vmConfigSpec.Tools = New-Object VMware.Vim.ToolsConfigInfo
$vmConfigSpec.Tools.SyncTimeWithHost = $True (or $False if you want to disable it)

Get-VM | % { (Get-View $_.ID).ReconfigVM($vmConfigSpec)} # For al VMs

Disconnect-VIServer -Confirm:$False

 

Wil je dit op een specifieke VM uitvoeren dan gebruik je de volgende Get-VM regel:

Get-VM -Name $vmname | % { (Get-View $_.ID).ReconfigVM($vmConfigSpec)} # VM with name vmname.

Je moet alleen dan wel de variable $vmname aanmaken.

Via het volgende commando kun je de actie controleren.

Get-VM | Get-View | %{Write-Host $_.Name $_.Config.Tools.syncTimeWithHost}

Script: Powershell script for changing the AD Home Dir and Drive


image 

Stel je bent midden in een migratie naar een andere fileserver of naar bijvoorbeeld een NetApp filer. Daarnaast wil je ook alle Home directory’s migreren. Dit houdt in dat je ook de Active Directory moet aanpassen.  Dit kun je op verschillende manieren doen. Ik heb gekozen om eens te kijken naar de Quest ActiveRoles addin voor Powershell en dat bleek behoorlijk krachtig te zij, zoals je kunt zien in het onderstaande scriptje:

image

Voordat je dit script kunt gebruiken heb je een PC nodig die lid is van het domain, PowerShell en de Quest AD cmd-lets geïnstalleerd heeft. Daarna kun je het script als volgt uitvoeren:

PS Scriptdir> .\Change_Home_Dir_drive.ps1

image

Daarna kun je in de Active Directory nakijken of het script succesvol heeft gelopen.

image

Tool: PrimalForms


image 

Met PrimalForms kun je eenvoudig een Form maken die je kunt gebruiken met je PowerShell script. PrimalForms werkt met PowerShell v1 en de huidige V2 CTP. Tijdens de installatie worden er ook een aantal sample forms geïnstalleerd. Deze forms zijn gemaakt door Jeffery Hicks.

Hier nog even een quote van de downloadpagina:

PrimalForms is a free GUI builder tool for PowerShell users. It edits and stores Windows Forms in a native XML format and generates PowerShell code on demand. Sample forms included.

Je kunt de tool hier downloaden: http://www.primaltools.com/freetools

image

Bron: http://blog.sapien.com/index.php/2008/11/03/free-primalforms-tool-for-powershell-released/

Script: Set-VMVideoAccLevel


Hugo Peeters van www.peetersonline.nl heeft een powershell script gemaakt voor het instellen van de video hardware acceleration level. Zoals je weet staat dit bij een standaard installatie van Windows Server 2003 (en ook andere versies) standaard op none.

image

Via het script van Hugo kun je in een keer deze setting aanpassen op alle VM’s (Windows 2003 servers en deze moeten wel aan staan). Zie de onderstaande quote van Hugo:

I have created a simple, fire-and-forget script that sets the Hardware Video Acceleration Level for all your (Windows Server 2003 and Powered On) VM’s to Full. This way you can always enjoy smooth mouse movements when working in the console!

Het script kun je hier downloaden: http://www.peetersonline.nl/index.php/vmware/setting-video-hardware-acceleration-level/

VI Toolkit: Set VMware Tools Upgrade Policy


 

Tijdens het googlen naar informatie over de VI Toolkit kwam ik het onderstaande script tegen.

Connect-VIServer <VirtualCenterServer>
#  NAME: set-VMautoUpdate.ps1
#  AUTHOR: angoletti1 / LucD
#  SOURCE:  http://communities.vmware.com/message/937094#937094

[Reflection.Assembly]::LoadWithPartialName("vmware.vim")

$vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
$vmConfigSpec.Tools = New-Object VMware.Vim.ToolsConfigInfo
$vmConfigSpec.Tools.ToolsUpgradePolicy = "UpgradeAtPowerCycle"

Get-VM | % { (Get-View $_.ID).ReconfigVM($vmConfigSpec)}

 

Via dit script kun je in één keer alle VM’s aanpassen.

Bron: http://www.blkmtn.org/the-value-of-digging-through-an-SDK

VI Toolkit: Create an Overview Of All cmdlets


 

Het volgende commando genereerd een html file met daarina een overzicht van alle VI cmdlets.

Get-Command -PSSnapin VMware.VimAutomation.Core | ConvertTo-Html –Property CommandType,Name,Definition -title "VIToolkit" > D:\vitoolkit_cmdlets.html

Voer deze code wel  uit als een oneliner!

 

Het volgende overzicht wordt gegenereerd:

image

Nu heb je in een oogopslag een overzicht van alle cmdlets.