<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://powershell.com/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Search results for 'app:weblogs' matching tags 'Get-WMIObject' and '-Whatif'</title><link>http://powershell.com/cs/search/SearchResults.aspx?q=app:weblogs&amp;tag=Get-WMIObject,-Whatif&amp;orTags=0&amp;o=DateDescending</link><description>Search results for 'app:weblogs' matching tags 'Get-WMIObject' and '-Whatif'</description><dc:language>en-US</dc:language><generator>CommunityServer 2008.5 (Build: 30929.2835)</generator><item><title>Add Automatic Confirmation and WhatIf to Your Scripts</title><link>http://powershell.com/cs/blogs/tobias/archive/2010/11/18/add-automatic-confirmation-and-whatif-to-your-scripts.aspx</link><pubDate>Thu, 18 Nov 2010 06:00:00 GMT</pubDate><guid isPermaLink="false">f421715f-7aba-45f0-8a8d-44de5318a3a7:8390</guid><dc:creator>Tobias</dc:creator><description>&lt;p&gt;Recently, a student implemented a function to &lt;strong&gt;stop a service remotely&lt;/strong&gt; via WMI. Once done, she was concerned that someone accidentally stopped a service and wanted to &lt;strong&gt;add&lt;/strong&gt; some sort of &lt;strong&gt;confirmation&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;Fortunately, she did not really have to implement confirmation herself. PowerShell can do that for you. Here is how.&lt;/p&gt;
&lt;h3&gt;First: Start (and stop) services remotely&lt;/h3&gt;
&lt;p&gt;Before we look at how automatic confirmation works, let&amp;#39;s first look at the original challenge: how would you start or stop a service remotely? &lt;strong&gt;Start-Service&lt;/strong&gt; and &lt;strong&gt;Stop-Service&lt;/strong&gt; cmdlets unfortunately do not implement a &lt;strong&gt;-ComputerName&lt;/strong&gt; parameter and only work locally.&lt;/p&gt;
&lt;p&gt;WMI works locally and remotely. To access a remote service, use &lt;strong&gt;Get-WMIObject&lt;/strong&gt; and the &lt;strong&gt;Win32_Service&lt;/strong&gt; class. Here is how you can access the &lt;strong&gt;Spooler&lt;/strong&gt; service on a remote system:&lt;/p&gt;
&lt;div class="pscode"&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$service&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Get-WMIObject&lt;/span&gt;&lt;/span&gt; Win32_Service &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-computername&lt;/span&gt;&lt;/span&gt; server1 &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;filter&lt;/span&gt;&lt;/span&gt; &lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;#39;name=&amp;quot;Spooler&amp;quot;&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;If you need to authenticate as a different user, feel free to add the &lt;strong&gt;-Credential&lt;/strong&gt; parameter.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;$service&lt;/strong&gt; object has a number of method that you can use to start or stop a service:&lt;br /&gt;&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$service&lt;/span&gt;&lt;/span&gt; | &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Get-Member&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-member&lt;/span&gt;&lt;/span&gt; Method&lt;/p&gt;
&lt;p&gt;To stop the spooler service on the remote system, this is how you&amp;#39;d do it:&lt;/p&gt;
&lt;div class="pscode"&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$service&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;StopService&lt;/span&gt;&lt;/span&gt;().&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;ReturnValue&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;So a PowerShell function to restart a service remotely would look like this (don&amp;#39;t type this code in, just hold on a second, we are going to add some few final lines to this code in a second):&lt;/p&gt;
&lt;div class="pscode"&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;&lt;/span&gt; &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Restart-ServiceEx&lt;/span&gt;&lt;/span&gt; {&lt;br /&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;param&lt;/span&gt;&lt;/span&gt;(&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$computername&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;&lt;/span&gt;,&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$service&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;#39;Spooler&amp;#39;&lt;/span&gt;&lt;/span&gt;,&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$credential&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#800080;"&gt;&lt;span class="var"&gt;$null&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#008000;"&gt;&lt;span class="comment"&gt;# if credential was specified, use it...&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;/span&gt; (&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$credential&lt;/span&gt;&lt;/span&gt;) {&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$service&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Get-WmiObject&lt;/span&gt;&lt;/span&gt; Win32_Service &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-ComputerName&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$computername&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;Filter&lt;/span&gt;&lt;/span&gt; &lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;quot;name=&amp;quot;&amp;quot;$service&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-Credential&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#800080;"&gt;&lt;span class="var"&gt;$credential&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;} &lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/span&gt; {&lt;br /&gt;&lt;span style="color:#008000;"&gt;&lt;span class="comment"&gt;# else do not use this parameter:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$service&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Get-WmiObject&lt;/span&gt;&lt;/span&gt; Win32_Service &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-ComputerName&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$computername&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;Filter&lt;/span&gt;&lt;/span&gt; &lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;quot;name=&amp;quot;&amp;quot;$service&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#008000;"&gt;&lt;span class="comment"&gt;# if service was running already...&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;/span&gt; (&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$service&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;started&lt;/span&gt;&lt;/span&gt;) {&lt;br /&gt;&lt;span style="color:#008000;"&gt;&lt;span class="comment"&gt;# stop it...&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$rv&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$service&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;StopService&lt;/span&gt;&lt;/span&gt;().&lt;span style="color:#8b4513;"&gt;&lt;span class="method"&gt;ReturnValue&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;/span&gt; (&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$rv&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-eq&lt;/span&gt;&lt;/span&gt; 0) {&lt;br /&gt;&lt;span style="color:#008000;"&gt;&lt;span class="comment"&gt;# ...and if that worked, restart again&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$rv&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$service&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;StartService&lt;/span&gt;&lt;/span&gt;().&lt;span style="color:#8b4513;"&gt;&lt;span class="method"&gt;ReturnValue&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;} &lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/span&gt; {&lt;br /&gt;&lt;span style="color:#008000;"&gt;&lt;span class="comment"&gt;# else if service was not running yet, start it:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$rv&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$service&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;StartService&lt;/span&gt;&lt;/span&gt;().&lt;span style="color:#8b4513;"&gt;&lt;span class="method"&gt;ReturnValue&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#008000;"&gt;&lt;span class="comment"&gt;# let people know if things went alright&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$errorcode&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#800000;"&gt;&lt;span class="string"&gt;&amp;#39;Success,Not Supported,Access Denied,Dependent Services Running,Invalid Service Control&amp;#39;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$errorcode&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;+=&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#800000;"&gt;&lt;span class="string"&gt;&amp;#39;,Service Cannot Accept Control, Service Not Active, Service Request Timeout&amp;#39;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$errorcode&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;+=&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#800000;"&gt;&lt;span class="string"&gt;&amp;#39;,Unknown Failure, Path Not Found, Service Already Running, Service Database Locked&amp;#39;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$errorcode&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;+=&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#800000;"&gt;&lt;span class="string"&gt;&amp;#39;,Service Dependency Deleted, Service Dependency Failure, Service Disabled&amp;#39;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$errorcode&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;+=&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#800000;"&gt;&lt;span class="string"&gt;&amp;#39;,Service Logon Failure, Service Marked for Deletion, Service No Thread&amp;#39;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$errorcode&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;+=&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#800000;"&gt;&lt;span class="string"&gt;&amp;#39;,Status Circular Dependency, Status Duplicate Name, Status Invalid Name&amp;#39;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$errorcode&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;+=&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#800000;"&gt;&lt;span class="string"&gt;&amp;#39;,Status Invalid Parameter, Status Invalid Service Account, Status Service Exists&amp;#39;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$errorcode&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;+=&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#800000;"&gt;&lt;span class="string"&gt;&amp;#39;,Service Already Paused&amp;#39;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$errorcode&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;Split&lt;/span&gt;&lt;/span&gt;(&lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;/span&gt;)[&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$rv&lt;/span&gt;&lt;/span&gt;]&lt;br /&gt;} &lt;/div&gt;
&lt;h3&gt;Adding Support for WhatIf and Confirm&lt;/h3&gt;
&lt;p&gt;To add support for&lt;strong&gt; -Confirm&lt;/strong&gt; and &lt;strong&gt;-Whatif&lt;/strong&gt;, have a look at this simply prototype function:&lt;/p&gt;
&lt;div class="pscode"&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;&lt;/span&gt; &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Test-Function&lt;/span&gt;&lt;/span&gt; {&lt;br /&gt;[CmdletBinding( SupportsShouldProcess&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$true&lt;/span&gt;&lt;/span&gt;)]&lt;br /&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;param&lt;/span&gt;&lt;/span&gt;()&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;/span&gt; (&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$pscmdlet&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;ShouldProcess&lt;/span&gt;&lt;/span&gt;(&lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;#39;Source&amp;#39;&lt;/span&gt;&lt;/span&gt;, &lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;#39;Action to take&amp;#39;&lt;/span&gt;&lt;/span&gt;)) {&lt;br /&gt;&lt;span style="color:#800000;"&gt;&lt;span class="string"&gt;&amp;#39;I am actually doing something here!&amp;#39;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;}&lt;/div&gt;
&lt;p&gt;When you run &lt;strong&gt;Test-Function&lt;/strong&gt;, it will output a text. If you call it with the&lt;strong&gt; -whatif&lt;/strong&gt; parameter, it automatically skips the action and instead prints out what it would have done. You can control this text yourself. Have a look at the code: &lt;strong&gt;ShouldProcess&lt;/strong&gt; takes two arguments, the source where the action is going to take place, and a description of the action. Finally, &lt;strong&gt;-Confirm&lt;/strong&gt; also works. It automatically runs a confirmation dialog, and the user can decide to take the action or skip it.&lt;/p&gt;
&lt;p&gt;With this in mind, we can now add the &lt;strong&gt;-Whatif&lt;/strong&gt; and &lt;strong&gt;-Confirm&lt;/strong&gt; support to &lt;strong&gt;Restart-ServiceEx&lt;/strong&gt;. You can download the function here: &lt;a href="http://powershell.com/cs/media/p/8389.aspx"&gt;http://powershell.com/cs/media/p/8389.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;function&lt;/span&gt;&lt;/span&gt; &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Restart-ServiceEx&lt;/span&gt;&lt;/span&gt; {&lt;br /&gt;[CmdletBinding( SupportsShouldProcess&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$true&lt;/span&gt;&lt;/span&gt;, ConfirmImpact&lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;#39;High&amp;#39;&lt;/span&gt;&lt;/span&gt;)]&lt;br /&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;param&lt;/span&gt;&lt;/span&gt;(&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$computername&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;&lt;/span&gt;,&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$service&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;#39;Spooler&amp;#39;&lt;/span&gt;&lt;/span&gt;,&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$credential&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#800080;"&gt;&lt;span class="var"&gt;$null&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#008000;"&gt;&lt;span class="comment"&gt;# create list of clear text error messages&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$errorcode&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#800000;"&gt;&lt;span class="string"&gt;&amp;#39;Success,Not Supported,Access Denied,Dependent Services Running,Invalid Service Control&amp;#39;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$errorcode&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;+=&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#800000;"&gt;&lt;span class="string"&gt;&amp;#39;,Service Cannot Accept Control, Service Not Active, Service Request Timeout&amp;#39;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$errorcode&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;+=&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#800000;"&gt;&lt;span class="string"&gt;&amp;#39;,Unknown Failure, Path Not Found, Service Already Running, Service Database Locked&amp;#39;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$errorcode&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;+=&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#800000;"&gt;&lt;span class="string"&gt;&amp;#39;,Service Dependency Deleted, Service Dependency Failure, Service Disabled&amp;#39;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$errorcode&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;+=&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#800000;"&gt;&lt;span class="string"&gt;&amp;#39;,Service Logon Failure, Service Marked for Deletion, Service No Thread&amp;#39;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$errorcode&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;+=&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#800000;"&gt;&lt;span class="string"&gt;&amp;#39;,Status Circular Dependency, Status Duplicate Name, Status Invalid Name&amp;#39;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$errorcode&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;+=&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#800000;"&gt;&lt;span class="string"&gt;&amp;#39;,Status Invalid Parameter, Status Invalid Service Account, Status Service Exists&amp;#39;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$errorcode&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;+=&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#800000;"&gt;&lt;span class="string"&gt;&amp;#39;,Service Already Paused&amp;#39;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#008000;"&gt;&lt;span class="comment"&gt;# if credential was specified, use it...&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;/span&gt; (&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$credential&lt;/span&gt;&lt;/span&gt;) {&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$service&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Get-WmiObject&lt;/span&gt;&lt;/span&gt; Win32_Service &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-ComputerName&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$computername&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;Filter&lt;/span&gt;&lt;/span&gt; &lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;quot;name=&amp;quot;&amp;quot;$service&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-Credential&lt;/span&gt;&lt;/span&gt; &lt;span style="color:#800080;"&gt;&lt;span class="var"&gt;$credential&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;} &lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/span&gt; {&lt;br /&gt;&lt;span style="color:#008000;"&gt;&lt;span class="comment"&gt;# else do not use this parameter:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$service&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Get-WmiObject&lt;/span&gt;&lt;/span&gt; Win32_Service &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-ComputerName&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$computername&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;Filter&lt;/span&gt;&lt;/span&gt; &lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;quot;name=&amp;quot;&amp;quot;$service&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#008000;"&gt;&lt;span class="comment"&gt;# if service was running already...&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$servicename&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$service&lt;/span&gt;&lt;/span&gt;.&lt;span style="color:#8b4513;"&gt;&lt;span class="method"&gt;Caption&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;/span&gt; (&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$service&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;started&lt;/span&gt;&lt;/span&gt;) {&lt;br /&gt;&lt;span style="color:#008000;"&gt;&lt;span class="comment"&gt;# should action be executed? &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;/span&gt; (&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$pscmdlet&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;ShouldProcess&lt;/span&gt;&lt;/span&gt;(&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$computername&lt;/span&gt;&lt;/span&gt;, &lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;quot;Restarting Service &amp;#39;$servicename&amp;#39;&amp;quot;&lt;/span&gt;&lt;/span&gt;)) {&lt;br /&gt;&lt;span style="color:#008000;"&gt;&lt;span class="comment"&gt;# yes, stop service:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$rv&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$service&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;StopService&lt;/span&gt;&lt;/span&gt;().&lt;span style="color:#8b4513;"&gt;&lt;span class="method"&gt;ReturnValue&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;/span&gt; (&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$rv&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;-eq&lt;/span&gt;&lt;/span&gt; 0) {&lt;br /&gt;&lt;span style="color:#008000;"&gt;&lt;span class="comment"&gt;# ...and if that worked, restart again&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$rv&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$service&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;StartService&lt;/span&gt;&lt;/span&gt;().&lt;span style="color:#8b4513;"&gt;&lt;span class="method"&gt;ReturnValue&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;&lt;span style="color:#008000;"&gt;&lt;span class="comment"&gt;# return clear text error message:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$errorcode&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;Split&lt;/span&gt;&lt;/span&gt;(&lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;/span&gt;)[&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$rv&lt;/span&gt;&lt;/span&gt;]&lt;br /&gt;} &lt;br /&gt;} &lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;else&lt;/span&gt;&lt;/span&gt; {&lt;br /&gt;&lt;span style="color:#008000;"&gt;&lt;span class="comment"&gt;# else if service was not running yet, start it:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword"&gt;&lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;&lt;/span&gt; (&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$pscmdlet&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;ShouldProcess&lt;/span&gt;&lt;/span&gt;(&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$computername&lt;/span&gt;&lt;/span&gt;, &lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;quot;Starting Service &amp;#39;$servicename&amp;#39;&amp;quot;&lt;/span&gt;&lt;/span&gt;)) {&lt;br /&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$rv&lt;/span&gt;&lt;/span&gt; &lt;span class="op"&gt;&lt;span style="color:#ff0000;"&gt;=&lt;/span&gt;&lt;/span&gt; &lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$service&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;StartService&lt;/span&gt;&lt;/span&gt;().&lt;span style="color:#8b4513;"&gt;&lt;span class="method"&gt;ReturnValue&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$errorcode&lt;/span&gt;&lt;/span&gt;.&lt;span class="method"&gt;&lt;span style="color:#8b4513;"&gt;Split&lt;/span&gt;&lt;/span&gt;(&lt;span class="string"&gt;&lt;span style="color:#800000;"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;/span&gt;)[&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$rv&lt;/span&gt;&lt;/span&gt;]&lt;br /&gt;} &lt;br /&gt;}&lt;br /&gt;}&lt;/p&gt;
&lt;h3&gt;Adding ConfirmImpact&lt;/h3&gt;
&lt;p&gt;As you can see, it is usually up to the user whether or not he uses &lt;strong&gt;-Confirm&lt;/strong&gt;. If the action your function takes is severe enough, you may want &lt;strong&gt;-Confirm&lt;/strong&gt; to be the default so that you get a confirmation dialog automatically. This is why you as the author of the function can declare a &lt;strong&gt;ConfirmImpact&lt;/strong&gt; level. By default, PowerShell runs the confirmation logic automatically for any function that has a ConfirmImpact level of High. Exchange this line&lt;/p&gt;
&lt;p&gt;[CmdletBinding( SupportsShouldProcess=$true)]&lt;/p&gt;
&lt;p&gt;to this line:&lt;/p&gt;
&lt;p&gt;[CmdletBinding(SupportsShouldProcess=$true,&lt;strong&gt; ConfirmImpact=&amp;quot;High&amp;quot;)&lt;/strong&gt;]&lt;/p&gt;
&lt;p&gt;When you now run the function, it will always ask for confirmation, and you do not have to explicitly use&lt;strong&gt; -Confirm&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;Some Extra Tricks&lt;/h3&gt;
&lt;p&gt;The automatic variable &lt;strong&gt;$ConfirmPreference&lt;/strong&gt; determines the ConfirmImpact level that will trigger automatic confirmation. Valid values are &lt;strong&gt;None&lt;/strong&gt;, &lt;strong&gt;Low&lt;/strong&gt;, &lt;strong&gt;Medium&lt;/strong&gt; and &lt;strong&gt;High&lt;/strong&gt;. If you set this variable to &amp;quot;Low&amp;quot;, you will get confirmations for all cmdlets and all functions supporting confirmation. If you set it to &amp;quot;None&amp;quot;, you will never get automatic confirmations.&lt;/p&gt;
&lt;p&gt;If you &lt;strong&gt;must run commands unattended&lt;/strong&gt; and want to make sure no implicit confirmation gets in your way and blocks the script, you can either set&lt;strong&gt; $ConfirmPreference&lt;/strong&gt; to &amp;quot;None&amp;quot;, or you can explicitly assign a &lt;strong&gt;$false&lt;/strong&gt; to your &lt;strong&gt;-Confirm&lt;/strong&gt; parameter. You can test this with Restart-ServiceEx:&lt;/p&gt;
&lt;div class="pscode"&gt;&lt;span class="verbnoun"&gt;&lt;span style="color:#5f9ea0;"&gt;Restart-ServiceEx&lt;/span&gt;&lt;/span&gt; &lt;span class="modifier"&gt;&lt;span style="color:#5f9ea0;"&gt;-Confirm&lt;/span&gt;&lt;/span&gt;:&lt;span class="var"&gt;&lt;span style="color:#800080;"&gt;$false&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;Have fun! See you next time around,&lt;/p&gt;
&lt;p&gt;Tobias&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Microsoft MVP PowerShell Germany&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;P.S.&lt;br /&gt;If you live in Germany or other parts of Europe and your company would like to set up a truly great PowerShell training, just contact me! I regularly train mid- to large-size companies. Trainings are always a blast with tons of real-world-examples and solutions. Here&amp;#39;s how to get in touch with me: &lt;a href="mailto:tobias.weltner@scriptinternals.de"&gt;&lt;span style="color:#3366cc;"&gt;tobias.weltner@scriptinternals.de&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;</description></item></channel></rss>