Using 'Get-GPInheritance' Command in Powershell 7

Copper Contributor

Using the 'Get-GPInheritance' command in Powershell 7 returns the GPOLink class rather than the GPO name for each GPO listed in the 'InheritedGpoLinks' property.

 

Get-GPInheritance -Target $ou | Select-ExpandProperty InheritedGpoLinks | FT

 

But the same command outputs the GPO names successfully in Windows PowerShell 5.1. 

How can I get this to work in Powershell 7?

8 Replies

@bobstertech 

mmm.

I am checking the issue and notice that there are a lot of different between running the command on Powershell 5.1 (Infrastructure version) vs Powershell 7

even the object type and the return is different, 

Powershell 5.1, Notice that the name is GPOLink, which seems to be an object holding the value 

 

PS C:\Users\Administrator> ((Get-GPInheritance -Target $ou ).InheritedGpoLinks)[0].gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    GpoLink                                  System.Object

 

 Powershell 7.1, Notice that the Value type is String not GPOLink

 

PS C:\Program Files\PowerShell\7> ((Get-GPInheritance -Target $ou ).InheritedGpoLinks)[0].gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String                                   System.Object

 

 

Even when you run Get-GPInheritance -Target $ou 

Powershell 5.1: will return the GPNmae

Powershell 7.1: will return Microsoft.GroupPolicy.GpoLink

I will do more checks on this, this is maybe because the GroupPolicy module was written and tested in PS5.1 but not 7

 

@farismalaeb 

Interesting. Thanks for looking into this.

@bobstertech 

 

Any progress on this? It's been 2 years and this issue still persists in PowerShell 7.

 

Kind regards
Henrik André Olsen

I also just came across this. Does anyone even know whether this is intended behavior or a bug?

@Henrik_Andre_Olsen 

 

I'm not a habitual PowerShell (as distinct from Windows PowerShell) user, but working with the Get-GPInheritance commandlet in this thread:

 

  1. I can replicate the listed issue when using:
    Import-Module -Name GroupPolicy;
  2. The commandlet returns the expected result when having used:
    Import-Module -Name GroupPolicy -SkipEditionCheck

 

It's worth noting that - at least under my now out-of-date PowerShell 7.2.6 - it provides a warning message upon loading this module that it's using the compatibility process described in the documentation:

 

 

This may or may not having been around back when this post was created - I have no idea (as I don't use PowerShell.)

 

I should add that this is assuming you're on Windows (I'm not sure if the GroupPolicy module exists for other platforms), and I fully recognise that testing this one specific scenario is a very long way from being comprehensive.

 

That disclaimer out of the way, when running the same type check against InheritedGpoLinks (having used -SkipEditionCheck) - in line with the previous posts, it confirms the module is running in-process, meaning serialisation and de-serialisation are no longer an issue.

 

LainRobertson_0-1692405835359.png

 

 

Cheers,

Lain

Yes - it's either that, or run your entire PowerShell script in version 5.1 (Windows Powershell).
Thank you for mentioning the PowerShell compatibility mode :)
Yes, thanks for this. In my case it was simple enough to use this to work around the issue:

`Import-Module -Name "GroupPolicy" -Force -SkipEditionCheck`