QuickSDN.psm1
$Global:uri = "https://" + (Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\NcHostAgent\Parameters\').PeerCertificateCName $signature=@' [DllImport("hcihealthutils.dll", CharSet = CharSet.Unicode, SetLastError = false)] public static extern int HciModifyFault(string entityType, string entityKey, string entityDescription, string entityLocation, string entityUniqueKey, uint action, string faultType, uint urgency, string title, string description, string actions, uint flag); [DllImport("hcihealthutils.dll", CharSet = CharSet.Unicode, SetLastError = false)] public static extern int HciModifyRelationship(string entityType, string entityKey, string entityDescription, string entityLocation, string entityUniqueKey, uint action, string parentEntityType, string parenetEntityKey, string parentEntityDescription, string parentEntityLocation, string parentEntityUniqueKey, string groupKey, uint urgency, uint relationshipType, uint flag); '@ if (-not ("Microsoft.NetworkHud.FunctionalTests.Module.HciHealthUtils" -as [type])) { Add-Type -MemberDefinition $signature -Name "HciHealthUtils" -Namespace "Microsoft.NetworkHud.FunctionalTests.Module" | Out-Null } function Clear-SDNHealthFault { param([string] $faultUniqueID) if([string]::IsNullOrEmpty($faultUniqueID)) { throw "Invalid faultID" } #[Microsoft.NetworkHud.FunctionalTests.Module.HciHealthUtils]::HciModifyFault("EntityType", $faultUniqueID, "E Desc", "E Loc", $faultUniqueID, 1, 1, 2, "TF Title", "TF Desc", "TFA", 0) $fault = Get-HealthFault | ? { $_.FaultId -eq $faultUniqueID } $subsystemId = (get-storagesubsystem Cluster*).UniqueId [Microsoft.NetworkHud.FunctionalTests.Module.HciHealthUtils]::HciModifyFault( ` $fault.FaultingObjectType, ` $fault.FaultingObjectUniqueId, ` "", ` $fault.FaultingObjectUniqueId, ` $fault.FaultingObjectUniqueId, ` 1, ` $fault.FaultType, ` 2, ` "", ` "", ` "", ` 0) } function Get-SDNHealthFault { param([string] $FaultingObjectUniqueId) return Get-HealthFault | ? { $_.FaultingObjectUniqueId -eq $FaultingObjectUniqueId } } function Show-SDNHealthFaults { Get-HealthFault | select FaultId, FaultingObjectUniqueId, Reason } function Test-SdnUri { if([string]::IsNullOrEmpty($uri)) { throw "Bad Nc uri" } } function Get-SDNLogs { param( [string] $NCName = $null, [int] $Tail = 100 ) if([string]::IsNullOrEmpty($NCName)) { $hh = (get-clusternode).Name $vm = Get-VM -Name *NC* -ComputerName $hh | select -First 1 $NCName = $vm.Name Write-Host "Found NC VM Name : $NCName" } Invoke-Command -ComputerName $NCName -ScriptBlock { cd C:\Windows\tracing\SDNDiagnostics\Logs $latest = dir *.etl | Sort-Object -Descending | select -First 1 $latestText = $latest.Name.Split(".")[0]+".txt" del $latestText -Force -ErrorAction SilentlyContinue netsh trace convert $latest.Name Get-Content $latestText -Tail $using:Tail } } function Show-ConfigState { param($objs) foreach($obj in $objs) { $configState = $obj.Properties.ConfigurationState if($configState -eq $null -or $configState.DetailedInfo -eq $null -or $configState.DetailedInfo.Count -eq 0) { continue } foreach($di in $configState.DetailedInfo) { Write-Host "$($obj.ResourceRef) Source:$($di.Source) ($($di.Code)): $($di.Message.SubString(0, [System.Math]::min($di.Message.Length, 20)))" } } } function Get-ClusterHealthWMI { $cl = gwmi -Namespace "root/MSCLUSTER" -Class "MSCluster_ClusterHealthService" $clusterName = (get-cluster).Name $fWmi = $cl.GetFault($clusterName,"Microsoft.Health.EntityType.Cluster") $fWmi.Faults } function Get-SDNServerHealthSummary { param( [switch] $Poll ) Test-SdnUri $uri = $Global:uri do { # Collecting all the objects $restObjs = @() $restObjs += (Get-NetworkControllerServer -ConnectionUri $uri) $restObjs += (Get-NetworkControllerLogicalNetwork -ConnectionUri $uri) $restObjs += (Get-NetworkControllerVirtualNetwork -ConnectionUri $uri) $restObjs += (Get-NetworkControllerLoadBalancerMux -ConnectionUri $uri) $restObjs += (Get-NetworkControllerGateway -ConnectionUri $uri) $restObjs += (Get-NetworkControllerVirtualGateway -ConnectionUri $uri) $restObjs += (Get-NetworkControllerGatewayPool -ConnectionUri $uri) $restObjs += (Get-NetworkControllerVirtualServer -ConnectionUri $uri) $restObjs += (Get-NetworkControllerLoadBalancer -ConnectionUri $uri) $restObjs += (Get-NetworkControllerNetworkInterface -ConnectionUri $uri) Show-ConfigState -objs $restObjs if (-not $Poll) { return } # Write the polling message below the data Write-Host "`n(polling in 10 seconds.. press ctrl+c to break)" -NoNewline Start-Sleep -Seconds 10 } until ($false) } Export-ModuleMember -Function Get-SDNLogs Export-ModuleMember -Function Get-SDNServerHealthSummary Export-ModuleMember -Function Clear-SDNHealthFault Export-ModuleMember -Function Show-SDNHealthFaults Export-ModuleMember -Function Get-SDNHealthFault Export-ModuleMember -Function Get-ClusterHealthWMI |