Upload files to "VMware/vCheck/vSphere"
This commit is contained in:
parent
1500208a1b
commit
7fd1ad4e4e
122
VMware/vCheck/vSphere/90 Cluster LUN Path.ps1
Normal file
122
VMware/vCheck/vSphere/90 Cluster LUN Path.ps1
Normal file
|
|
@ -0,0 +1,122 @@
|
||||||
|
function Get-LUNPathState {
|
||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
No parameters needed. Just execute the script.
|
||||||
|
.DESCRIPTION
|
||||||
|
This script outputs the number of paths to each LUN.
|
||||||
|
|
||||||
|
.EXAMPLE
|
||||||
|
Get-LUNPathState -VMhosts 'esx01'
|
||||||
|
Lists all LUN pats for ESXi host esx01.
|
||||||
|
.EXAMPLE
|
||||||
|
$esxihosts = Get-VMHost
|
||||||
|
Get-LUNPathState -VMHosts $esxihosts
|
||||||
|
Lists all LUN paths for all ESXi hosts in $esxihosts
|
||||||
|
|
||||||
|
.NOTES
|
||||||
|
Author: Patrick Terlisten, patrick@blazilla.de, Twitter @PTerlisten
|
||||||
|
|
||||||
|
This script is provided "AS IS" with no warranty expressed or implied. Run at your own risk.
|
||||||
|
This script is based on: http://www.vmwareadmins.com/list-the-path-and-path-state-for-every-vsphere-datastore-using-powercli/
|
||||||
|
This work is licensed under a Creative Commons Attribution NonCommercial ShareAlike 4.0
|
||||||
|
International License (https://creativecommons.org/licenses/by-nc-sa/4.0/).
|
||||||
|
|
||||||
|
.LINK
|
||||||
|
http://www.vcloudnine.de
|
||||||
|
#>
|
||||||
|
|
||||||
|
[CmdletBinding()]
|
||||||
|
Param(
|
||||||
|
[Parameter(Mandatory = $true, Position = 0, HelpMessage = 'ESXi Host', ValueFromPipeline = $true)]
|
||||||
|
[Alias('Name')]
|
||||||
|
[ValidateNotNullorEmpty()]
|
||||||
|
$VMhosts
|
||||||
|
)
|
||||||
|
|
||||||
|
# Create empty hash table
|
||||||
|
$ReportLunPathState = @()
|
||||||
|
|
||||||
|
# Initialize counter variable
|
||||||
|
$i = 0
|
||||||
|
|
||||||
|
try {
|
||||||
|
ForEach ($VMHost in $VMhosts) {
|
||||||
|
# Increment counter variable
|
||||||
|
$i++
|
||||||
|
|
||||||
|
# Get all datastores from the current host
|
||||||
|
$VMHostDatastores = Get-Datastore
|
||||||
|
|
||||||
|
# Get all disks devices from the current host
|
||||||
|
$VMHostScsiLuns = $VMHost | Get-ScsiLun -LunType disk
|
||||||
|
|
||||||
|
|
||||||
|
ForEach ($VMHostScsiLun in $VMHostScsiLuns) {
|
||||||
|
# Get LUN paths for each disk device
|
||||||
|
$VMHostScsiLunPaths = $VMHostScsiLun | Get-ScsiLunPath
|
||||||
|
|
||||||
|
# Count paths per disk device
|
||||||
|
$ReportLunPathState += ($VMHostScsiLunPaths | Measure-Object) | Select-Object `
|
||||||
|
-Property @{N = 'Hostname'; E = { $VMHost.Name } }, `
|
||||||
|
@{N = 'Datastore'; E = { $VMHostDatastores | Where-Object -FilterScript { ($_.extensiondata.info.vmfs.extent | ForEach-Object -Process { $_.diskname }) -contains $VMHostScsiLun.CanonicalName } | Select-Object -ExpandProperty name } }, `
|
||||||
|
@{N = 'CanonicalName'; E = { $VMHostScsiLun.CanonicalName } }, `
|
||||||
|
@{N = 'Paths'; E = { $_.Count } }, `
|
||||||
|
@{N = 'Path State'; E = { $VMHostScsiLunPaths.State } }, `
|
||||||
|
@{N = 'IsLocal'; E = { $VMHostScsiLun.IsLocal } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
catch {
|
||||||
|
"Error was $_"
|
||||||
|
$line = $_.InvocationInfo.ScriptLineNumber
|
||||||
|
"Error was in Line $line"
|
||||||
|
}
|
||||||
|
|
||||||
|
finally {
|
||||||
|
$ReportLunPathState
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$output = @()
|
||||||
|
|
||||||
|
foreach ($cluster in Get-Cluster) {
|
||||||
|
$luns = @() #var to collect lun info from hosts
|
||||||
|
foreach ($esxi in $cluster | get-vmhost) {
|
||||||
|
foreach ($lun in ($esxi | Get-LUNPathState)) {
|
||||||
|
$result = "" | Select Hostname, Datastore, Paths, PathState, IsLocal
|
||||||
|
$result.Hostname = $lun.Hostname
|
||||||
|
$result.Datastore = $lun.Datastore
|
||||||
|
$result.Paths = $lun.Paths
|
||||||
|
$result.PathState = $lun.PathState
|
||||||
|
$result.IsLocal = $lun.IsLocal
|
||||||
|
$luns += $result
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#check each ds and check if paths are consistent
|
||||||
|
foreach($ds in ($luns | Group-Object -Property Datastore)){
|
||||||
|
$pathconsistency = $luns | Where-Object{$_.Datastore -eq $ds.Name} | Group-Object -Property Paths | Measure-Object #path consistents check
|
||||||
|
$pathinfo = $luns | Where-Object{$_.Datastore -eq $ds.Name} | Group-Object -Property Paths
|
||||||
|
|
||||||
|
if($pathconsistency.Count -gt 1 ){
|
||||||
|
foreach($esxi in $pathinfo.group){
|
||||||
|
$result = "" | Select Cluster, Hostname, Datastore, Paths
|
||||||
|
$result.Cluster = (Get-VMhost -Name $esxi.Hostname).Parent
|
||||||
|
$result.Hostname = $esxi.Hostname
|
||||||
|
$result.Datastore = $esxi.Datastore
|
||||||
|
$result.Paths = $esxi.Paths
|
||||||
|
$output += $result
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$output
|
||||||
|
|
||||||
|
$Title = "90 Cluster same LUN same Path-Count"
|
||||||
|
$Header = "90 Cluster same LUN same Path-Count"
|
||||||
|
$Comments = "LUNs have no consistent Path Count"
|
||||||
|
$Display = "Table"
|
||||||
|
$Author = "evoila GmbH"
|
||||||
|
$PluginVersion = 1.0
|
||||||
|
$PluginCategory = "vSphere"
|
||||||
Loading…
Reference in a new issue