{"id":16221,"date":"2010-12-14T00:01:00","date_gmt":"2010-12-14T00:01:00","guid":{"rendered":"https:\/\/blogs.technet.microsoft.com\/heyscriptingguy\/2010\/12\/14\/dynamic-method-invocation-in-powershell\/"},"modified":"2010-12-14T00:01:00","modified_gmt":"2010-12-14T00:01:00","slug":"dynamic-method-invocation-in-powershell","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/scripting\/dynamic-method-invocation-in-powershell\/","title":{"rendered":"Dynamic Method Invocation in PowerShell"},"content":{"rendered":"<p class=\"MsoNormal\"><span style=\"font-size: 10pt\">&nbsp;<\/span><span style=\"font-size: 10pt\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><b><span style=\"font-size: 10pt\">Summary:<\/span><\/b><span style=\"font-size: 10pt\"> Learn how to create a Windows PowerShell function to implement dynamic method invocation.<\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\"><span style=\"font-size: 10pt\"><span style=\"font-size: 10pt\"><span style=\"font-size: 10pt\"><span style=\"font-size: 10pt\"><span style=\"font-size: 10pt\"><span style=\"font-size: 10pt\"><span style=\"font-size: 10pt\"><img decoding=\"async\" height=\"34\" width=\"34\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/q-for-powertip.jpg\" align=\"left\" alt=\"Hey, Scripting Guy! Question\" border=\"0\" title=\"Hey, Scripting Guy! Question\" \/><\/span><\/span><\/span><\/span><\/span><\/span><\/span>Hey, Scripting Guy! What can you tell me about dynamic method invocation?<\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\">&#8212; PG<\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\"><span style=\"font-size: 10pt\"><span style=\"font-size: 10pt\"><span style=\"font-size: 10pt\"><span style=\"font-size: 10pt\"><span style=\"font-size: 10pt\"><span style=\"font-size: 10pt\"><span style=\"font-size: 10pt\"><img decoding=\"async\" height=\"34\" width=\"34\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/a-for-powertip.jpg\" align=\"left\" alt=\"Hey, Scripting Guy! Answer\" border=\"0\" title=\"Hey, Scripting Guy! Answer\" \/><\/span><\/span><\/span><\/span><\/span><\/span><\/span>Hello PG, Microsoft Scripting Guy Ed Wilson here. Today is day 2 of guest blogger week; we have Trevor Sullivan to tell us about dynamic method invocation.<\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\">Trevor Sullivan is a seasoned IT professional, experienced in large-scale systems management, with about 5 years of scripting experience. He picked up PowerShell in late 2007, and has been a fan ever since. At any point in time, Trevor can be found researching new technologies, writing code, or cooking up a new blog post at <a href=\"http:\/\/trevorsullivan.net\/\"><span style=\"color: #0000ff\">http:\/\/trevorsullivan.net<\/span><\/a>. He is also very active in public social networks, such as Twitter (@pcgeek86) and various discussion forums and mailing lists. Here&rsquo;s Trevor!<\/span><\/p>\n<p class=\"MsoNormal\"><b><span style=\"font-size: 10pt\"><\/span><\/b><\/p>\n<h2 class=\"MsoNormal\" style=\"margin: 0in 0in 8pt\">Background<\/h2>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\">There are situations where invoking a method on an object dynamically is desirable. Wait just a minute. What is dynamic method invocation, and why am I wasting my time reading this? Well, basically it means that you have an object, any ol&rsquo; object, and you want to invoke a method on it but you do not know what the method name is. In fact, you do not even know what the object is! It is a concept that is also known as late-binding.<\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\">Don Jones, a PowerShell MVP and trainer, recently posed some feedback on Microsoft Connect, suggesting that having an <b>Invoke-Method<\/b> cmdlet would be helpful in future versions of PowerShell. Microsoft has already included an <b>Invoke-WmiMethod<\/b> cmdlet but this does not work for arbitrary .NET objects.<\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\">In Don&rsquo;s example on Connect, he uses the illustration that currently, in order to call a method on an array of objects, you must iterate over them using a <b>foreach<\/b> loop. He explains that this confuses new students to PowerShell, and could be resolved using a cmdlet that takes an array of objects as its input, and dynamically invokes a method on them.<\/span><\/p>\n<p class=\"MsoNormal\"><b><span style=\"font-size: 10pt\"><\/span><\/b><\/p>\n<h2 class=\"MsoNormal\" style=\"margin: 0in 0in 8pt\">Solution<\/h2>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\">I took this opportunity to develop a script cmdlet that more or less implements the previously mentioned functionality. A little-known feature of PowerShell is that you can invoke methods without hard-coding the method name. This also applies to an object&rsquo;s properties. In fact, I realized after I had written this blog post that Jeffrey Snover wrote about this topic a few years back.<\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\">The script cmdlet I wrote lets you input a few things:<\/span><\/p>\n<ul>\n<li>\n<div class=\"MsoNormal\"><span style=\"font-family: Symbol;font-size: 10pt\"><span><span style=\"font: 7pt 'Times New Roman'\">&nbsp;<\/span><\/span><\/span><span style=\"font-size: 10pt\">An object, or array of objects<\/span><\/div>\n<\/li>\n<li>\n<div class=\"MsoNormal\"><span style=\"font-size: 10pt\">A method name to call<\/span><\/div>\n<\/li>\n<li>\n<div class=\"MsoNormal\"><span style=\"font-size: 10pt\">Method parameters<\/span><\/div>\n<\/li>\n<li>\n<div class=\"MsoNormal\"><span style=\"font-size: 10pt\">Specify whether the method is static (optional, default is $<i>false<\/i>)<\/span><\/div>\n<\/li>\n<\/ul>\n<p class=\"MsoNormal\"><b><span style=\"font-size: 10pt\"><\/span><\/b><\/p>\n<h2 class=\"MsoNormal\" style=\"margin: 0in 0in 8pt\"><\/h2>\n<h2 class=\"MsoNormal\" style=\"margin: 0in 0in 8pt\">Stepping Through the Code<\/h2>\n<p class=\"MsoNormal\"><b><span style=\"font-size: 10pt\"><\/span><\/b><\/p>\n<h3 class=\"MsoNormal\" style=\"margin: 0in 0in 8pt\">Declaring the Invoke-Method Function<\/h3>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\">First we start off by defining a function named <b>Invoke-Method<\/b>, and declaring the <b>CmdletBinding<\/b> attribute which turns the script cmdlet into an advanced function. Then, we declare the parameters that we will pass into the function. We have to pass an object (or an array of objects) into the function which has a method we<span>&nbsp; <\/span>call. Therefore, we declare a parameter named $<i>InputObject<\/i>. We also have to specify the method name that we want to invoke on the objects we pass to the function. For this, we declare a parameter named $<i>MethodName<\/i>. Finally, if the method requires that we pass parameters into it, we need some way to pass parameters into <b>Invoke-Method<\/b>. For this purpose, we declare a $<i>MethodParameters<\/i> function parameter which is an array of all the items to be passed into the method call during invocation.<\/span><\/p>\n<p class=\"MsoNormal\"><b><span style=\"font-size: 10pt\">Note<\/span><\/b><span style=\"font-size: 10pt\">: For the input objects, we use <b>ValueFromPipeline<\/b> to allow the ability to pipe objects into the function. With this option defined, you have the option of either using the <i>&ndash;InputObject<\/i> parameter, or pipeline input. It is your choice.<\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">[CmdletBinding()]<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">&nbsp;<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>param<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>(<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>[Parameter(ValueFromPipeline = $true, Position = 0)]<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>[Object[]]<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$InputObject,<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>[Parameter(Mandatory = $true, HelpMessage = &#8220;Please enter the name of the method you would like to invoke.&#8221;)]<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>[string]<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$MethodName,<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>[String[]]<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$MethodParameters = $null,<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>[switch]<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$Static = $false<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\">Next, we declare the Process <b>{ &hellip; }<\/b> block of the <b>Invoke-Method<\/b> function. This is where methods will be called on the object passed into the function. We first start with a check to see whether any parameters were passed in, and make sure that the objects that were passed in are not null. If method parameters have been specified in a call to <b>Invoke-Method<\/b>, then we have to make sure that we call the method with the parameters. We also have to check whether the <b>&ndash;Static<\/b> switch was specified, because if it was, then we must call the method using the <\/span><span style=\"font-size: x-small\"><b>(::)<\/b><span style=\"font-size: 10pt\"> operator, instead of the <\/span><b>(.)<\/b><\/span><span style=\"font-size: 10pt\"> operator. As you will see below, the &ldquo;cool&rdquo; part is that we are calling a method on the object by using the $<i>MethodName<\/i> parameter, instead of hard-coding the method name into our script.<\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">if ($MethodParameters -and $InputObject)<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>if ($Static)<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$InputObject | <b>%<\/b> { $_::$MethodName.Invoke($MethodParameters) }<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>}<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>else<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$InputObject | <b>%<\/b> { $_.$MethodName.Invoke($MethodParameters) }<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>}<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>}<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\">Similar to the above code, we must do the same thing to call a method without any parameters. In our else <b>{ &hellip; }<\/b> statement, we use similar code to check for the existence of input objects, and check for the <b>&ndash;Static<\/b> switch. The dynamic method calls are the same, by using the $<i>MethodName<\/i> parameter to specify the name of the method we want to call.<\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">elseif ($InputObject)<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>if ($Static)<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$InputObject | <b>%<\/b> { $_::$MethodName.Invoke() }<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>}<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>else<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$InputObject | <b>%<\/b> { $_.$MethodName.Invoke() }<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>}<\/span><\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>}<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\">That sums up the function definition. Now we can look at some examples of how to use it!<\/span><\/p>\n<p class=\"MsoNormal\"><b><span style=\"font-size: 10pt\"><\/span><\/b><\/p>\n<h3><\/h3>\n<h3>Usage Examples<\/h3>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\">Here is an example that invokes the WMI <b>Terminate()<\/b> method on all instances of notepad.exe. This example uses PowerShell pipeline input to pipe the <span style=\"text-decoration: underline\">output<\/span> from <b>Get-WmiObject<\/b> <span style=\"text-decoration: underline\">into<\/span> the <b>Invoke-Method<\/b> function. Of course, PowerShell already has an <b>Invoke-WmiMethod<\/b> function so this is functionality that is provided out of the box. The next example however, is different.<\/span><\/p>\n<p class=\"CodeBlock\"><span style=\"font-family: Lucida Sans Typewriter\"><b><span style=\"font-size: 10pt\">Get-WmiObject<\/span><\/b><span style=\"font-size: 10pt\"> Win32_Process <i>-Filter<\/i> &#8220;Name = &#8216;notepad.exe'&#8221; | Invoke-Method <i>-MethodName<\/i> Terminate <i>-MethodParameters<\/i> $null<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\">In the following figure, we call a static method on the .NET <\/span><b><span style=\"font-size: x-small\">[Microsoft.Win32.Registry]<\/span><\/b><span style=\"font-size: 10pt\"> type. This object has a <b>SetValue()<\/b> static method which sets a registry value in a given registry hive, subkey, name, and value. The first line constructs an array of parameters that we will pass to the method, and the second line invokes it while passing in the $<i>MethodParams<\/i> array. Because we are calling a static method, we specify the &ndash;Static switch parameter as defined on the <b>Invoke-Method<\/b> function definition.<\/span><\/p>\n<p class=\"Num-Caption\"><span style=\"font-size: x-small\"><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/6644.HSG-12-14-10-01.jpg\" border=\"0\" \/><\/span><span style=\"font-size: x-small\">&nbsp;<\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"># EXAMPLE: Set a registry value using the SetValue() static method on [Microsoft.Win32.Registry]<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"># NOTE: SetValue() has two overloads, so this is a good test to determine which overload the CLR selects<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">$MethodParams = @(&#8220;HKEY_LOCAL_MACHINE\\Software&#8221;, &#8220;PoshTest&#8221;, &#8220;Trevor&#8221;)<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">Invoke-Method -InputObject ([Microsoft.Win32.Registry]) -MethodName SetValue -MethodParameters $MethodParams &ndash;Static<\/span><\/span><\/p>\n<p class=\"CodeBlockScreenedHead\" style=\"padding-left: 30px\"><strong><span style=\"font-size: x-small\">&nbsp;<\/span><\/strong><\/p>\n<p class=\"CodeBlockScreenedHead\" style=\"padding-left: 30px\"><strong><span style=\"font-size: x-small\">Invoke-Method function<\/span><\/strong><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">Clear-Host<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"># $MethodName = &#8216;Terminate&#8217;<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"># $MethodParams = $null<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"># Get-WmiObject Win32_Process -Filter &#8220;Name = &#8216;notepad.exe'&#8221; | % { $_.$MethodName.Invoke() }<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">&nbsp;<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">function Invoke-Method<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">{<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&lt;#<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>.Synopsis<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Invokes a method on objects.<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>.Description<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Invokes a method on objects.<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>.Parameter InputObject<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>The objects you would like to invoke a method on.<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>.Parameter MethodName<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>The method you would like to invoke on the objects passed into the function.<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>.Parameter MethodParameters<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>An array of parameters to pass to the method during invocation.<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>.Parameter Static<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Tell the function if you are calling a static method on the objects you pass to it. Default is $false.<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>.Inputs<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>An array of objects you would like to invoke a method on.<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>.Outputs<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>The results of the method invocation(s).<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>.Link<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>http:\/\/trevorsullivan.net<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>.Link<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>http:\/\/powershell.artofshell.com<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>#&gt;<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>[CmdletBinding()]<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">&nbsp;<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>param<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>(<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>[Parameter(ValueFromPipeline = $true, Position = 0)]<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>[Object[]]<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$InputObject,<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>[Parameter(Mandatory = $true, HelpMessage = &#8220;Please enter the name of the method you would like to invoke.&#8221;)]<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>[string]<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$MethodName,<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>[String[]]<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$MethodParameters = $null,<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>[switch]<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$Static = $false<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>)<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">&nbsp;<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Process<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>if ($MethodParameters -and $InputObject)<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>if ($Static)<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$InputObject | <b>%<\/b> { $_::$MethodName.Invoke($MethodParameters) }<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>}<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>else<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$InputObject | <b>%<\/b> { $_.$MethodName.Invoke($MethodParameters) }<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>}<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>}<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>elseif ($InputObject)<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>if ($Static)<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$InputObject | <b>%<\/b> { $_::$MethodName.Invoke() }<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>}<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>else<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>$InputObject | <b>%<\/b> { $_.$MethodName.Invoke() }<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>}<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>}<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>}<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">}<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">&nbsp;<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"># NOTE: If you want to use this as a module, uncomment this line.<\/span><\/span><\/p>\n<p class=\"CodeBlockScreened\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"># Export-ModuleMember -Function Invoke-Method -ErrorAction SilentlyContinue<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\">Below are some more examples of using the <b>Invoke-Method<\/b> function.<\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">################ WMI EXAMPLES WITHOUT PARAMETERS ################<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">&nbsp;<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"># EXAMPLE: Start notepad.exe, then Terminate() it using Invoke-Method script cmdlet. Use -InputObject # parameter, not pipeline input.<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">notepad.exe<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">Invoke-Method <i>-InputObject<\/i> (<b>Get-WmiObject<\/b> Win32_Process <i>-Filter<\/i> &#8220;Name = &#8216;notepad.exe'&#8221;) <i>-MethodName<\/i> Terminate<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"># EXAMPLE: Start notepad.exe, then Terminate() it using Invoke-Method script cmdlet. Use pipeline # input, not -InputObject parameter.<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">notepad.exe<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-family: Lucida Sans Typewriter\"><b><span style=\"font-size: 10pt\">Get-WmiObject<\/span><\/b><span style=\"font-size: 10pt\"> Win32_Process <i>-Filter<\/i> &#8220;Name = &#8216;notepad.exe'&#8221; | Invoke-Method <i>-MethodName<\/i> Terminate <i>-MethodParameters<\/i> $null<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">&nbsp;<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">################ WMI EXAMPLES WITH PARAMETERS ################<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">&nbsp;<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"># EXAMPLE: Create process using Invoke-Method and Win32_Process.Create()<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">Invoke-Method <i>-InputObject<\/i> ([wmiclass]&#8221;win32_process&#8221;) -MethodName Create -MethodParameters notepad.exe<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">&nbsp;<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"># EXAMPLE: Add a mount point for an optical drive (change this if your optical drive letter isn&#8217;t E:<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"># NOTE: Win32_Volume REQUIRES that the target path exist prior to executing the method, otherwise you # will get a non-zero return value.<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">Invoke-Method <i>-InputObject<\/i> (<b>Get-WmiObject<\/b> <i>-Class<\/i> Win32_Volume <i>-Filter<\/i> &#8220;DriveLetter = &#8216;E:'&#8221;) <i>-MethodName<\/i> AddMountPoint <i>-MethodParameters<\/i> &#8216;c:\\OpticalDrive&#8217;<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">&nbsp;<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"># EXAMPLE: Delete the Win32_MountPoint instance created by previous call to AddMountPoint<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">Invoke-Method <i>-InputObject<\/i> (<b>Get-WmiObject<\/b> Win32_MountPoint | ? { $_.Directory -like &#8216;*optical*&#8217; }) -MethodName Delete<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">&nbsp;<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">################ EXAMPLES OF OTHER .NET OBJECTS ################<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">&nbsp;<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"># EXAMPLE: Get the current process using the static method GetCurrentProcess() on # [System.Diagnostics.Process]<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">Invoke-Method <i>-InputObject<\/i> ([Diagnostics.Process]) -MethodName GetCurrentProcess -Static<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">&nbsp;<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"># EXAMPLE: Create new process &#8216;notepad.exe&#8217; using [System.Diagnostics.Process]<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">Invoke-Method <i>-InputObject<\/i> ([Diagnostics.Process]) -MethodName <b>Start<\/b> -MethodParameters notepad.exe -Static<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">&nbsp;<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"># EXAMPLE: Kill all processes named &#8216;notepad&#8217; via [System.Diagnostics.Process]<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">Invoke-Method <i>-InputObject<\/i> ([Diagnostics.Process]::GetProcessesByName(&#8220;notepad&#8221;)) -MethodName <b>Kill<\/b><\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">&nbsp;<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"># EXAMPLE: Kill all processes named &#8216;notepad&#8217; via [System.Diagnostics.Process]. Same as previous <\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"># example, but using pipeline input.<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">[Diagnostics.Process]::GetProcessesByName(&#8220;notepad&#8221;) | Invoke-Method <i>-MethodName<\/i> Kill<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">&nbsp;<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"># EXAMPLE: Set a registry value using the SetValue() static method on [Microsoft.Win32.Registry]<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"># NOTE: SetValue() has two overloads, so this is a good test to determine which overload the CLR<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\"># selects<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">$MethodParams = @(&#8220;HKEY_LOCAL_MACHINE\\Software&#8221;, &#8220;PoshTest&#8221;, &#8220;Trevor&#8221;)<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">Invoke-Method <i>-InputObject<\/i> ([Microsoft.Win32.Registry]) -MethodName SetValue -MethodParameters $MethodParams -Static<\/span><\/span><\/p>\n<p class=\"CodeBlock\" style=\"padding-left: 30px\"><span style=\"font-size: 10pt\"><span style=\"font-family: Lucida Sans Typewriter\">&nbsp;<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\">PG, that is all there is to using dynamic method execution. Thank you, Trevor. Guest blogger week will continue tomorrow when Rhys CampbelI will talk about mapping SQL Server objects via Windows PowerShell. <\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\">I invite you to follow me on <a target=\"_blank\" href=\"http:\/\/bit.ly\/scriptingguystwitter\"><span style=\"color: #0000ff\">Twitter<\/span><\/a> or <a href=\"http:\/\/bit.ly\/scriptingguysfacebook\"><span style=\"color: #0000ff\">Facebook<\/span><\/a>. If you have any questions, send email to me at <a target=\"_blank\" href=\"mailto:scripter@microsoft.com\"><span style=\"color: #0000ff\">scripter@microsoft.com<\/span><\/a> or post them on the <a target=\"_blank\" href=\"http:\/\/bit.ly\/scriptingforum\"><span style=\"color: #0000ff\">Official Scripting Guys Forum<\/span><\/a>. See you tomorrow. Until then, peace.<\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: 10pt\">&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><b><span style=\"font-size: 10pt\">Ed Wilson, Microsoft Scripting Guy<\/span><\/b><span style=\"font-size: 10pt\">&nbsp;<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp;&nbsp; Summary: Learn how to create a Windows PowerShell function to implement dynamic method invocation. &nbsp; Hey, Scripting Guy! What can you tell me about dynamic method invocation? &#8212; PG &nbsp; Hello PG, Microsoft Scripting Guy Ed Wilson here. Today is day 2 of guest blogger week; we have Trevor Sullivan to tell us about [&hellip;]<\/p>\n","protected":false},"author":595,"featured_media":87096,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[56,149,3,4,211,45],"class_list":["post-16221","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-scripting","tag-guest-blogger","tag-pipeline","tag-scripting-guy","tag-scripting-techniques","tag-trevor-sullivan","tag-windows-powershell"],"acf":[],"blog_post_summary":"<p>&nbsp;&nbsp; Summary: Learn how to create a Windows PowerShell function to implement dynamic method invocation. &nbsp; Hey, Scripting Guy! What can you tell me about dynamic method invocation? &#8212; PG &nbsp; Hello PG, Microsoft Scripting Guy Ed Wilson here. Today is day 2 of guest blogger week; we have Trevor Sullivan to tell us about [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/16221","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/users\/595"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/comments?post=16221"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/16221\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/media\/87096"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/media?parent=16221"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/categories?post=16221"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/tags?post=16221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}