Ever had a bunch of vmware hosts that you want to add a NFS datastore on? It can be quite time consuming to say the least.
In our environment we have a couple of NFS stores that should be available on all vmware hosts and I really don’t want to browse around all 50 or so hosts and check if they have them and then mount them if they’re not available.

So, of course, I wrote a small powercli script to check if the NFS stores are mounted and then mount them if they’re not mounted:

$vmhosts = Get-View -ViewType HostSystem -Filter @{"Runtime.ConnectionState" = "connected"} -Property name

$progress = 1
$mounts = 1
foreach ($vmhost in $vmhosts) {
   Write-Progress -Activity "Checking $($vmhost.Name)" -PercentComplete ($progress/$vmhosts.count*100)
   if ((Get-Datastore -VMHost $vmhost.name | Where-Object {$_.name -eq "MGMT-ISO"}) -eq $NULL){
       New-Datastore -vmhost $vmhost.name -Name MGMT-ISO -Nfs -NfsHost <nfsHost> -Path /MGMT-ISO
       $mounts++
       }
   if ((Get-Datastore -VMHost $vmhost.name | Where-Object {$_.name -eq "USER-ISO"}) -eq $NULL){
       New-Datastore -vmhost $vmhost.name -Name USER-ISO -Nfs -NfsHost  -Path /USER-ISO
       $mounts++
       }
   $progress++
   }
if ($mounts = "1") {
   Write-Host "All hosts have the NFS stores already mounted" -ForegroundColor green
   } 

While I am pretty comfortable with writing and executing scripts like this on the fly, other people who are not as familiar with powershell might be a bit intimidated by it.
That’s why I like to create functions of them and put them in the powershell profile for all users on our jumpstation (C:WindowsSystem32WindowsPowerShellv1.0profile.ps1).

If I were to create a function out of this script, it would look something like this (very basic):

function Mount-NFSstores {
   $vmhosts = Get-View -ViewType HostSystem -Filter @{"Runtime.ConnectionState" = "connected"} -Property name

   $progress = 1
   $mounts = 1
   foreach ($vmhost in $vmhosts) {
       Write-Progress -Activity "Checking $($vmhost.Name)" -PercentComplete ($progress/$vmhosts.count*100)
       if ((Get-Datastore -VMHost $vmhost.name | Where-Object {$_.name -eq "MGMT-ISO"}) -eq $NULL){
           New-Datastore -vmhost $vmhost.name -Name MGMT-ISO -Nfs -NfsHost 10.64.0.8 -Path /MGMT-ISO
           $mounts++
           }
       if ((Get-Datastore -VMHost $vmhost.name | Where-Object {$_.name -eq "USER-ISO"}) -eq $NULL){
           New-Datastore -vmhost $vmhost.name -Name USER-ISO -Nfs -NfsHost 10.64.0.8 -Path /USER-ISO
           $mounts++
           }
       $progress++
       }
   if ($mounts = "1") {
       Write-Host "All hosts have the NFS stores already mounted" -ForegroundColor green
       }
<#
.Synopsis
 Mounts MGMT-ISO and USER-ISO on vmhosts
.Description
 Checks every vmhost for NFS stores, if MGMT-ISO or USER-ISO isn't mounted, the function will mount it
.Example
 Mount-NFSstores
 Mounts MGMT-ISO and USER-ISO on vmhosts
.Link
 http://cloud.kemta.net
#>
   }