Hey Checkyourlogs fans,

This case occurred today when I was writing a new Hyper-V Reporting Script. The script needed to hunt for all Hyper-V Services in a Domain.

Everything seemed fine until I noticed that a couple of the servers were not picking up in the report.

Let’s start by looking at the query


function Get-HyperVServersInAD {            
[cmdletbinding()]            
param(            
)            
try {            
 Import-Module ActiveDirectory -ErrorAction Stop            
} catch {            
 Write-Warning "Failed to import Active Directory module. Exiting"            
 return            
}            

try {            
 $Hypervs = Get-ADObject -Filter 'ObjectClass -eq "serviceConnectionPoint" -and Name -eq "Microsoft Hyper-V"' -ErrorAction Stop            
} catch {            
 Write-Error "Failed to query active directory. More details : $_"            
}            
foreach($Hyperv in $Hypervs) {            
 $temp = $Hyperv.DistinguishedName.split(",")            
 $HypervDN = $temp[1..$temp.Count] -join ","            
 $Comp = Get-ADComputer -Id $HypervDN -Prop *            
 $OutputObj = New-Object PSObject -Prop (            
 @{            
  HyperVName = $Comp.Name            
  OSVersion = $($comp.operatingSystem)            
 })            
 $OutputObj            
}            
}

I’m merely looking for the Service Connection point via PowerShell.

You can get a copy of the script at https://github.com/dkawula/Operations/blob/master/Hyper-V/Find-HyperVServerFromDomainandVMs-Report.ps1

It is still a work in progress, and I would love feedback.

I did some research on this issue and came across my friend Didier Van Hoye’s blog: https://blog.workinghardinit.work/2017/08/17/missing-hyper-v-service-connection-point-caused-failed-off-host-backup-proxy-jobs/

It described pretty much the exact issue that I was having.

My Computer Objects in Active Directory were also missing as were his.

However, his solution was quite invasive and would have me evicting a node, dis-joining and re-joining the Computer to the domain.

As my environment was already into production, I wanted to try to figure out a softer approach.


(Screenshot Courtesy – Working Hard in IT.)

What I tried was a straightforward fix.

#1 – Opened ADSIedit.msc

#2 – Browsed to the Computer Object

#3 – Right Clicked on the Computer Object and Created a New Service Connection Point

#4 – I found one key attribute ServiceBindingInformation was missing. So, I looked a working copy and cloned the settings with the Computer Name and Listener Port = Value

After this was complete, I tried the script again, and it worked for me.

I hope this saves you some time.

Dave