dackey
July 17, 2018, 2:06am
1
Hello all,
I comme back here because apparently there isnt native cmdlet to have this informations in a Cluster FailOver :
Name of the disk like “Cluster disk 1”
Size of the disk “Cluster disk 1”
After some research on the net i’ve found a script who give us this information, but i dont understand all.
And in the script he have “SQL Server”.
It’s possible for me to have this informations without sql server ?
script :
$clusters = Get-Cluster -Domain $env:USERDNSDOMAIN
foreach ($cluster in $clusters.name) {
$sqlgroups = (Get-ClusterResource -cluster $cluster | Where-Object ResourceType -eq 'SQL Server')
if ($sqlgroups -ne $null) {
foreach ($sqlgroup in $sqlgroups) {
$sqlserver = Get-WmiObject -namespace root\MSCluster MSCluster_Resource -filter "Name='$sqlgroup'" -computername $cluster -Authentication PacketPrivacy
$resourcegroup = $sqlserver.GetRelated() | Where Type -eq 'Physical Disk'
foreach ($resource in $resourcegroup) {
$disks = $resource.GetRelated("MSCluster_Disk")
foreach ($disk in $disks) {
$diskpart = $disk.GetRelated("MSCluster_DiskPartition")
$clusterdisk = $resource.name
$diskstate = $resource.state
$diskdrive = $diskpart.path
$disklabel = $diskpart.volumelabel
$disksize = $diskpart.totalsize
$diskfree = $diskpart.freespace
switch ($diskstate) {
-1 { $diskstate = "Unknown"}
0 { $diskstate = "Inherited"}
1 { $diskstate = "Initializing"}
2 { $diskstate = "Online"}
3 { $diskstate = "Offline"}
4 { $diskstate = "Failed"}
128 { $diskstate = "Pending"}
129 { $diskstate = "Online Pending"}
130 { $diskstate = "Offline Pending"}
}
Write-Host "Cluster: $cluster"
Write-Host "SQL Resource: $sqlgroup"
Write-Host "Cluster disk: $clusterdisk"
Write-Host "Disk State: $diskstate"
Write-Host "Disk Drive: $diskdrive"
Write-Host "Disk Label: $disklabel"
Write-Host "Disk Size: $disksize"
Write-Host "Disk Free: $diskfree`n"
}
}
}
}
}
I just need of this two informations :
Write-Host "Cluster disk: $clusterdisk"
Write-Host "Disk Size: $disksize"
Thx for replay
dackey
July 17, 2018, 3:38am
2
I’ ve try some things :
First try :
$x = (Get-WmiObject -namespace root\MSCluster MSCluster_Resource -computername "HyperV1" -Authentication PacketPrivacy)
$y = $x.GetRelated() | Where Type -eq 'Physical Disk'
The result is empty…!?
Without the "$x = ",The result of the first command is that :
Get-WmiObject -namespace root\MSCluster MSCluster_Resource -computername "HyperV1" -Authentication PacketPrivacy
__GENUS : 2
__CLASS : MSCluster_Resource
__SUPERCLASS : MSCluster_LogicalElement
__DYNASTY : CIM_ManagedSystemElement
__RELPATH : MSCluster_Resource.Name="Adresse IP du cluster"
__PROPERTY_COUNT : 42
__DERIVATION : {MSCluster_LogicalElement, CIM_LogicalElement, CIM_ManagedSystemElement}
__SERVER : HYPERV1
__NAMESPACE : root\MSCluster
__PATH : \\HYPERV1\root\MSCluster:MSCluster_Resource.Name="Adresse IP du cluster"
Caption :
Characteristics : 0
CoreResource : False
CryptoCheckpoints : {}
DeadlockTimeout : 300000
DeleteRequiresAllNodes : False
Description :
EmbeddedFailureAction : 2
Flags : 0
Id : 65b5d21b-c218-4de3-bd13-daf3cdb750b9
InstallDate :
IsAlivePollInterval : 4294967295
IsClusterSharedVolume : False
LastOperationStatusCode : 0
LocalQuorumCapable : False
LooksAlivePollInterval : 4294967295
MonitorProcessId : 4060
Name : Adresse IP du cluster
OwnerGroup : Groupe du cluster
OwnerNode : HyperV2
PendingTimeout : 180000
PersistentState : True
PrivateProperties : System.Management.ManagementBaseObject
QuorumCapable : False
RegistryCheckpoints : {}
RequiredDependencyClasses :
RequiredDependencyTypes : {}
ResourceClass : 2
ResourceSpecificData1 : 0
ResourceSpecificData2 : 0
ResourceSpecificStatus :
RestartAction : 2
RestartDelay : 500
RestartPeriod : 900000
RestartThreshold : 1
RetryPeriodOnFailure : 3600000
SeparateMonitor : False
State : 2
Status :
StatusInformation : 0
Subclass :
Type : IP Address
PSComputerName : HYPERV1
__GENUS : 2
__CLASS : MSCluster_Resource
__SUPERCLASS : MSCluster_LogicalElement
__DYNASTY : CIM_ManagedSystemElement
__RELPATH : MSCluster_Resource.Name="Disque de cluster 1"
__PROPERTY_COUNT : 42
__DERIVATION : {MSCluster_LogicalElement, CIM_LogicalElement, CIM_ManagedSystemElement}
__SERVER : HYPERV1
__NAMESPACE : root\MSCluster
__PATH : \\HYPERV1\root\MSCluster:MSCluster_Resource.Name="Disque de cluster 1"
Caption :
Characteristics : 2081
CoreResource : False
CryptoCheckpoints : {}
DeadlockTimeout : 300000
DeleteRequiresAllNodes : False
Description :
EmbeddedFailureAction : 2
Flags : 0
Id : e4117ba0-9734-48d9-b31f-7227158c73e7
InstallDate :
IsAlivePollInterval : 4294967295
IsClusterSharedVolume : True
LastOperationStatusCode : 0
LocalQuorumCapable : False
LooksAlivePollInterval : 4294967295
MonitorProcessId : 4284
Name : Disque de cluster 1
OwnerGroup : 5c574f3a-2ce0-472a-bbec-49e8cadd507c
OwnerNode : HyperV1
PendingTimeout : 180000
PersistentState : True
PrivateProperties : System.Management.ManagementBaseObject
QuorumCapable : True
RegistryCheckpoints : {}
RequiredDependencyClasses :
RequiredDependencyTypes : {}
ResourceClass : 1
ResourceSpecificData1 : 0
ResourceSpecificData2 : 0
ResourceSpecificStatus :
RestartAction : 2
RestartDelay : 500
RestartPeriod : 600000
RestartThreshold : 1
RetryPeriodOnFailure : 900000
SeparateMonitor : False
State : 2
Status :
StatusInformation : 0
Subclass :
Type : Physical Disk
PSComputerName : HYPERV1
__GENUS : 2
__CLASS : MSCluster_Resource
__SUPERCLASS : MSCluster_LogicalElement
__DYNASTY : CIM_ManagedSystemElement
__RELPATH : MSCluster_Resource.Name="Disque de cluster 2"
__PROPERTY_COUNT : 42
__DERIVATION : {MSCluster_LogicalElement, CIM_LogicalElement, CIM_ManagedSystemElement}
__SERVER : HYPERV1
__NAMESPACE : root\MSCluster
__PATH : \\HYPERV1\root\MSCluster:MSCluster_Resource.Name="Disque de cluster 2"
Caption :
Characteristics : 2081
CoreResource : False
CryptoCheckpoints : {}
DeadlockTimeout : 300000
DeleteRequiresAllNodes : False
Description :
EmbeddedFailureAction : 2
Flags : 0
Id : 8311eba2-400e-45a2-bc81-6d1ad12cd00e
InstallDate :
IsAlivePollInterval : 4294967295
IsClusterSharedVolume : True
LastOperationStatusCode : 0
LocalQuorumCapable : False
LooksAlivePollInterval : 4294967295
MonitorProcessId : 4608
Name : Disque de cluster 2
OwnerGroup : 1d1e36de-bcec-4f92-b3cf-97272060cae1
OwnerNode : HyperV2
PendingTimeout : 180000
PersistentState : True
PrivateProperties : System.Management.ManagementBaseObject
QuorumCapable : True
RegistryCheckpoints : {}
RequiredDependencyClasses :
RequiredDependencyTypes : {}
ResourceClass : 1
ResourceSpecificData1 : 0
ResourceSpecificData2 : 0
ResourceSpecificStatus :
RestartAction : 2
RestartDelay : 500
RestartPeriod : 600000
RestartThreshold : 1
RetryPeriodOnFailure : 900000
SeparateMonitor : False
State : 2
Status :
StatusInformation : 0
Subclass :
Type : Physical Disk
PSComputerName : HYPERV1
And when i try this command
$y = $x.GetRelated().Type , i have just this result
PS C:\Windows\system32> $y
Network Name
IP Address
I miss a lot of things , i think…
thx for you’re help
Hi,
Check out the failoverclusters module, where there is a cmdlet Get-ClusterSharedVolyme that will help you. Pipe it to get-member so you will see what property and methods you can use.
FailOverClusters
/Peter
dackey
August 22, 2018, 7:36am
4
Hello,
Thx , for you’r replay.
I had resolve my problem.
As you say i check out the command of a cluster.
the resolution was this part of the script :
$Path = "C:\DeployNano\Csv"
$Export = Get-ClusterAvailableDisk | Export-Csv ("$Path\AvailableDisks.Csv") -Delimiter "," -Encoding UTF8
$Disks = Import-Csv ("$Path\AvailableDisks.Csv")
$length = $Disks.Count
#Ajouts des disques disponibles
Get-ClusterAvailableDisk | Add-ClusterDisk
$ExportCDcsv = Get-ClusterResource | Export-Csv ("$Path\ClusterDisks.csv") -Delimiter "," -Encoding UTF8
$CDCsv = Import-Csv ("$Path\ClusterDisks.csv")
$length = $CDCsv.Count
$i = 0
#Renommage des disques du cluster avant traitements des disques
While ($i -le $length) {
If ($CDCsv.name[$i] -eq "Disque de cluster 1") {
$DiskName1 = $CDCsv.Name[$i]
$BDNum = $i
Write-Host "$DiskName1"
(Get-ClusterResource $DiskName1).Name = "Disque du cluster 1"
}
ElseIf ($CDCsv.Name[$i] -eq "Disque de cluster 2") {
$DiskName2 = $CDCsv.Name[$i]
$SDNum = $i
Write-Host "$DiskName2"
(Get-ClusterResource $DiskName2).Name = "Disque du cluster 2"
}
$i++
}
#Test taille disque le plus grand et le plus petit
$i = 0
$BDNum = 0
$SDNum = 0
While ($i -lt $Disks.Count) {
If ($Disks.Size[$i] -ge $Disks.Size[$BDNUm]) {
$BDNum = $i
$BDNum
}
ElseIf ($Disks.Size[$i] -le $Disks.Size[$SDNum]) {
$SDNum = $i
$SDNum
}
$i++
}
#Renommage des disques en fonction des disques trouvés
$DName1 = $Disks.Name[$BDNum]
$DName2 = $Disks.Name[$SDNum]
(Get-ClusterResource $DName1).Name = "WebSite-Storage"
(Get-ClusterResource $DName2).Name = "Quorum"
#Declaration des variables pour la configuration du Quorum
$ExportCDcsv = Get-ClusterResource | Export-Csv ("$Path\ClusterDisks2.csv") -Delimiter "," -Encoding UTF8
$CDCsv = Import-Csv ("$Path\ClusterDisks2.csv")
$i = 0
$length = $CDCsv.count
#Ajout du stockage present en CSV
Get-ClusterResource "WebSite-Storage" | Add-ClusterSharedVolume -WarningAction Ignore
#Configuration du Quorum
Set-ClusterQuorum -DiskWitness Quorum
Now i would like to rename the ClusterNeworkInterface, have you some idea to help me ?
The same process doesn’t work with the Network…
I’ve try this script, but don’t work :
$Getcsv = Get-ClusterNetworkInterface | Export-Csv "$Path\ClusterNetworkInterface.csv" -Delimiter "," -Encoding UTF8
$NetCsv = Import-Csv "$Path\ClusterNetworkInterface.csv"
$i = 0
$length = $NetCsv.count
#Test noms interface & renommage
While ($i -lt $length) {
If ($NetCsv.Name[$i] -like "*TinCi*")
{
Write-Host $NetCsv[$i].Network
Get-ClusterNetworkInterface -Network $NetCsv[$i].Name | %{$_.Network = "TinCi"}
}
ElseIf ($NetCsv.Name[$i] -like "*iSCSI*")
{
Write-Host $NetCsv[$i].Network
Get-ClusterNetworkInterface -Network $NetCsv[$i].Name | %{$_.Network = "iSCSI"}
}
ElseIf ($NetCsv.Name[$i] -like "*HeartBeat*")
{
Write-Host $NetCsv[$i].Network
Get-ClusterNetworkInterface -Network $NetCsv[$i].Name | %{$_.Network = "HeartBeat"}
}
$i++
}
Message d’erreur :
Réseau du cluster 1
Get-ClusterNetworkInterface : Impossible de récupérer le réseau « HyperV1 - Tinci » du cluster « CFO ».
Une erreur s'est produite lors de l'ouverture du réseau « HyperV1 - Tinci ».
Les données fournies ont un type erroné
Au caractère Ligne:11 : 8
+ Get-ClusterNetworkInterface -Network $csv[$i].Name | %{$_.Name ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-ClusterNetworkInterface], ClusterCmdletException
+ FullyQualifiedErrorId : Get-ClusterNetworkInterface,Microsoft.FailoverClusters.PowerShell.GetNetworkInterfaceCommand
Réseau du cluster 1
Get-ClusterNetworkInterface : Impossible de récupérer le réseau « HyperV2 - Tinci » du cluster « CFO ».
Une erreur s'est produite lors de l'ouverture du réseau « HyperV2 - Tinci ».
Les données fournies ont un type erroné
Au caractère Ligne:11 : 8
+ Get-ClusterNetworkInterface -Network $csv[$i].Name | %{$_.Name ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-ClusterNetworkInterface], ClusterCmdletException
+ FullyQualifiedErrorId : Get-ClusterNetworkInterface,Microsoft.FailoverClusters.PowerShell.GetNetworkInterfaceCommand
Thx for Replay
dackey
August 22, 2018, 10:14am
5
I’have try with this command :
$Path = "C:\DeployNano\Csv"
$Getcsv = Get-ClusterNetworkInterface | Export-Csv "$Path\ClusterNetworkInterface.csv" -Delimiter "," -Encoding UTF8
$NetCsv = Import-Csv "$Path\ClusterNetworkInterface.csv"
Get-ClusterNetworkInterface -Name $NetCsv.Name[0] | %{$_.Network = "Tinci"}
I 'have the error message :
« Network » est une propriété en lecture seule.
Au caractère Ligne:1 : 55
+ ... usterNetworkInterface -Name $NetCsv.Name[0] | %{$_.Network = "Tinci"}
+ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation : (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyAssignmentException
We can’t change the name of this item ?
Sry i haven’t think there is some variable in my code.