Adding a datastore to an esx host isn’t to time consuming or difficult but to save a little bit of time and avoid the repetitiveness, here’s a script to do it for you. This script will mount an NFS datastore. Of course, you can change the protocol by using a different switch like -cifs.
$esx = (Get-Content esx_servers.txt) $Host_Name = (Read-Host "Enter the server (ex:storage-server-san:") $Path = (Read-Host "Enter the path (ex:/vol/vol/ds_name):") $Name = (Read-Host "Enter the name of the datastore:") foreach($server in $esx){ Get-VMHost $server | New-Datastore -Nfs -NfsHost $Host_Name -Path $Path -Name $Name }
The script asks for the following information:
1. Storage server
2. Path to the storage location
3. Datastore Name
Note: The script will only mount the SAME datastore on each esx server you specify. You’ll need to create a text file called “esx_servers.txt” in the same location as the script and enter the esx server names in it.
UPDATE: I’ve had to modify this script to add multiple datastores to multiple esx hosts. Here is the updated code:
$servers = @() $paths = @() $datastores = @() $answer = "y" while($answer -eq "y"){ $servers += Read-Host "Enter the server (ex:usadc-nas05a-san)" $paths += Read-Host "Enter the path (ex:/vol/vol/ds_name)" $datastores += Read-Host "Datastore name ?" $answer = Read-Host "Enter another NFS mount?"} $Error.Clear() Get-Content servers.txt | %{ $esx = Get-VMHost -Name $_ $countNFS = $servers.Count if($countNFS -ne 0){ 0..($countNFS - 1) | %{ $esx | New-Datastore -Nfs -NfsHost $servers[$_] -Path $paths[$_] -Name $datastores[$_] | Out-Null if($Error.count -gt 0){ $Error | out-file ('c:\powershell scripts\logs\' + $esx + '.txt') -append $Error.Clear() } } } }
Wonderful web site. Lots of useful info here. I am sending it to a few friends ans also sharing in delicious. And obviously, thank you for your effort!
You could simplify by just doing using “get-cluster | get-vmhost” – unless there is some reason you are doing it the other way.