QuickSDN.psm1
function Initialize-QuickSDN { $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-QuickSdnHealthFault { 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 Get-QuickSdnHealthFaults { Get-HealthFault | select FaultId, FaultingObjectUniqueId, Reason } function Test-SdnUri { if([string]::IsNullOrEmpty($uri)) { throw "Bad Nc uri" } } function Get-QuickSdnLogs { 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-QuickSdnClusterHealthWmi { $cl = gwmi -Namespace "root/MSCLUSTER" -Class "MSCluster_ClusterHealthService" $clusterName = (get-cluster).Name $fWmi = $cl.GetFault($clusterName,"Microsoft.Health.EntityType.Cluster") $fWmi.Faults } function Get-QuickSdnHealthSummary { 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-QuickSdnLogs Export-ModuleMember -Function Get-QuickSdnHealthSummary Export-ModuleMember -Function Get-QuickSdnHealthFaults Export-ModuleMember -Function Get-QuickSdnClusterHealthWmi Export-ModuleMember -Function Clear-QuickSdnHealthFault |