{"id":8721,"date":"2007-01-23T14:01:00","date_gmt":"2007-01-23T14:01:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/powershell\/2007\/01\/23\/how-to-create-enum-in-powershell\/"},"modified":"2019-02-18T13:20:51","modified_gmt":"2019-02-18T20:20:51","slug":"how-to-create-enum-in-powershell","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/powershell\/how-to-create-enum-in-powershell\/","title":{"rendered":"How to create enum in PowerShell?"},"content":{"rendered":"<p>[Updated to comply with the naming guidelines (create=&gt;new)]<\/p>\n<p>Dynamic assembly emitting techniques can be used to create new classes&nbsp;or data types in PowerShell. Trick is that right permission needs to be set so that data types created in dynamic assembly can be used subsequently. <\/p>\n<p>Following is&nbsp;an example&nbsp;for creating a new enum type and use it in powershell. <\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">PS&gt; cat enum.ps1<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">function New-Enum ([string] $name)<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">{<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">&nbsp;&nbsp;&nbsp; $appdomain = [System.Threading.Thread]::GetDomain()<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">&nbsp;&nbsp;&nbsp; $assembly = new-object System.Reflection.AssemblyName<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">&nbsp;&nbsp;&nbsp; $assembly.Name = &#8220;EmittedEnum&#8221;<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\"><\/font>&nbsp;<\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">$assemblyBuilder = $appdomain.DefineDynamicAssembly($assembly, <\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">[System.Reflection.Emit.AssemblyBuilderAccess]::Save -bor [System.Reflection.Emit.AssemblyBuilderAccess]::Run);<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">&nbsp;&nbsp;&nbsp; $moduleBuilder = $assemblyBuilder.DefineDynamicModule(&#8220;DynamicModule&#8221;, &#8220;DynamicModule.mod&#8221;);<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">&nbsp;&nbsp;&nbsp; $enumBuilder = $moduleBuilder.DefineEnum($name, [System.Reflection.TypeAttributes]::Public, [System.Int32]);<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\"><\/font>&nbsp;<\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">&nbsp;&nbsp;&nbsp; for($i = 0; $i -lt $args.Length; $i++)<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">&nbsp;&nbsp;&nbsp; {<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $null = $enumBuilder.DefineLiteral($args[$i], $i);<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">&nbsp;&nbsp;&nbsp; }<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><font face=\"Calibri\" size=\"3\"><\/font>&nbsp;<\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">&nbsp;&nbsp;&nbsp; $enumBuilder.CreateType() &gt; $null;<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">}<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">PS&gt; . &#8216;C:\\Documents and Settings\\gxie\\enum.ps1&#8217;<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">PS &gt; New-Enum my.color blue red yellow<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">PS &gt; [my.color]::blue<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">blue<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">PS &gt; [my.color]::red<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">red<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">PS &gt; [my.color]::yellow<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">yellow<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">PS &gt; [my.color]::black<\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">PS &gt;<\/font><\/span>&nbsp;<\/p>\n<p>&#8211; George from PowerShell Team<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[Updated to comply with the naming guidelines (create=&gt;new)] Dynamic assembly emitting techniques can be used to create new classes&nbsp;or data types in PowerShell. Trick is that right permission needs to be set so that data types created in dynamic assembly can be used subsequently. Following is&nbsp;an example&nbsp;for creating a new enum type and use it [&hellip;]<\/p>\n","protected":false},"author":600,"featured_media":13641,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-8721","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-powershell"],"acf":[],"blog_post_summary":"<p>[Updated to comply with the naming guidelines (create=&gt;new)] Dynamic assembly emitting techniques can be used to create new classes&nbsp;or data types in PowerShell. Trick is that right permission needs to be set so that data types created in dynamic assembly can be used subsequently. Following is&nbsp;an example&nbsp;for creating a new enum type and use it [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/8721","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/users\/600"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/comments?post=8721"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/8721\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/media\/13641"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/media?parent=8721"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/categories?post=8721"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/tags?post=8721"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}