<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>article Get Datastore Visibility between hosts at the same Cluster on many vCenters in VMware PowerCLI Documents</title>
    <link>https://communities.vmware.com/t5/VMware-PowerCLI-Documents/Get-Datastore-Visibility-between-hosts-at-the-same-Cluster-on/ta-p/2795851</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Here is a script based on the &lt;A href="http://wannemacher.us/?p=445" title="http://wannemacher.us/?p=445"&gt;Validate datastore visibility between hosts | ForwardOrReverse&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;By altering the $VcStringList , you can add yout vcenters and generate a list with the info you need. &lt;img class="lia-deferred-image lia-image-emoji" src="https://communities.vmware.com/html/@BDE1C7A967AC45D8A4A4C2AFE83F7C64/emoticons/1f603.png" alt=":grinning_face_with_big_eyes:" title=":grinning_face_with_big_eyes:" /&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Again: Credits for Eric&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_text_macro jive_macro_code _jivemacro_uid_13952662985449721" jivemacro_uid="_13952662985449721"&gt;
&lt;P&gt;&amp;lt;#&lt;BR /&gt;==================================================================&lt;BR /&gt;Author(s):&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Guilherme Alves Stela &amp;lt;&lt;A href="mailto:guistela@br.ibm.com"&gt;guistela@br.ibm.com&lt;/A&gt;&amp;gt;&lt;/P&gt;
&lt;P&gt;Based on the script "Validate-Datastores" from &lt;A href="http://wannemacher.us/?p=445"&gt;http://wannemacher.us/?p=445&lt;/A&gt;&lt;BR /&gt;Credits for: Eric&lt;/P&gt;
&lt;P&gt;File:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Get-DatastoreVisibility.ps1&lt;BR /&gt;Date:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 19-03-2014&lt;BR /&gt;==================================================================&lt;BR /&gt;Disclaimer: This script is written as best effort and provides no&lt;BR /&gt;warranty expressed or implied. Please contact the author(s) if you&lt;BR /&gt;have questions about this script before running or modifying.&lt;BR /&gt;==================================================================&lt;BR /&gt;#&amp;gt;&lt;BR /&gt;############################################## Adding PowerCLI Snapin&lt;BR /&gt;if(!(get-pssnapin | where {$_.name -eq "vmware.vimautomation.core"})) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try { &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; add-pssnapin VMware.VimAutomation.Core&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } catch {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ErrorMessage = $_.Exception.Message&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "$ErrorMessage"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;BR /&gt;######################################################&lt;/P&gt;
&lt;P&gt;######################################################Set to multiple VC Mode &lt;BR /&gt;try{&lt;BR /&gt;if(((Get-PowerCLIConfiguration -Scope Session).DefaultVIServerMode) -ne "Multiple") {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Set-PowerCLIConfiguration -DefaultVIServerMode Multiple -Scope AllUsers -Confirm:$false&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Set-PowerCLIConfiguration -DefaultVIServerMode Multiple -Scope User -Confirm:$false&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Set-PowerCLIConfiguration -DefaultVIServerMode Multiple -Scope Session -Confirm:$false&lt;BR /&gt;}}catch{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ErrorMessage = $_.Exception.Message&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "$ErrorMessage" &lt;BR /&gt;}&lt;BR /&gt;######################################################&lt;/P&gt;
&lt;P&gt;function Validate-Datastores{&lt;BR /&gt;&amp;lt;#&lt;BR /&gt;.SYNOPSIS&lt;BR /&gt;Check a set of hosts to see if they see the same datastores.&amp;nbsp; This script&lt;BR /&gt;does not filter local datastores.&lt;BR /&gt; &lt;BR /&gt;.PARAMETER clusters&lt;BR /&gt;An array of the hosts you want to check.&lt;BR /&gt; &lt;BR /&gt;.EXAMPLE&lt;BR /&gt;Validate-Datatores (Get-Cluster cluster1 | Get-VMHost)&lt;BR /&gt;#&amp;gt;&lt;BR /&gt;param (&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [VMware.VimAutomation.ViCore.Impl.V1.Inventory.VMHostImpl[]]$vmhosts = $(throw "vmhosts must be specified"),$vcenter,$cluster&lt;BR /&gt;)&lt;BR /&gt;$masterList = @{}&lt;BR /&gt; &lt;BR /&gt;# Use the first host as the reference host&lt;BR /&gt;foreach ($datastore in Get-Datastore -VMHost $vmhosts[0]) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $masterList[$datastore.Name] = "Missing"&lt;BR /&gt;}&lt;BR /&gt;# Check all of the hosts against the master list&lt;BR /&gt;foreach ($vmhost in $vmhosts) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $testList = @{} + $masterList&lt;BR /&gt; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach ($datastore in Get-Datastore -VMHost $vmhost) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $dsName = $datastore.Name&lt;BR /&gt; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # If we have a match change the status&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($testList.ContainsKey($dsName)) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $testList[$dsName] = "OK"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Otherwise we have found a datastore that wasn't on our reference host.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $testList[$dsName] = "Extra"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Output our findings&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach ($dsName in $testList.Keys) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $info = "" | Select-Object vCenter,Cluster,VMHost, Datastore, Status&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $info.vCenter = $vcenter&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $info.Cluster = $cluster&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $info.VMHost = $vmhost.Name&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $info.Datastore = $dsName&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $info.Status = $testList[$dsName]&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $info&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;BR /&gt;}&lt;BR /&gt;############################################## start connectvCenters&lt;BR /&gt;function connectvCenters{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; param($list)&lt;BR /&gt; $arrayConnectedVC =@()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach($itemList in $list){ &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sessionID = $global:defaultviservers | where {$_.Name -eq $itemList} |Select -First 1 -ExpandProperty SessionId&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if($sessionId){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vc = Connect-VIServer -server $itemList -Session $sessionId -wa 0 &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Reconectado ao servidor '$vc'"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $arrayConnectedVC += $vc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }else{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vc = Connect-VIServer -server $itemList -wa 0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Conectado ao servidor '$vc'"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $arrayConnectedVC += $vc&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }catch{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ErrorMessage = $_.Exception.Message&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Não foi possível conectar ao servidor '$vc' `n&amp;nbsp; $ErrorMessage"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $arrayConnectedVC&lt;BR /&gt;}&lt;BR /&gt;############################################## end connectvCenters&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;#get a list of vcenters from file&lt;BR /&gt;try{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #alter here the path of the file you want to use&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $VCStringlist = get-content C:\temp\lista_vcenters.csv -ea stop&lt;BR /&gt;}catch{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ErrorMessage = $_.Exception.Message&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Erro ao obter lista de vCenters do arquivo! `n $ErrorMessage"&lt;BR /&gt;}&lt;BR /&gt;#connect all vcenters in the file&lt;BR /&gt;$conns = connectvCenters $VCStringlist&lt;BR /&gt;Clear&lt;BR /&gt;$outputInfo =@()&lt;BR /&gt;#loop between vcenters &lt;BR /&gt;foreach ($vc in $conns){&lt;BR /&gt;Write-Host "`tGetting Info from $vc"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #loop between clusters&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Get-Cluster -Server $vc |Foreach{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "`t`tGetting Info from $_"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $outputInfo += Validate-Datastores ($_ | Get-vmhost) $vc.Name $_.name&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;BR /&gt;$dataTD = get-date&lt;BR /&gt;$dd = $dataTD.Day&lt;BR /&gt;$mm =$dataTD.Month&lt;BR /&gt;$yy = $dataTD.Year&lt;BR /&gt;$hh = $dataTD.Hour&lt;BR /&gt;$mmm = $dataTD.Minute&lt;BR /&gt;$ss = $dataTD.Second&lt;BR /&gt;$TimeStamp = "$dd-$mm-$yy $hh"+"h"+"$mmm"+"m$ss"+"s" &lt;/P&gt;
&lt;P&gt;$path = "c:\temp\DatastoreVisibility$TimeStamp.csv"&lt;BR /&gt;$outputInfo | export-csv -Path $path -UseCulture -NoTypeInformation&lt;/P&gt;
&lt;P&gt;write-host "Arquivo exportado: $path"&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;

&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 19 Mar 2014 21:51:39 GMT</pubDate>
    <dc:creator>GuilhermeAlves</dc:creator>
    <dc:date>2014-03-19T21:51:39Z</dc:date>
    <item>
      <title>Get Datastore Visibility between hosts at the same Cluster on many vCenters</title>
      <link>https://communities.vmware.com/t5/VMware-PowerCLI-Documents/Get-Datastore-Visibility-between-hosts-at-the-same-Cluster-on/ta-p/2795851</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Here is a script based on the &lt;A href="http://wannemacher.us/?p=445" title="http://wannemacher.us/?p=445"&gt;Validate datastore visibility between hosts | ForwardOrReverse&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;By altering the $VcStringList , you can add yout vcenters and generate a list with the info you need. &lt;img class="lia-deferred-image lia-image-emoji" src="https://communities.vmware.com/html/@BDE1C7A967AC45D8A4A4C2AFE83F7C64/emoticons/1f603.png" alt=":grinning_face_with_big_eyes:" title=":grinning_face_with_big_eyes:" /&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Again: Credits for Eric&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_text_macro jive_macro_code _jivemacro_uid_13952662985449721" jivemacro_uid="_13952662985449721"&gt;
&lt;P&gt;&amp;lt;#&lt;BR /&gt;==================================================================&lt;BR /&gt;Author(s):&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Guilherme Alves Stela &amp;lt;&lt;A href="mailto:guistela@br.ibm.com"&gt;guistela@br.ibm.com&lt;/A&gt;&amp;gt;&lt;/P&gt;
&lt;P&gt;Based on the script "Validate-Datastores" from &lt;A href="http://wannemacher.us/?p=445"&gt;http://wannemacher.us/?p=445&lt;/A&gt;&lt;BR /&gt;Credits for: Eric&lt;/P&gt;
&lt;P&gt;File:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Get-DatastoreVisibility.ps1&lt;BR /&gt;Date:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 19-03-2014&lt;BR /&gt;==================================================================&lt;BR /&gt;Disclaimer: This script is written as best effort and provides no&lt;BR /&gt;warranty expressed or implied. Please contact the author(s) if you&lt;BR /&gt;have questions about this script before running or modifying.&lt;BR /&gt;==================================================================&lt;BR /&gt;#&amp;gt;&lt;BR /&gt;############################################## Adding PowerCLI Snapin&lt;BR /&gt;if(!(get-pssnapin | where {$_.name -eq "vmware.vimautomation.core"})) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try { &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; add-pssnapin VMware.VimAutomation.Core&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } catch {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ErrorMessage = $_.Exception.Message&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "$ErrorMessage"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;BR /&gt;######################################################&lt;/P&gt;
&lt;P&gt;######################################################Set to multiple VC Mode &lt;BR /&gt;try{&lt;BR /&gt;if(((Get-PowerCLIConfiguration -Scope Session).DefaultVIServerMode) -ne "Multiple") {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Set-PowerCLIConfiguration -DefaultVIServerMode Multiple -Scope AllUsers -Confirm:$false&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Set-PowerCLIConfiguration -DefaultVIServerMode Multiple -Scope User -Confirm:$false&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Set-PowerCLIConfiguration -DefaultVIServerMode Multiple -Scope Session -Confirm:$false&lt;BR /&gt;}}catch{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ErrorMessage = $_.Exception.Message&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "$ErrorMessage" &lt;BR /&gt;}&lt;BR /&gt;######################################################&lt;/P&gt;
&lt;P&gt;function Validate-Datastores{&lt;BR /&gt;&amp;lt;#&lt;BR /&gt;.SYNOPSIS&lt;BR /&gt;Check a set of hosts to see if they see the same datastores.&amp;nbsp; This script&lt;BR /&gt;does not filter local datastores.&lt;BR /&gt; &lt;BR /&gt;.PARAMETER clusters&lt;BR /&gt;An array of the hosts you want to check.&lt;BR /&gt; &lt;BR /&gt;.EXAMPLE&lt;BR /&gt;Validate-Datatores (Get-Cluster cluster1 | Get-VMHost)&lt;BR /&gt;#&amp;gt;&lt;BR /&gt;param (&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [VMware.VimAutomation.ViCore.Impl.V1.Inventory.VMHostImpl[]]$vmhosts = $(throw "vmhosts must be specified"),$vcenter,$cluster&lt;BR /&gt;)&lt;BR /&gt;$masterList = @{}&lt;BR /&gt; &lt;BR /&gt;# Use the first host as the reference host&lt;BR /&gt;foreach ($datastore in Get-Datastore -VMHost $vmhosts[0]) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $masterList[$datastore.Name] = "Missing"&lt;BR /&gt;}&lt;BR /&gt;# Check all of the hosts against the master list&lt;BR /&gt;foreach ($vmhost in $vmhosts) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $testList = @{} + $masterList&lt;BR /&gt; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach ($datastore in Get-Datastore -VMHost $vmhost) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $dsName = $datastore.Name&lt;BR /&gt; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # If we have a match change the status&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($testList.ContainsKey($dsName)) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $testList[$dsName] = "OK"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Otherwise we have found a datastore that wasn't on our reference host.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $testList[$dsName] = "Extra"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Output our findings&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach ($dsName in $testList.Keys) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $info = "" | Select-Object vCenter,Cluster,VMHost, Datastore, Status&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $info.vCenter = $vcenter&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $info.Cluster = $cluster&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $info.VMHost = $vmhost.Name&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $info.Datastore = $dsName&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $info.Status = $testList[$dsName]&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $info&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;BR /&gt;}&lt;BR /&gt;############################################## start connectvCenters&lt;BR /&gt;function connectvCenters{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; param($list)&lt;BR /&gt; $arrayConnectedVC =@()&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach($itemList in $list){ &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sessionID = $global:defaultviservers | where {$_.Name -eq $itemList} |Select -First 1 -ExpandProperty SessionId&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if($sessionId){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vc = Connect-VIServer -server $itemList -Session $sessionId -wa 0 &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Reconectado ao servidor '$vc'"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $arrayConnectedVC += $vc&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }else{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vc = Connect-VIServer -server $itemList -wa 0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Conectado ao servidor '$vc'"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $arrayConnectedVC += $vc&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }catch{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ErrorMessage = $_.Exception.Message&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Não foi possível conectar ao servidor '$vc' `n&amp;nbsp; $ErrorMessage"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $arrayConnectedVC&lt;BR /&gt;}&lt;BR /&gt;############################################## end connectvCenters&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;#get a list of vcenters from file&lt;BR /&gt;try{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #alter here the path of the file you want to use&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $VCStringlist = get-content C:\temp\lista_vcenters.csv -ea stop&lt;BR /&gt;}catch{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ErrorMessage = $_.Exception.Message&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Erro ao obter lista de vCenters do arquivo! `n $ErrorMessage"&lt;BR /&gt;}&lt;BR /&gt;#connect all vcenters in the file&lt;BR /&gt;$conns = connectvCenters $VCStringlist&lt;BR /&gt;Clear&lt;BR /&gt;$outputInfo =@()&lt;BR /&gt;#loop between vcenters &lt;BR /&gt;foreach ($vc in $conns){&lt;BR /&gt;Write-Host "`tGetting Info from $vc"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #loop between clusters&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Get-Cluster -Server $vc |Foreach{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "`t`tGetting Info from $_"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $outputInfo += Validate-Datastores ($_ | Get-vmhost) $vc.Name $_.name&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;BR /&gt;$dataTD = get-date&lt;BR /&gt;$dd = $dataTD.Day&lt;BR /&gt;$mm =$dataTD.Month&lt;BR /&gt;$yy = $dataTD.Year&lt;BR /&gt;$hh = $dataTD.Hour&lt;BR /&gt;$mmm = $dataTD.Minute&lt;BR /&gt;$ss = $dataTD.Second&lt;BR /&gt;$TimeStamp = "$dd-$mm-$yy $hh"+"h"+"$mmm"+"m$ss"+"s" &lt;/P&gt;
&lt;P&gt;$path = "c:\temp\DatastoreVisibility$TimeStamp.csv"&lt;BR /&gt;$outputInfo | export-csv -Path $path -UseCulture -NoTypeInformation&lt;/P&gt;
&lt;P&gt;write-host "Arquivo exportado: $path"&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;

&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 19 Mar 2014 21:51:39 GMT</pubDate>
      <guid>https://communities.vmware.com/t5/VMware-PowerCLI-Documents/Get-Datastore-Visibility-between-hosts-at-the-same-Cluster-on/ta-p/2795851</guid>
      <dc:creator>GuilhermeAlves</dc:creator>
      <dc:date>2014-03-19T21:51:39Z</dc:date>
    </item>
  </channel>
</rss>

