summaryrefslogtreecommitdiff
path: root/content/posts/get-type-definition-in-powershell.md
diff options
context:
space:
mode:
Diffstat (limited to 'content/posts/get-type-definition-in-powershell.md')
-rw-r--r--content/posts/get-type-definition-in-powershell.md215
1 files changed, 215 insertions, 0 deletions
diff --git a/content/posts/get-type-definition-in-powershell.md b/content/posts/get-type-definition-in-powershell.md
new file mode 100644
index 0000000..7348075
--- /dev/null
+++ b/content/posts/get-type-definition-in-powershell.md
@@ -0,0 +1,215 @@
+---
+title: 'Get type definition in Powershell'
+description: "Today I went back to some Powershell scripting with the Az module and it frustrated me that I wasn't easily able to know what properties `Get-AzADGroup` (or any of the other Az cmdlets) returned to me without actually invoking the cmdlet."
+tags: ['powershell']
+date: 2021-08-27T09:43:57+02:00
+draft: false
+---
+
+Today I went back to some Powershell scripting with the Az module and it frustrated me that I wasn't easily able to know what properties `Get-AzADGroup` (or any of the other Az cmdlets) returned to me without actually invoking the cmdlet. E.g I dont want to invoke `New-AzADGroup` just to be able to see what properties it will give me so I can use that in my script. Previously I've relied on IntelliSens in my editor, but it often fails, so I sought out to find a more manual solution (who would have thought..).
+
+<!--more-->
+
+Some modules provide information in their help about what type a particular cmdlet returns. We can use this to get information about what that type contains.
+
+If we look at the `Get-AzADGroup` cmdlet as an example. When we run `Get-Help Get-AzADGroup -Full` we can see under the "OUTPUT" section that it returns a `Microsoft.Azure.Commands.ActiveDirectory.PSADGroup` type. To inspect that type we can do the following.
+
+```powershell
+PS > Get-Help Get-AzADGroup -Full
+...
+
+OUTPUTS
+ Microsoft.Azure.Commands.ActiveDirectory.PSADGroup
+
+...
+PS > [Microsoft.Azure.Commands.ActiveDirectory.PSADGroup]::new() | gm
+
+ TypeName: Microsoft.Azure.Commands.ActiveDirectory.PSADGroup
+
+Name MemberType Definition
+---- ---------- ----------
+Equals Method bool Equals(System.Object obj)
+GetHashCode Method int GetHashCode()
+GetType Method type GetType()
+ToString Method string ToString()
+AdditionalProperties Property System.Collections.Generic.IDictionary[string,System.Object] AdditionalProperties {get;set;}
+DeletionTimestamp Property System.Nullable[datetime] DeletionTimestamp {get;set;}
+Description Property string Description {get;set;}
+DisplayName Property string DisplayName {get;set;}
+Id Property string Id {get;set;}
+MailEnabled Property System.Nullable[bool] MailEnabled {get;set;}
+MailNickname Property string MailNickname {get;set;}
+ObjectType Property string ObjectType {get;}
+SecurityEnabled Property System.Nullable[bool] SecurityEnabled {get;set;}
+Type Property string Type {get;set;}
+
+```
+
+Here we can see what methods and properties we will get if we run `Get-AzADGroup`.
+
+Another solution is to call either the `GetMembers()`, `GetProperties()` or `GetMethods()` on the type which will give you detailed information about each member. It's a little verbose to be frank.. So I prefer the first method.
+
+```powershell
+PS > [Microsoft.Azure.Commands.ActiveDirectory.PSADGroup].GetProperties()
+
+MemberType : Property
+Name : SecurityEnabled
+DeclaringType : Microsoft.Azure.Commands.ActiveDirectory.PSADGroup
+ReflectedType : Microsoft.Azure.Commands.ActiveDirectory.PSADGroup
+MetadataToken : 385876641
+Module : Microsoft.Azure.PowerShell.Cmdlets.Resources.dll
+IsCollectible : False
+PropertyType : System.Nullable`1[System.Boolean]
+Attributes : None
+CanRead : True
+CanWrite : True
+IsSpecialName : False
+GetMethod : System.Nullable`1[System.Boolean] get_SecurityEnabled()
+SetMethod : Void set_SecurityEnabled(System.Nullable`1[System.Boolean])
+CustomAttributes : {}
+
+MemberType : Property
+Name : MailEnabled
+DeclaringType : Microsoft.Azure.Commands.ActiveDirectory.PSADGroup
+ReflectedType : Microsoft.Azure.Commands.ActiveDirectory.PSADGroup
+MetadataToken : 385876642
+Module : Microsoft.Azure.PowerShell.Cmdlets.Resources.dll
+IsCollectible : False
+PropertyType : System.Nullable`1[System.Boolean]
+Attributes : None
+CanRead : True
+CanWrite : True
+IsSpecialName : False
+GetMethod : System.Nullable`1[System.Boolean] get_MailEnabled()
+SetMethod : Void set_MailEnabled(System.Nullable`1[System.Boolean])
+CustomAttributes : {}
+
+MemberType : Property
+Name : MailNickname
+DeclaringType : Microsoft.Azure.Commands.ActiveDirectory.PSADGroup
+ReflectedType : Microsoft.Azure.Commands.ActiveDirectory.PSADGroup
+MetadataToken : 385876643
+Module : Microsoft.Azure.PowerShell.Cmdlets.Resources.dll
+IsCollectible : False
+PropertyType : System.String
+Attributes : None
+CanRead : True
+CanWrite : True
+IsSpecialName : False
+GetMethod : System.String get_MailNickname()
+SetMethod : Void set_MailNickname(System.String)
+CustomAttributes : {}
+
+MemberType : Property
+Name : ObjectType
+DeclaringType : Microsoft.Azure.Commands.ActiveDirectory.PSADGroup
+ReflectedType : Microsoft.Azure.Commands.ActiveDirectory.PSADGroup
+MetadataToken : 385876644
+Module : Microsoft.Azure.PowerShell.Cmdlets.Resources.dll
+IsCollectible : False
+PropertyType : System.String
+Attributes : None
+CanRead : True
+CanWrite : False
+IsSpecialName : False
+GetMethod : System.String get_ObjectType()
+SetMethod :
+CustomAttributes : {}
+
+MemberType : Property
+Name : Description
+DeclaringType : Microsoft.Azure.Commands.ActiveDirectory.PSADGroup
+ReflectedType : Microsoft.Azure.Commands.ActiveDirectory.PSADGroup
+MetadataToken : 385876645
+Module : Microsoft.Azure.PowerShell.Cmdlets.Resources.dll
+IsCollectible : False
+PropertyType : System.String
+Attributes : None
+CanRead : True
+CanWrite : True
+IsSpecialName : False
+GetMethod : System.String get_Description()
+SetMethod : Void set_Description(System.String)
+CustomAttributes : {}
+
+MemberType : Property
+Name : DisplayName
+DeclaringType : Microsoft.Azure.Commands.ActiveDirectory.PSADObject
+ReflectedType : Microsoft.Azure.Commands.ActiveDirectory.PSADGroup
+MetadataToken : 385876650
+Module : Microsoft.Azure.PowerShell.Cmdlets.Resources.dll
+IsCollectible : False
+PropertyType : System.String
+Attributes : None
+CanRead : True
+CanWrite : True
+IsSpecialName : False
+GetMethod : System.String get_DisplayName()
+SetMethod : Void set_DisplayName(System.String)
+CustomAttributes : {}
+
+MemberType : Property
+Name : Id
+DeclaringType : Microsoft.Azure.Commands.ActiveDirectory.PSADObject
+ReflectedType : Microsoft.Azure.Commands.ActiveDirectory.PSADGroup
+MetadataToken : 385876651
+Module : Microsoft.Azure.PowerShell.Cmdlets.Resources.dll
+IsCollectible : False
+PropertyType : System.String
+Attributes : None
+CanRead : True
+CanWrite : True
+IsSpecialName : False
+GetMethod : System.String get_Id()
+SetMethod : Void set_Id(System.String)
+CustomAttributes : {}
+
+MemberType : Property
+Name : Type
+DeclaringType : Microsoft.Azure.Commands.ActiveDirectory.PSADObject
+ReflectedType : Microsoft.Azure.Commands.ActiveDirectory.PSADGroup
+MetadataToken : 385876652
+Module : Microsoft.Azure.PowerShell.Cmdlets.Resources.dll
+IsCollectible : False
+PropertyType : System.String
+Attributes : None
+CanRead : True
+CanWrite : True
+IsSpecialName : False
+GetMethod : System.String get_Type()
+SetMethod : Void set_Type(System.String)
+CustomAttributes : {}
+
+MemberType : Property
+Name : DeletionTimestamp
+DeclaringType : Microsoft.Azure.Commands.ActiveDirectory.PSADObject
+ReflectedType : Microsoft.Azure.Commands.ActiveDirectory.PSADGroup
+MetadataToken : 385876653
+Module : Microsoft.Azure.PowerShell.Cmdlets.Resources.dll
+IsCollectible : False
+PropertyType : System.Nullable`1[System.DateTime]
+Attributes : None
+CanRead : True
+CanWrite : True
+IsSpecialName : False
+GetMethod : System.Nullable`1[System.DateTime] get_DeletionTimestamp()
+SetMethod : Void set_DeletionTimestamp(System.Nullable`1[System.DateTime])
+CustomAttributes : {}
+
+MemberType : Property
+Name : AdditionalProperties
+DeclaringType : Microsoft.Azure.Commands.ActiveDirectory.PSADObject
+ReflectedType : Microsoft.Azure.Commands.ActiveDirectory.PSADGroup
+MetadataToken : 385876654
+Module : Microsoft.Azure.PowerShell.Cmdlets.Resources.dll
+IsCollectible : False
+PropertyType : System.Collections.Generic.IDictionary`2[System.String,System.Object]
+Attributes : None
+CanRead : True
+CanWrite : True
+IsSpecialName : False
+GetMethod : System.Collections.Generic.IDictionary`2[System.String,System.Object] get_AdditionalProperties()
+SetMethod : Void set_AdditionalProperties(System.Collections.Generic.IDictionary`2[System.String,System.Object])
+CustomAttributes : {}
+
+```