<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-18074818</id><updated>2011-12-15T04:00:12.198+01:00</updated><title type='text'>/\/\o\/\/ PowerShelled</title><subtitle type='html'>This blog has moved to http://ThePowerShellGuy.com
Greetings /\/\o\/\/</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default?start-index=101&amp;max-results=100'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>255</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-18074818.post-116698223789747493</id><published>2006-12-24T18:43:00.000+01:00</published><updated>2006-12-24T18:43:58.040+01:00</updated><title type='text'>Moving to ThePowerShellGuy.com</title><content type='html'>&lt;p&gt;as you might have seen in last testpost&lt;/p&gt; &lt;p&gt;I started a new blog here : &lt;a title="The PowerShell Guy" href="http://thepowershellguy.com/"&gt;The PowerShell Guy&lt;/a&gt;&amp;nbsp; ( &lt;a href="http://ThePowerShellGuy.com"&gt;http://ThePowerShellGuy.com&lt;/a&gt; )&lt;/p&gt; &lt;p&gt;the Feeds you can find here : &lt;/p&gt; &lt;li&gt;&lt;a href="http://thepowershellguy.com/blogs/posh/rss.aspx"&gt;RSS 2.0&lt;/a&gt; &lt;li&gt;&lt;a href="http://thepowershellguy.com/blogs/posh/atom.aspx"&gt;Atom 1.0&lt;/a&gt;&lt;/li&gt; &lt;p&gt;Starting with this first entry : &lt;a href="http://thepowershellguy.com/blogs/posh/archive/2006/12/24/powershell-generating-rtf-help-from-xml-help-files.aspx"&gt;PowerShell : Generating RTF Help from XML help files&lt;/a&gt;&amp;nbsp;I will no longer post on this blog.&lt;/p&gt; &lt;p&gt;the content on this blog&amp;nbsp;will not be removed&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Enjoy,  &lt;p&gt;Greetings,/\/\o\/\/&lt;br&gt;Tags : &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-116698223789747493?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/116698223789747493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=116698223789747493' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116698223789747493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116698223789747493'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/12/moving-to-thepowershellguycom.html' title='Moving to ThePowerShellGuy.com'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-116684025745507090</id><published>2006-12-23T03:17:00.000+01:00</published><updated>2006-12-23T03:17:37.520+01:00</updated><title type='text'>PowerShell Code formatting test for my new Blog</title><content type='html'>&lt;p&gt;I'm testing my new blog &lt;a title="/\/\o\/\/ , The PowerShell guy" href="http://ThePowershellguy.com/"&gt;The PowerShell guy&lt;/a&gt;,&lt;/p&gt; &lt;p&gt;I post the same testpost here to compare&lt;/p&gt; &lt;p&gt;Testing codesamples for viewing and copying &lt;em&gt;(do not link here, I will post this item again later after testing , in its final version with a permanent link)&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;I'm testing with IE7 and Bloglines, if you have problems pasting in the code on the old or new blog please leave a comment,&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;at the moment it looks like the &lt;a title="/\/\o\/\/ , The PowerShell guy" href="http://ThePowershellguy.com/"&gt;The PowerShell guy&lt;/a&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;blog does not have the formatting problems I have here &lt;/p&gt; &lt;h3&gt;convert number to Roman notation&lt;/h3&gt; &lt;p&gt;&lt;strong&gt;Function as PowerShell code (Pre tag CodeHTMLer)&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;&lt;span style="color: green"&gt;# Convert Int to Roman notation&lt;/span&gt;&lt;br /&gt;&lt;span style="color: green"&gt;# /\/\o\/\/ 2006&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;function&lt;/span&gt; format-Roman ($num  ) {  &lt;br /&gt;&lt;br /&gt;    $M = [math]::truncate($num / &lt;span style="color: maroon"&gt;1000&lt;/span&gt;) &lt;br /&gt;    $num -= $M * &lt;span style="color: maroon"&gt;1000&lt;/span&gt; &lt;br /&gt;    $D = [math]::truncate($num / &lt;span style="color: maroon"&gt;500&lt;/span&gt;) &lt;br /&gt;    $num -=  $D * &lt;span style="color: maroon"&gt;500&lt;/span&gt; &lt;br /&gt;    $C = [math]::truncate($num / &lt;span style="color: maroon"&gt;100&lt;/span&gt;) &lt;br /&gt;    $num -=  $C * &lt;span style="color: maroon"&gt;100&lt;/span&gt; &lt;br /&gt;    $L = [math]::truncate($num / &lt;span style="color: maroon"&gt;50&lt;/span&gt;) &lt;br /&gt;    $num -=  $L * &lt;span style="color: maroon"&gt;50&lt;/span&gt; &lt;br /&gt;    $X = [math]::truncate($num / &lt;span style="color: maroon"&gt;10&lt;/span&gt;) &lt;br /&gt;    $num -=  $x * &lt;span style="color: maroon"&gt;10&lt;/span&gt; &lt;br /&gt;    $V = [math]::truncate($num / &lt;span style="color: maroon"&gt;5&lt;/span&gt;) &lt;br /&gt;    $num -=  $V * &lt;span style="color: maroon"&gt;5&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    $Roman = &lt;span style="color: maroon"&gt;"M"&lt;/span&gt; * $M&lt;br /&gt;    $Roman += &lt;span style="color: maroon"&gt;"D"&lt;/span&gt; * $D&lt;br /&gt;    $Roman += &lt;span style="color: maroon"&gt;"C"&lt;/span&gt; * $C&lt;br /&gt;    $Roman += &lt;span style="color: maroon"&gt;"L"&lt;/span&gt; * $L&lt;br /&gt;    $Roman += &lt;span style="color: maroon"&gt;"X"&lt;/span&gt; * $X&lt;br /&gt;    $Roman += &lt;span style="color: maroon"&gt;"V"&lt;/span&gt; * $V&lt;br /&gt;    $Roman += &lt;span style="color: maroon"&gt;"I"&lt;/span&gt; * $num&lt;br /&gt;    &lt;br /&gt;    $roman = $roman.replace(&lt;span style="color: maroon"&gt;'DCCCC'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'CM'&lt;/span&gt;) &lt;span style="color: green"&gt;# 900&lt;/span&gt;&lt;br /&gt;    $roman = $roman.replace(&lt;span style="color: maroon"&gt;'CCCC'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'CD'&lt;/span&gt;) &lt;span style="color: green"&gt;# 400&lt;/span&gt;&lt;br /&gt;    $roman = $roman.replace(&lt;span style="color: maroon"&gt;'LXXXX'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'XC'&lt;/span&gt;) &lt;span style="color: green"&gt;# 90&lt;/span&gt;&lt;br /&gt;    $roman = $roman.replace(&lt;span style="color: maroon"&gt;'XXXX'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'XL'&lt;/span&gt;) &lt;span style="color: green"&gt;# 40&lt;/span&gt;&lt;br /&gt;    $roman = $roman.replace(&lt;span style="color: maroon"&gt;'VIIII'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'IX'&lt;/span&gt;) &lt;span style="color: green"&gt;# 9&lt;/span&gt;&lt;br /&gt;    $roman = $roman.replace(&lt;span style="color: maroon"&gt;'IIII'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'IV'&lt;/span&gt;) &lt;span style="color: green"&gt;# 4&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span style="color: blue"&gt;Return&lt;/span&gt; $Roman&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Commandline example (Block Quote)&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;format-Roman 1987&lt;br&gt;MCMLXXXVII&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;format-Roman 1999&lt;br&gt;MCMXCIX &lt;br /&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;Update-TypeData C:\PowerShell\TypeData\TypedataInt32.ps1xml&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;(32).toroman()&lt;br&gt;XXXII&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;format an Integer&amp;nbsp;in Roman notation&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Type extension as XML (convert whitespace, codehtmler)&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;div style="font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: maroon"&gt;xml&lt;/span&gt;&amp;nbsp;&lt;span style="color: red"&gt;version&lt;/span&gt;="&lt;span style="color: blue"&gt;1.0&lt;/span&gt;"&amp;nbsp;&lt;span style="color: red"&gt;encoding&lt;/span&gt;="&lt;span style="color: blue"&gt;utf-8&lt;/span&gt;"&amp;nbsp;&lt;span style="color: blue"&gt;?&amp;gt;&lt;/span&gt;&amp;nbsp; &lt;br&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Types&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Type&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;System.Int32&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Members&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;ScriptMethod&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;ToRoman&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Script&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$num&amp;nbsp;=&amp;nbsp;$this &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$M&amp;nbsp;=&amp;nbsp;[math]::truncate($num&amp;nbsp;/&amp;nbsp;1000)&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$num&amp;nbsp;-=&amp;nbsp;$M&amp;nbsp;*&amp;nbsp;1000&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$D&amp;nbsp;=&amp;nbsp;[math]::truncate($num&amp;nbsp;/&amp;nbsp;500)&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$num&amp;nbsp;-=&amp;nbsp;&amp;nbsp;$D&amp;nbsp;*&amp;nbsp;500&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$C&amp;nbsp;=&amp;nbsp;[math]::truncate($num&amp;nbsp;/&amp;nbsp;100)&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$num&amp;nbsp;-=&amp;nbsp;&amp;nbsp;$C&amp;nbsp;*&amp;nbsp;100&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$L&amp;nbsp;=&amp;nbsp;[math]::truncate($num&amp;nbsp;/&amp;nbsp;50)&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$num&amp;nbsp;-=&amp;nbsp;&amp;nbsp;$L&amp;nbsp;*&amp;nbsp;50&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$X&amp;nbsp;=&amp;nbsp;[math]::truncate($num&amp;nbsp;/&amp;nbsp;10)&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$num&amp;nbsp;-=&amp;nbsp;&amp;nbsp;$x&amp;nbsp;*&amp;nbsp;10&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$V&amp;nbsp;=&amp;nbsp;[math]::truncate($num&amp;nbsp;/&amp;nbsp;5)&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$num&amp;nbsp;-=&amp;nbsp;&amp;nbsp;$V&amp;nbsp;*&amp;nbsp;5 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$Roman&amp;nbsp;=&amp;nbsp;"&lt;span style="color: blue"&gt;M&lt;/span&gt;"&amp;nbsp;*&amp;nbsp;$M &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$Roman&amp;nbsp;+=&amp;nbsp;"&lt;span style="color: blue"&gt;D&lt;/span&gt;"&amp;nbsp;*&amp;nbsp;$D &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$Roman&amp;nbsp;+=&amp;nbsp;"&lt;span style="color: blue"&gt;C&lt;/span&gt;"&amp;nbsp;*&amp;nbsp;$C &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$Roman&amp;nbsp;+=&amp;nbsp;"&lt;span style="color: blue"&gt;L&lt;/span&gt;"&amp;nbsp;*&amp;nbsp;$L &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$Roman&amp;nbsp;+=&amp;nbsp;"&lt;span style="color: blue"&gt;X&lt;/span&gt;"&amp;nbsp;*&amp;nbsp;$X &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$Roman&amp;nbsp;+=&amp;nbsp;"&lt;span style="color: blue"&gt;V&lt;/span&gt;"&amp;nbsp;*&amp;nbsp;$V &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$Roman&amp;nbsp;+=&amp;nbsp;"&lt;span style="color: blue"&gt;I&lt;/span&gt;"&amp;nbsp;*&amp;nbsp;$num &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$roman&amp;nbsp;=&amp;nbsp;$roman.replace('DCCCC','CM')&amp;nbsp;#&amp;nbsp;900 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$roman&amp;nbsp;=&amp;nbsp;$roman.replace('CCCC','CD')&amp;nbsp;#&amp;nbsp;400 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$roman&amp;nbsp;=&amp;nbsp;$roman.replace('LXXXX','XC')&amp;nbsp;#&amp;nbsp;90 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$roman&amp;nbsp;=&amp;nbsp;$roman.replace('XXXX','XL')&amp;nbsp;#&amp;nbsp;40 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$roman&amp;nbsp;=&amp;nbsp;$roman.replace('VIIII','IX')&amp;nbsp;#&amp;nbsp;9 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$roman&amp;nbsp;=&amp;nbsp;$roman.replace('IIII','IV')&amp;nbsp;#&amp;nbsp;4 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Return&amp;nbsp;$roman &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Script&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;ScriptMethod&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp; &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Members&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Type&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp; &lt;br&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Types&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;* Edit *&lt;/strong&gt; Added script again formatted by PowerShell analyzer&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;?xml version="1.0"?&gt;&lt;pre&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro SyntaxEditor&lt;br /&gt;http://www.ActiproSoftware.com/Products/DotNet/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; Function Format-Roman&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; /\/\o\/\/ 006&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;/span&gt;&lt;span style="color: #008000; text-decoration: underline"&gt;http://ThePowerShellGuy.com&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; HTML Formatting Generated with PowerShell Analyzer&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #008080"&gt;format-Roman&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; ) {  &lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$M&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; [math]::truncate(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;1000&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;-=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$M&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;1000&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$D&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; [math]::truncate(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;500&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;-=&lt;/span&gt;&lt;span style="color: #000000"&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$D&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;500&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$C&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; [math]::truncate(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;100&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;-=&lt;/span&gt;&lt;span style="color: #000000"&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$C&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;100&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$L&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; [math]::truncate(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;50&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;-=&lt;/span&gt;&lt;span style="color: #000000"&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$L&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;50&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$X&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; [math]::truncate(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;10&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;-=&lt;/span&gt;&lt;span style="color: #000000"&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$x&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;10&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$V&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; [math]::truncate(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;5&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;-=&lt;/span&gt;&lt;span style="color: #000000"&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$V&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;5&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$Roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000080"&gt;M&lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$M&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$Roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000080"&gt;D&lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$D&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$Roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000080"&gt;C&lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$C&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$Roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000080"&gt;L&lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$L&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$Roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000080"&gt;X&lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$X&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$Roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000080"&gt;V&lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$V&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$Roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000080"&gt;I&lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt;.replace(&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000080"&gt;DCCCC&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000080"&gt;CM&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; 900&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt;.replace(&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000080"&gt;CCCC&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000080"&gt;CD&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; 400&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt;.replace(&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000080"&gt;LXXXX&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000080"&gt;XC&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; 90&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt;.replace(&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000080"&gt;XXXX&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000080"&gt;XL&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; 40&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt;.replace(&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000080"&gt;VIIII&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000080"&gt;IX&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; 9&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt;.replace(&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000080"&gt;IIII&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000080"&gt;IV&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; 4&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;    &lt;br /&gt;    Return &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Enjoy, Greetings /\/\o\/\/ &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-116684025745507090?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/116684025745507090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=116684025745507090' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116684025745507090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116684025745507090'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/12/powershell-code-formatting-test-for-my_23.html' title='PowerShell Code formatting test for my new Blog'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-116683777531654105</id><published>2006-12-23T02:24:00.000+01:00</published><updated>2006-12-23T02:36:15.513+01:00</updated><title type='text'>PowerShell Code formatting test for my new Blog</title><content type='html'>&lt;p&gt;I'm testing my new blog &lt;a title="/\/\o\/\/ , The PowerShell guy" href="http://ThePowershellguy.com/"&gt;The PowerShell guy&lt;/a&gt;,&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I post the same testpost here to compare&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Testing codesamples for viewing and copying &lt;em&gt;(do not link here, I will post this item again later after testing , in its final version with a permanent link)&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;I'm testing with IE7 and Bloglines, if you have problems pasting in the code on the old or new blog please leave a comment,&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;at the moment it looks like the &lt;a title="/\/\o\/\/ , The PowerShell guy" href="http://ThePowershellguy.com/"&gt;The PowerShell guy&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;blog does not have the formatting problems I have here &lt;/p&gt;&lt;br /&gt;&lt;h3&gt;convert number to Roman notation&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Function as PowerShell code (Pre tag CodeHTMLer)&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;&lt;span style="color: green"&gt;# Convert Int to Roman notation&lt;/span&gt;&lt;br /&gt;&lt;span style="color: green"&gt;# /\/\o\/\/ 2006&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;function&lt;/span&gt; format-Roman ($num  ) {  &lt;br /&gt;&lt;br /&gt;    $M = [math]::truncate($num / &lt;span style="color: maroon"&gt;1000&lt;/span&gt;) &lt;br /&gt;    $num -= $M * &lt;span style="color: maroon"&gt;1000&lt;/span&gt; &lt;br /&gt;    $D = [math]::truncate($num / &lt;span style="color: maroon"&gt;500&lt;/span&gt;) &lt;br /&gt;    $num -=  $D * &lt;span style="color: maroon"&gt;500&lt;/span&gt; &lt;br /&gt;    $C = [math]::truncate($num / &lt;span style="color: maroon"&gt;100&lt;/span&gt;) &lt;br /&gt;    $num -=  $C * &lt;span style="color: maroon"&gt;100&lt;/span&gt; &lt;br /&gt;    $L = [math]::truncate($num / &lt;span style="color: maroon"&gt;50&lt;/span&gt;) &lt;br /&gt;    $num -=  $L * &lt;span style="color: maroon"&gt;50&lt;/span&gt; &lt;br /&gt;    $X = [math]::truncate($num / &lt;span style="color: maroon"&gt;10&lt;/span&gt;) &lt;br /&gt;    $num -=  $x * &lt;span style="color: maroon"&gt;10&lt;/span&gt; &lt;br /&gt;    $V = [math]::truncate($num / &lt;span style="color: maroon"&gt;5&lt;/span&gt;) &lt;br /&gt;    $num -=  $V * &lt;span style="color: maroon"&gt;5&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    $Roman = &lt;span style="color: maroon"&gt;"M"&lt;/span&gt; * $M&lt;br /&gt;    $Roman += &lt;span style="color: maroon"&gt;"D"&lt;/span&gt; * $D&lt;br /&gt;    $Roman += &lt;span style="color: maroon"&gt;"C"&lt;/span&gt; * $C&lt;br /&gt;    $Roman += &lt;span style="color: maroon"&gt;"L"&lt;/span&gt; * $L&lt;br /&gt;    $Roman += &lt;span style="color: maroon"&gt;"X"&lt;/span&gt; * $X&lt;br /&gt;    $Roman += &lt;span style="color: maroon"&gt;"V"&lt;/span&gt; * $V&lt;br /&gt;    $Roman += &lt;span style="color: maroon"&gt;"I"&lt;/span&gt; * $num&lt;br /&gt;    &lt;br /&gt;    $roman = $roman.replace(&lt;span style="color: maroon"&gt;'DCCCC'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'CM'&lt;/span&gt;) &lt;span style="color: green"&gt;# 900&lt;/span&gt;&lt;br /&gt;    $roman = $roman.replace(&lt;span style="color: maroon"&gt;'CCCC'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'CD'&lt;/span&gt;) &lt;span style="color: green"&gt;# 400&lt;/span&gt;&lt;br /&gt;    $roman = $roman.replace(&lt;span style="color: maroon"&gt;'LXXXX'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'XC'&lt;/span&gt;) &lt;span style="color: green"&gt;# 90&lt;/span&gt;&lt;br /&gt;    $roman = $roman.replace(&lt;span style="color: maroon"&gt;'XXXX'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'XL'&lt;/span&gt;) &lt;span style="color: green"&gt;# 40&lt;/span&gt;&lt;br /&gt;    $roman = $roman.replace(&lt;span style="color: maroon"&gt;'VIIII'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'IX'&lt;/span&gt;) &lt;span style="color: green"&gt;# 9&lt;/span&gt;&lt;br /&gt;    $roman = $roman.replace(&lt;span style="color: maroon"&gt;'IIII'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'IV'&lt;/span&gt;) &lt;span style="color: green"&gt;# 4&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span style="color: blue"&gt;Return&lt;/span&gt; $Roman&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Commandline example (Block Quote)&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;format-Roman 1987&lt;br&gt;MCMLXXXVII&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;format-Roman 1999&lt;br&gt;MCMXCIX &lt;br /&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;Update-TypeData C:\PowerShell\TypeData\TypedataInt32.ps1xml&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;(32).toroman()&lt;br&gt;XXXII&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;format an Integer&amp;nbsp;in Roman notation&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Type extension as XML (convert whitespace, codehtmler)&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;div style="font-family: courier new"&gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: maroon"&gt;xml&lt;/span&gt;&amp;nbsp;&lt;span style="color: red"&gt;version&lt;/span&gt;="&lt;span style="color: blue"&gt;1.0&lt;/span&gt;"&amp;nbsp;&lt;span style="color: red"&gt;encoding&lt;/span&gt;="&lt;span style="color: blue"&gt;utf-8&lt;/span&gt;"&amp;nbsp;&lt;span style="color: blue"&gt;?&amp;gt;&lt;/span&gt;&amp;nbsp; &lt;br&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Types&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Type&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;System.Int32&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Members&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;ScriptMethod&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;ToRoman&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon"&gt;Script&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$num&amp;nbsp;=&amp;nbsp;$this &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$M&amp;nbsp;=&amp;nbsp;[math]::truncate($num&amp;nbsp;/&amp;nbsp;1000)&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$num&amp;nbsp;-=&amp;nbsp;$M&amp;nbsp;*&amp;nbsp;1000&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$D&amp;nbsp;=&amp;nbsp;[math]::truncate($num&amp;nbsp;/&amp;nbsp;500)&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$num&amp;nbsp;-=&amp;nbsp;&amp;nbsp;$D&amp;nbsp;*&amp;nbsp;500&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$C&amp;nbsp;=&amp;nbsp;[math]::truncate($num&amp;nbsp;/&amp;nbsp;100)&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$num&amp;nbsp;-=&amp;nbsp;&amp;nbsp;$C&amp;nbsp;*&amp;nbsp;100&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$L&amp;nbsp;=&amp;nbsp;[math]::truncate($num&amp;nbsp;/&amp;nbsp;50)&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$num&amp;nbsp;-=&amp;nbsp;&amp;nbsp;$L&amp;nbsp;*&amp;nbsp;50&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$X&amp;nbsp;=&amp;nbsp;[math]::truncate($num&amp;nbsp;/&amp;nbsp;10)&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$num&amp;nbsp;-=&amp;nbsp;&amp;nbsp;$x&amp;nbsp;*&amp;nbsp;10&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$V&amp;nbsp;=&amp;nbsp;[math]::truncate($num&amp;nbsp;/&amp;nbsp;5)&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$num&amp;nbsp;-=&amp;nbsp;&amp;nbsp;$V&amp;nbsp;*&amp;nbsp;5 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$Roman&amp;nbsp;=&amp;nbsp;"&lt;span style="color: blue"&gt;M&lt;/span&gt;"&amp;nbsp;*&amp;nbsp;$M &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$Roman&amp;nbsp;+=&amp;nbsp;"&lt;span style="color: blue"&gt;D&lt;/span&gt;"&amp;nbsp;*&amp;nbsp;$D &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$Roman&amp;nbsp;+=&amp;nbsp;"&lt;span style="color: blue"&gt;C&lt;/span&gt;"&amp;nbsp;*&amp;nbsp;$C &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$Roman&amp;nbsp;+=&amp;nbsp;"&lt;span style="color: blue"&gt;L&lt;/span&gt;"&amp;nbsp;*&amp;nbsp;$L &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$Roman&amp;nbsp;+=&amp;nbsp;"&lt;span style="color: blue"&gt;X&lt;/span&gt;"&amp;nbsp;*&amp;nbsp;$X &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$Roman&amp;nbsp;+=&amp;nbsp;"&lt;span style="color: blue"&gt;V&lt;/span&gt;"&amp;nbsp;*&amp;nbsp;$V &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$Roman&amp;nbsp;+=&amp;nbsp;"&lt;span style="color: blue"&gt;I&lt;/span&gt;"&amp;nbsp;*&amp;nbsp;$num &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$roman&amp;nbsp;=&amp;nbsp;$roman.replace('DCCCC','CM')&amp;nbsp;#&amp;nbsp;900 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$roman&amp;nbsp;=&amp;nbsp;$roman.replace('CCCC','CD')&amp;nbsp;#&amp;nbsp;400 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$roman&amp;nbsp;=&amp;nbsp;$roman.replace('LXXXX','XC')&amp;nbsp;#&amp;nbsp;90 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$roman&amp;nbsp;=&amp;nbsp;$roman.replace('XXXX','XL')&amp;nbsp;#&amp;nbsp;40 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$roman&amp;nbsp;=&amp;nbsp;$roman.replace('VIIII','IX')&amp;nbsp;#&amp;nbsp;9 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$roman&amp;nbsp;=&amp;nbsp;$roman.replace('IIII','IV')&amp;nbsp;#&amp;nbsp;4 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Return&amp;nbsp;$roman &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Script&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;ScriptMethod&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp; &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Members&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Type&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&amp;nbsp; &lt;br&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;/&lt;span style="color: maroon"&gt;Types&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;* Edit *&lt;/strong&gt; Added script again formatted by PowerShell analyzer&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;?xml version="1.0"?&gt;&lt;pre&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro SyntaxEditor&lt;br /&gt;http://www.ActiproSoftware.com/Products/DotNet/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; Function Format-Roman&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; /\/\o\/\/ 006&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; &lt;/span&gt;&lt;span style="color: #008000; text-decoration: underline"&gt;http://ThePowerShellGuy.com&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; HTML Formatting Generated with PowerShell Analyzer&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #008080"&gt;format-Roman&lt;/span&gt;&lt;span style="color: #000000"&gt; (&lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; ) {  &lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$M&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; [math]::truncate(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;1000&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;-=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$M&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;1000&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$D&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; [math]::truncate(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;500&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;-=&lt;/span&gt;&lt;span style="color: #000000"&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$D&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;500&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$C&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; [math]::truncate(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;100&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;-=&lt;/span&gt;&lt;span style="color: #000000"&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$C&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;100&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$L&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; [math]::truncate(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;50&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;-=&lt;/span&gt;&lt;span style="color: #000000"&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$L&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;50&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$X&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; [math]::truncate(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;10&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;-=&lt;/span&gt;&lt;span style="color: #000000"&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$x&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;10&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$V&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; [math]::truncate(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;/&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;5&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;-=&lt;/span&gt;&lt;span style="color: #000000"&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$V&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;5&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$Roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000080"&gt;M&lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$M&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$Roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000080"&gt;D&lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$D&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$Roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000080"&gt;C&lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$C&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$Roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000080"&gt;L&lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$L&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$Roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000080"&gt;X&lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$X&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$Roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000080"&gt;V&lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$V&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$Roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;+=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000080"&gt;I&lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;*&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$num&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt;.replace(&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000080"&gt;DCCCC&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000080"&gt;CM&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; 900&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt;.replace(&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000080"&gt;CCCC&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000080"&gt;CD&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; 400&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt;.replace(&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000080"&gt;LXXXX&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000080"&gt;XC&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; 90&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt;.replace(&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000080"&gt;XXXX&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000080"&gt;XL&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; 40&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt;.replace(&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000080"&gt;VIIII&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000080"&gt;IX&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; 9&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt;.replace(&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000080"&gt;IIII&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000080"&gt;IV&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; 4&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;    &lt;br /&gt;    Return &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$roman&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Enjoy, Greetings /\/\o\/\/ &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-116683777531654105?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/116683777531654105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=116683777531654105' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116683777531654105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116683777531654105'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/12/powershell-code-formatting-test-for-my.html' title='PowerShell Code formatting test for my new Blog'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-116612265125365219</id><published>2006-12-14T19:57:00.000+01:00</published><updated>2006-12-14T19:57:40.176+01:00</updated><title type='text'>PowerShell Community Extensions V1.0</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;On CodePlex there is&amp;nbsp;released a major update to PSCX (PowerShell Community Extensions) that I&amp;nbsp;think folks will find very useful.&amp;nbsp; &lt;/p&gt; &lt;p&gt;be sure to Check it out !!&lt;/p&gt; &lt;p&gt;PowerShell Community Extensions is a PowerShell Snapin that provides a&lt;br&gt;number of widely useful cmdlets. PSCX is not affliated with Microsoft &lt;br&gt;or the Windows PowerShell team at Microsoft. We are a few (at the moment)&lt;br&gt;passionate PowerShell users who wanted more cmdlets than Micorsoft was &lt;br&gt;able to deliver in v1.0. So we have taken it upon ourselves to create &lt;br&gt;some of those cmdlets and make them available to the community.&lt;/p&gt; &lt;p&gt;You can download it from:&lt;br&gt;&lt;a href="http://www.codeplex.com/PowerShellCX/Release/ProjectReleases.aspx"&gt;http://www.codeplex.com/PowerShellCX/Release/ProjectReleases.aspx&lt;/a&gt;&lt;br&gt;If you run into problems please report them here:&lt;br&gt;&lt;a href="http://www.codeplex.com/PowerShellCX/WorkItem/List.aspx"&gt;http://www.codeplex.com/PowerShellCX/WorkItem/List.aspx&lt;/a&gt;&lt;br&gt;The readme and about_pscx help topic you can find on the download page also, for you to check out what &lt;br&gt;is new in version 1.0.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;br&gt;Enjoy!&lt;br&gt;--&lt;br&gt;The PSCX crew (Keith Hill, Alex Angelopoulos, Mabster, DBMsW, and MoW)&lt;br&gt;P.S. If you are passionate about PoSh and can contribute by writing C# &lt;br&gt;cmdlets, let&amp;nbsp;us know.&amp;nbsp; We're looking for more help.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Greetings,/\/\o\/\/&lt;br&gt;Tags : &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-116612265125365219?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/116612265125365219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=116612265125365219' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116612265125365219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116612265125365219'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/12/powershell-community-extensions-v10.html' title='PowerShell Community Extensions V1.0'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-116535132039645544</id><published>2006-12-05T21:42:00.000+01:00</published><updated>2006-12-05T22:14:00.563+01:00</updated><title type='text'>PowerShell : Access remote eventlogs</title><content type='html'>&lt;p&gt;Jeffery Hicks did a 2 part series on his blog&amp;nbsp;about accessing evenlogs in PowerShell&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;a href="http://sapien.eponym.com/blog/_archives/2006/12/4/2536565.html"&gt;PowerShell Event Log Filtering&lt;/a&gt;&amp;nbsp;,&lt;/p&gt; &lt;p&gt;&lt;a href="http://sapien.eponym.com/blog/_archives/2006/12/5/2536788.html"&gt;Remote Event Log Filtering&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;in the second part he did use WMI to acces remote eventlogs, I posted an example in&amp;nbsp;the comments using .NET for it.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$logs = [System.Diagnostics.EventLog]::GetEventLogs('Server') &lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$logs[0] &lt;br&gt;Max(K) Retain OverflowAction Entries Name &lt;br&gt;------ ------ -------------- ------- ---- &lt;br&gt;20,480 7 OverwriteOlder 829 Application &lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$logs[0].machinename &lt;br&gt;Server &lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$logs[0].entries | where&amp;nbsp;`&lt;br&gt;&amp;gt;&amp;gt;&amp;nbsp; {($_.EntryType -eq "Warning" -OR $_.EntryType -eq "Error") `&lt;br&gt;&amp;gt;&amp;gt; -AND ($_.TimeWritten -ge $recent)}&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;As an reaction to &lt;a href="http://sapien.eponym.com/blog/_archives/2006/12/5/2536788.html"&gt;Remote Event Log Filtering&lt;/a&gt;&amp;nbsp;in my comment&amp;nbsp; &lt;a href="http://sapien.eponym.com/#795150"&gt;Here&lt;/a&gt;&amp;nbsp; where I did the example in the first part &lt;a href="http://sapien.eponym.com/blog/_archives/2006/12/4/2536565.html"&gt;PowerShell Event Log Filtering&lt;/a&gt;&amp;nbsp;again but then using the .NET object directly, he posted about powershell users not (yet)&amp;nbsp;knowing the .net objects&amp;nbsp;&amp;nbsp;:&lt;/p&gt; &lt;p&gt;but a good thing about this they allready did learn about then using the CMDlet get-eventlog, as this is merely a wrapper for the .NET objects, as the examples below will show, the output and objects will be the same, only in this case you can use it agains remote computers, also you as you can see in the last example you can even "Switch" to a remote computer using only the PowerShell &lt;strong&gt;get-EventLog -list&lt;/strong&gt; command, so you can see that you actualy did allready learn how to use it in the first part of Jeffery Hicks 's series &lt;em&gt;only you might not know it yet ;-).&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Get-EventLog&lt;/strong&gt; -list is actualy the same as &lt;strong&gt;System.Diagnostics.EventLog]::GetEventLogs()&lt;/strong&gt; :&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;Get-EventLog -list  &lt;p&gt;Max(K) Retain OverflowAction Entries Name&lt;br&gt;------ ------ -------------- ------- ----&lt;br&gt;20,480 7 OverwriteOlder 829 Application&lt;br&gt;... &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;[System.Diagnostics.EventLog]::GetEventLogs()  &lt;p&gt;Max(K) Retain OverflowAction Entries Name&lt;br&gt;------ ------ -------------- ------- ----&lt;br&gt;20,480 7 OverwriteOlder 829 Application &lt;p&gt;...&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;As you can find out like this  &lt;blockquote&gt; &lt;p&gt;[System.Diagnostics.EventLog] | gm -s | fl *&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;in the output from that you will find that the latter method takes also a machinename parameter :&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;...&lt;/p&gt; &lt;p&gt;TypeName : System.Diagnostics.EventLog&lt;br&gt;Name : GetEventLogs&lt;br&gt;MemberType : Method&lt;br&gt;Definition : static System.Diagnostics.EventLog[] GetEventLogs(), static System.Diagnostics.EventLog[] GetEventLogs(Str&lt;br&gt;ing machineName) &lt;p&gt;...&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;Also &lt;strong&gt;$al = get-eventlog Application&lt;/strong&gt; is almost the same as &lt;strong&gt;$al = new-object System.Diagnostics.EventLog('Application')&lt;/strong&gt; &lt;p&gt;only here&amp;nbsp; you can see that here also the result is alsmost the same, only the latter method it not completely the same, as get-eventlog CMDlets allready calls the entries() method  &lt;p&gt;&amp;nbsp; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$al = get-eventlog Application&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$al  &lt;p&gt;Index Time Type Source EventID Message&lt;br&gt;----- ---- ---- ------ ------- -------&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$al = new-object System.Diagnostics.EventLog('Application') &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$al  &lt;p&gt;Max(K) Retain OverflowAction Entries Name&lt;br&gt;------ ------ -------------- ------- ----&lt;br&gt;20,480 7 OverwriteOlder 829 Application  &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$al.Entries  &lt;p&gt;Index Time Type Source EventID Message&lt;br&gt;----- ---- ---- ------ ------- ------- &lt;p&gt;&lt;font color="#00ff40"&gt;# Remote&lt;/font&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;new-object System.Diagnostics.EventLog('Application','foo')  &lt;p&gt;Max(K) Retain OverflowAction Entries Name&lt;br&gt;------ ------ -------------- ------- ---- &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;As again this method has more overloads : &lt;p&gt;&amp;nbsp; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;[System.Diagnostics.EventLog].GetConstructors() |% {"$_"}&lt;br&gt;Void .ctor()&lt;br&gt;Void .ctor(System.String)&lt;br&gt;Void .ctor(System.String, System.String)&lt;br&gt;Void .ctor(System.String, System.String, System.String)&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;in this case (no Enums all strings ) that is not that helpfull but we have help here, same as in the example in yesterdays post about the VbScript to PowerShell converting guide online,&amp;nbsp;me (and Others)&amp;nbsp;did this before for MSDN &lt;h4&gt;&lt;a href="http://mow001.blogspot.com/2005/12/msh-get-msdn-function.html"&gt;/\/\o\/\/ PowerShelled: MSH &lt;b&gt;Get-MSDN&lt;/b&gt; Function&lt;/a&gt;&lt;/h4&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;Function Get-MSDN ($type = "default") {&lt;br&gt;&amp;gt;&amp;gt; (new-object -com shell.application).Open("&lt;a href="http://msdn2.microsoft.com/library/"&gt;http://msdn2.microsoft.com/library/&lt;/a&gt;$type.aspx")&lt;br&gt;&amp;gt;&amp;gt; }&lt;br&gt;&amp;gt;&amp;gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;Get-MSDN System.Diagnostics.EventLog&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;So again after connecting using the .NET object for the rest it is also the same and you can still use the eventlog methods as with the indexing into the getEventlogs() method in the first example $logs[0] this can even be handy &lt;p&gt;&amp;nbsp; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$al = new-object System.Diagnostics.EventLog('Application')&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$al | Get-Member -membertype Method  &lt;p&gt;TypeName: System.Diagnostics.EventLog  &lt;p&gt;Name MemberType Definition&lt;br&gt;---- ---------- ----------&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$al.WriteEvent  &lt;p&gt;MemberType : Method&lt;br&gt;OverloadDefinitions : {System.Void WriteEvent(EventInstance instance, Params Object[] values), System.Void WriteEvent(E&lt;br&gt;ventInstance instance, Byte[] data, Params Object[] values)}&lt;br&gt;TypeNameOfValue : System.Management.Automation.PSMethod&lt;br&gt;Value : System.Void WriteEvent(EventInstance instance, Params Object[] values), System.Void WriteEvent(Ev&lt;br&gt;entInstance instance, Byte[] data, Params Object[] values)&lt;br&gt;Name : WriteEvent&lt;br&gt;IsInstance : True&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Even a more nice example for this is the following example we use the get-eventlog -list command to get the eventlogs and then switch to another machine by changeing the machinename property as that is get / set  &lt;p&gt;So it is not even needed to use the .NET Object to work agains remote computers : &lt;p&gt;&amp;nbsp; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$logs = Get-EventLog -list&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$logs[0]  &lt;p&gt;Max(K) Retain OverflowAction Entries Name&lt;br&gt;------ ------ -------------- ------- ----&lt;br&gt;20,480 7 OverwriteOlder 829 Application  &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$logs[0].machinename = "foo"&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$logs[0]  &lt;p&gt;Max(K) Retain OverflowAction Entries Name&lt;br&gt;------ ------ -------------- ------- ----&lt;br&gt;Application&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;So while you use &lt;strong&gt;get-member&lt;/strong&gt; and use the Cmdlets in the background you also learn to know the .NET object, &lt;p&gt;so this is a good glidepath to using the .net classes when you are in need for the extra power they can give you&amp;nbsp;(e.g. remoting, other functionality and /or Speed), I hope this post will also help by showing it is not that different from using the CMDlets as you get back the same .NET objects. &lt;p&gt;I think this is a good middle way ;-) &lt;p&gt;Enjoy,  &lt;p&gt;Greetings,/\/\o\/\/&lt;br&gt;Tags : &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-116535132039645544?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/116535132039645544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=116535132039645544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116535132039645544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116535132039645544'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/12/powershell-access-remote-eventlogs.html' title='PowerShell : Access remote eventlogs'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-116526611567962163</id><published>2006-12-04T22:01:00.000+01:00</published><updated>2006-12-04T22:01:58.886+01:00</updated><title type='text'>Windows PowerShell Scripting Sweepstakes!</title><content type='html'>&lt;p&gt;as you can read&amp;nbsp;here&amp;nbsp;&lt;a href="http://groups.google.nl/group/microsoft.public.windows.powershell/browse_thread/thread/71c9e2b4ab3f2447/5fbcc664c6ec3864?lnk=st&amp;amp;q=powershell+sweepstakes&amp;amp;rnum=1&amp;amp;hl=nl#5fbcc664c6ec3864"&gt;&lt;b&gt;PowerShell&lt;/b&gt; Scripting Contest - 2 weeks left&lt;/a&gt;, here &lt;a href="http://sapien.eponym.com/blog/_archives/2006/12/1/2542118.html"&gt;Don't miss the Microsoft PowerShell Contest&lt;/a&gt;, here &lt;a href="http://tfl09.blogspot.com/2006/12/powershell-scripting-contest.html"&gt;PowerShell Scripting Contest&lt;/a&gt;, here&lt;a href="http://keithhill.spaces.live.com/Blog/cns!5A8D2641E0963A97!651.entry"&gt;PowerShell Scripting Contest&lt;/a&gt;&amp;nbsp;and here&amp;nbsp;&lt;a href="http://blogs.msdn.com/powershell/archive/2006/12/01/powershell-scripting-contest-2-weeks-left.aspx"&gt;PowerShell Scripting Contest - 2 weeks left&lt;/a&gt;&amp;nbsp;, there is still some time left&amp;nbsp; te enter in the&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;a href="http://www.microsoft.com/technet/scriptcenter/topics/winpsh/contest/default.mspx"&gt;Windows PowerShell Scripting Sweepstakes!&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;November 1 – December 15, 2006&lt;/b&gt;  &lt;p&gt;What also can help is&amp;nbsp; the excelent:  &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.microsoft.com/technet/scriptcenter/topics/winpsh/convert/default.mspx"&gt;&lt;b&gt;VbScript to Windows PowerShell&lt;/b&gt;&lt;/a&gt; translation guide&lt;/strong&gt;  &lt;p&gt;&lt;strong&gt;for looking up VbScript commands, or inspiration, for example yo could write a function to do a quick lookup in it&lt;/strong&gt;  &lt;p&gt;for example you can write a function to do that from the PowerShell console so yo cando :  &lt;p&gt;&amp;nbsp; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;convert-VbScript&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;convert-VbScript inputbox&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;convert-VbScript getObject&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;to start internet explorer to do a quick lookup in that guide to get help on how to translate the VbScript command you remember to PowerShell, that could be as simple as this : &lt;p&gt;&amp;nbsp; &lt;p&gt;&amp;nbsp;  &lt;div style="font-family: courier new"&gt;&lt;span style="color: green"&gt;#&amp;nbsp;Use&amp;nbsp;the&amp;nbsp;Scripting&amp;nbsp;Guy's&amp;nbsp;VbScript&amp;nbsp;to&amp;nbsp;Windows&amp;nbsp;PowerShell&amp;nbsp;translation&amp;nbsp;guide&lt;/span&gt; &lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;for&amp;nbsp;help&amp;nbsp;to&amp;nbsp;convert&amp;nbsp;vbScript&amp;nbsp;commands&lt;/span&gt; &lt;br&gt;&lt;br&gt;&lt;span style="color: blue"&gt;Function&lt;/span&gt;&amp;nbsp;convert-VbScript&amp;nbsp;($Command&amp;nbsp;=&amp;nbsp;&lt;span style="color: maroon"&gt;"default"&lt;/span&gt;)&amp;nbsp;{&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;(new-&lt;span style="color: blue"&gt;object&lt;/span&gt;&amp;nbsp;-com&amp;nbsp;shell.application).Open(&lt;span style="color: maroon"&gt;"http://www.microsoft.com/technet/scriptcenter/topics/winpsh/convert/$command.mspx"&lt;/span&gt;)&amp;nbsp; &lt;br&gt;}&lt;/div&gt; &lt;p&gt;&amp;nbsp;  &lt;p&gt;Started without the&amp;nbsp;commandname it starts the index otherwise it will bring you directly to the page about the&amp;nbsp;command given &lt;p&gt;&lt;strong&gt;or one to remind how much time long you still have&lt;/strong&gt;  &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;function get-TimeLeftToEnterPowerShellContest {(get-date -date "12/15/2006 23:55").Subtract((get-date))}&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;get-TimeLeftToEnterPowerShellContest  &lt;p&gt;Days : 11&lt;br&gt;Hours : 2&lt;br&gt;Minutes : 21&lt;br&gt;Seconds : 43&lt;br&gt;Milliseconds : 719&lt;br&gt;Ticks : 9589037192755&lt;br&gt;TotalDays : 11.0984226767998&lt;br&gt;TotalHours : 266.362144243194&lt;br&gt;TotalMinutes : 15981.7286545917&lt;br&gt;TotalSeconds : 958903.7192755&lt;br&gt;TotalMilliseconds : 958903719.2755&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;  &lt;p&gt;&amp;nbsp; hope this guide and the examples get you started with an script for the contest,  &lt;p&gt;Enjoy,  &lt;p&gt;Greetings,&lt;br&gt;/\/\o\/\/&lt;br&gt;Tags : &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-116526611567962163?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/116526611567962163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=116526611567962163' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116526611567962163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116526611567962163'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/12/windows-powershell-scripting.html' title='Windows PowerShell Scripting Sweepstakes!'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-116525916155094415</id><published>2006-12-04T20:06:00.000+01:00</published><updated>2006-12-04T20:12:09.626+01:00</updated><title type='text'>PowerShell : making Custum Enums</title><content type='html'>&lt;p&gt;In PowerShell you often see the use of enum's &lt;/p&gt; &lt;p&gt;for some info , examples of Enums and there usage see :&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;h4&gt;&lt;a href="http://mow001.blogspot.com/2005/11/exploring-net-types-classes-and-enums.html"&gt;/\/\o\/\/ PowerShelled: Exploring .NET types, classes and Enums &lt;b&gt;...&lt;/b&gt;&lt;/a&gt;,&lt;/h4&gt; &lt;p&gt;&lt;a href="http://mow001.blogspot.com/2006/01/get-specialfolder-locations-in-monad.html"&gt;/\/\o\/\/ PowerShelled: Get SpecialFolder Locations in Monad&lt;/a&gt;,&lt;/p&gt; &lt;p&gt;&lt;a href="http://mow001.blogspot.com/2006/01/adding-simple-accesrule-to-file-acl-in.html"&gt;/\/\o\/\/ PowerShelled: Adding a Simple AccesRule to a file ACL in MSH&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;as you can see in the Special Forder function this is very handy for some parameters :&lt;/p&gt; &lt;p&gt;It is not possible yet to create Enums and classes directly in PowerShell, but there is a way by using Reflection :&lt;/p&gt; &lt;blockquote&gt; &lt;div style="font-family: courier new"&gt;#&amp;nbsp;Make&amp;nbsp;a&amp;nbsp;Custom&amp;nbsp;Enum&amp;nbsp;&lt;span style="color: blue"&gt;in&lt;/span&gt;&amp;nbsp;PowerShell &lt;br&gt;&lt;br&gt;$cd&amp;nbsp;=&amp;nbsp;[AppDomain]::CurrentDomain&amp;nbsp; &lt;br&gt;&amp;nbsp; &lt;br&gt;$an&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue"&gt;new-object&lt;/span&gt;&amp;nbsp;System.Reflection.AssemblyName('Mow')&amp;nbsp; &lt;br&gt;$ab&amp;nbsp;=&amp;nbsp;$cd.DefineDynamicAssembly($an,'RunAndSave')&amp;nbsp; &lt;br&gt;$mb&amp;nbsp;=&amp;nbsp;$ab.DefineDynamicModule($an.Name,&amp;nbsp;&lt;span style="color: maroon"&gt;"$($an.Name).dll"&lt;/span&gt;)&amp;nbsp; &lt;br&gt;$eb&amp;nbsp;=&amp;nbsp;$mb.DefineEnum(&lt;span style="color: maroon"&gt;"Fruit"&lt;/span&gt;,'Public',&amp;nbsp;[&lt;span style="color: blue"&gt;int&lt;/span&gt;])&amp;nbsp; &lt;br&gt;&amp;nbsp; &lt;br&gt;&amp;amp;&amp;nbsp;{&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;$eb.DefineLiteral('Apple',&lt;span style="color: maroon"&gt;1&lt;/span&gt;)&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;$eb.DefineLiteral('strawberry',&lt;span style="color: maroon"&gt;2&lt;/span&gt;)&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;$eb.DefineLiteral('Banana',&lt;span style="color: maroon"&gt;3&lt;/span&gt;)&amp;nbsp; &lt;br&gt;}&amp;nbsp;|&amp;nbsp;&lt;span style="color: blue"&gt;out&lt;/span&gt;-&lt;span style="color: blue"&gt;null&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp; &lt;br&gt;$t&amp;nbsp;=&amp;nbsp;$eb.CreateType()&amp;nbsp;&lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;It might not look that way, but this is "Fasten your Seatbells &lt;em&gt;(c) Jeffrey Snover&lt;/em&gt;" - Code (you can even create complete classes this way but that's outside my "Scope" &lt;em&gt;(@ reading developers : but this would be real cool material for a CMDlet *Wink*&amp;nbsp;*Wink*&amp;nbsp;)), &lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;Hence, &lt;/em&gt;I won't go into the workings to much, to get an impression after runnin the code try :&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;$cd,$an,$mb,$eb | gm&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;but the code as is, is easy to customize, e.g. to add a Kiwi to the list with number 4 add a line like this&lt;/p&gt; &lt;p&gt;&lt;strong&gt;$eb.DefineLiteral('Kiwi',4)&lt;/strong&gt; &lt;/p&gt; &lt;h4&gt;As you can see here this is handy for custom functions :&lt;/h4&gt; &lt;p&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;...&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$t = $eb.CreateType()&lt;br&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;[fruit] &lt;/p&gt; &lt;p&gt;IsPublic IsSerial Name BaseType&lt;br&gt;-------- -------- ---- --------&lt;br&gt;True True Fruit System.Enum  &lt;p&gt;PoSH&amp;gt;[enum]::GetNames([fruit])&lt;br&gt;Apple&lt;br&gt;strawberry&lt;br&gt;Banana&lt;br&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;function new-FruitShake ([fruit]$f) {"Here is your $f Shake"}&lt;br&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;new-FruitShake Apple&lt;br&gt;Here is your Apple Shake&lt;br&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;new-FruitShake chocolate&lt;br&gt;new-FruitShake : Cannot convert value "chocolate" to type "Fruit" due to invalid enumeration values. Specify one of the&lt;br&gt;following enumeration values and try again. The possible enumeration values are "Apple, strawberry, Banana".&lt;br&gt;At line:1 char:15&lt;br&gt;+ new-FruitShake &amp;lt;&amp;lt;&amp;lt;&amp;lt; chocolate&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;If you have my custom tabcompletion &lt;/p&gt; &lt;h4&gt;&lt;a href="http://mow001.blogspot.com/2006/10/powershell-tabcompletion-part-5.html"&gt;/\/\o\/\/ PowerShelled: PowerShell : Tabcompletion Part 5&lt;/a&gt;&amp;nbsp;or&lt;/h4&gt; &lt;h4&gt;&lt;a href="http://mow001.blogspot.com/2006/06/powershell-tab-completion-part-4.html"&gt;/\/\o\/\/ PowerShelled: PowerShell &lt;b&gt;Tab&lt;/b&gt; Completion Part 4&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;you can even tabcomplete on it :&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;[fruit]A&lt;font color="#00ffff"&gt;&lt;em&gt;[tab]&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;[fruit]Apple&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Enjoy,&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Greetings /\/\o\/\/&lt;/p&gt; &lt;p&gt;Tags : &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-116525916155094415?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/116525916155094415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=116525916155094415' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116525916155094415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116525916155094415'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/12/powershell-making-custum-enums.html' title='PowerShell : making Custum Enums'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-116484666856969641</id><published>2006-11-30T01:31:00.000+01:00</published><updated>2006-11-30T01:31:31.946+01:00</updated><title type='text'>TechNet Webcast: An Overview of Windows PowerShell</title><content type='html'>&lt;p&gt;For the PowerShell calendar :&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.microsoft.com/events/EventDetails.aspx?CMTYSvcSource=MSCOMMedia&amp;amp;Params=%7eCMTYDataSvcParams%5e%7earg+Name%3d%22ID%22+Value%3d%221032319212%22%2f%5e%7earg+Name%3d%22ProviderID%22+Value%3d%22A6B43178-497C-4225-BA42-DF595171F04C%22%2f%5e%7earg+Name%3d%22lang%22+Value%3d%22en%22%2f%5e%7earg+Name%3d%22cr%22+Value%3d%22US%22%2f%5e%7esParams%5e%7e%2fsParams%5e%7e%2fCMTYDataSvcParams%5e"&gt;TechNet Webcast: An Overview of Windows PowerShell (Level 200)&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Presenter: Don Jones, Scripting Guru, Author, SAPIEN Technology&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Event Name: TechNet Webcast: An Overview of Windows PowerShell (Level 200)&lt;br&gt;Start Date: 12/19/2006&lt;br&gt;Start Time: 1:00 PM (GMT-08:00) Pacific Time (US &amp;amp; Canada)&lt;br&gt;End Date: 12/19/2006&lt;br&gt;End Time: 2:00 PM (GMT-08:00) Pacific Time (US &amp;amp; Canada)&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Enjoy,  &lt;p&gt;Greetings,&lt;br&gt;/\/\o\/\/&lt;br&gt;Tags : &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-116484666856969641?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/116484666856969641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=116484666856969641' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116484666856969641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116484666856969641'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/11/technet-webcast-overview-of-windows.html' title='TechNet Webcast: An Overview of Windows PowerShell'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-116476187426054648</id><published>2006-11-29T01:57:00.000+01:00</published><updated>2006-11-29T01:57:58.523+01:00</updated><title type='text'>"Windows PowerShell: TFM" goes "Gold"</title><content type='html'>&lt;p&gt;One question/remark I did hear very often at the IT Forum is about&amp;nbsp;available books for PowerShell and about Editors for PowerShell&amp;nbsp;.&lt;/p&gt; &lt;p&gt;Don Jones, from Sapiens, well know from the&amp;nbsp;script&amp;nbsp;Editor &lt;a href="http://www.primalscript.com"&gt;PrimalScript&lt;/a&gt;&amp;nbsp;.&amp;nbsp; (&lt;em&gt;PrimalScript 4.1 introduces support for Microsoft's &lt;strong&gt;Windows PowerShell!&lt;/strong&gt; and did go RTM at the same time as PowerShell, at the IT Forum.!!)&lt;/em&gt;&lt;/p&gt; &lt;p&gt;But they do&amp;nbsp;much more, as giving &lt;a href="http://www.scriptingtraining.com"&gt;Scripting Training&lt;/a&gt;&amp;nbsp;(also PowerShell) and Publishing (&lt;a href="http://www.sapienpress.com"&gt;SAPIEN Press&lt;/a&gt;)&lt;/p&gt; &lt;p&gt;Also&amp;nbsp;they cover a lot of PowerShell material online : - A&amp;nbsp;blog&amp;nbsp;&lt;a title="http://sapien.eponym.com/blog" href="http://sapien.eponym.com/blog,"&gt;http://sapien.eponym.com/blog,&lt;/a&gt;&amp;nbsp;-&amp;nbsp;Scripting / &amp;nbsp;PowerShell Forums :&lt;a href="http://www.scriptinganswers.com"&gt;ScriptingAnswers.com&lt;/a&gt;&amp;nbsp; and a search engine with PowerShell support:&amp;nbsp;&lt;a href="http://www.searchscripting.com"&gt;SearchScripting.com&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;Today&amp;nbsp;Don&amp;nbsp;Jones also did&amp;nbsp;announce that the book he was writing&amp;nbsp; &lt;b&gt;&lt;a href="http://mow001.blogspot.com/2006/05/windows-powershell-tfm.html"&gt;Windows PowerShell: TFM&lt;/a&gt;&amp;nbsp;&lt;/b&gt;&amp;nbsp;has gone Gold,&amp;nbsp;&lt;/p&gt; &lt;p&gt;See the&amp;nbsp;following message I got from him :&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;Jeff Hicks and I are very pleased to announce that Windows PowerShell: TFM is now “gold,” meaning the manuscript is complete and should be off to the printer’s sometime this week. We’re just waiting on the cover design to be completed. The manuscript checked in at 470 pages, including the index, meeting our target for a highly on-topic book that administrators will find approachable and comfortable to read.&lt;/em&gt;  &lt;p&gt;&lt;em&gt;Pre-orders are available on Amazon.com, and our first official sample chapters are posted, along with a complete table of contents (all in one PDF) on &lt;/em&gt;&lt;a href="http://www.SAPIENPress.com/powershell.asp"&gt;&lt;em&gt;www.SAPIENPress.com/powershell.asp&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. The book’s sample scripts are also available now as a free download for one and all, whether they’ve purchased the book or not.&lt;/em&gt;  &lt;p&gt;&lt;em&gt;We hope to announce shipping and general availability dates in December. &lt;/em&gt; &lt;p&gt;&lt;em&gt;Some quick facts:&lt;/em&gt;  &lt;p&gt;&lt;em&gt;- Almost 500 pages of Windows PowerShell-flavored goodness&lt;/em&gt;  &lt;p&gt;&lt;em&gt;- Walks a Windows admin through the PoSH learning process from the ground up&lt;/em&gt;  &lt;p&gt;&lt;em&gt;- Focuses on task completion, helping admins get the job done faster&lt;/em&gt;  &lt;p&gt;&lt;em&gt;- Chosen by more than 50% of Amazon.com customers shopping for a PoSH title&lt;/em&gt;  &lt;p&gt;&lt;em&gt;- Currently in the top 100,000 books on Amazon.com&lt;/em&gt;  &lt;p&gt;&lt;em&gt;- Book is supported personally by the authors through a forum on &lt;/em&gt;&lt;a href="http://www.scriptinganswers.com/"&gt;&lt;em&gt;www.ScriptingAnswers.com&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt; &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;I did not read the book yet,only the preview chapter I did post about before, but when I&amp;nbsp;&amp;nbsp;do, I will do another post about my impression of the book but I'm very sure it will be a great read&amp;nbsp;and this will be another &amp;nbsp;"Must have" Book about PowerShell, from the sample chapters,&amp;nbsp;seeing all the PowerShell coverage and support they provide online, and of course the writer&amp;nbsp;Don Jones,who did write very good scripting books before. &lt;p&gt;I&amp;nbsp;had the pleasure to meet Don Jones 2 times,&amp;nbsp;at TechEd Boston and on the IT forum,&amp;nbsp;on both events&amp;nbsp;he also did give some&amp;nbsp;impressive&amp;nbsp;Demos of the PowerShell support in PrimalScript.He is a great guy, a real Scripting and PowerShell Guru, a good presenter and very good in explaining and teaching.&amp;nbsp; &lt;p&gt;Hence, I'm sure I can recommend this book for learning PowerShell. &lt;p&gt;&lt;em&gt;I also got the opportunity to, and did review the book from Bruce Payette that is available in the&amp;nbsp;:&lt;/em&gt;&lt;a title="Windows PowerShell in Action - EARLY ACCESS EDITION" href="http://www.manning.com/affiliate/idevaffiliate.php?id=222"&gt;&lt;em&gt;Windows PowerShell in Action - EARLY ACCESS EDITION&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&amp;nbsp; program, I finished reading it in my vacation, and I really loved this book, it is&amp;nbsp;well written, good examples, and lots of inside and background information, the book does focus on the language itself and&amp;nbsp;how&amp;nbsp;PowerShell is structured and why ,starting at the core, as there are some advanced concepts that lay at the base of how&amp;nbsp;PowerShell works,.&lt;/em&gt; &lt;p&gt;&lt;em&gt;The PowerShell in Action book&amp;nbsp;is a "must Read" , I think&amp;nbsp;it is&amp;nbsp;a great book, one of the best&amp;nbsp;technical books I did read ever&amp;nbsp;, More in a later post&lt;/em&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;the RTM book is a different format and from another viewpoint, so it could be good combination, a more in a later post when I also did read TFM. &lt;p&gt;So next to the excellent documentation (getting started and UserGuide) that does come with the PowerShell installation (if you did not do that yet, be sure to check it out&amp;nbsp; !, &amp;nbsp;it is really great !!! ) &lt;p&gt;There are, next to the books about Monad and MSH beta s&amp;nbsp;: &lt;blockquote&gt; &lt;p&gt;Monad (PowerShell Beta) &lt;em&gt;see :&lt;/em&gt;&lt;a href="http://mow001.blogspot.com/2006/01/series-about-monad-on-computerworld.html"&gt;&lt;em&gt;/\/\o\/\/ PowerShelled: Series about Monad on Computerworld&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&amp;nbsp;,&lt;/em&gt; &lt;p&gt;and Lee holmes (who is Member of the PowerShell team&amp;nbsp;and also has a great powerShell blog )&amp;nbsp;wrote O'Reilly &lt;a href="http://www.oreilly.com/catalog/windowspowershell/"&gt;PowerShell Quick Reference&lt;/a&gt;&amp;nbsp;(see also&amp;nbsp;his Blog&amp;nbsp;&lt;a href="http://www.leeholmes.com/blog/PermaLink,guid,52ee0531-c24c-4fd5-8eed-d05c6ec48ca0.aspx"&gt;O'Reilly PowerShell Quick Reference Now Available&lt;/a&gt;&amp;nbsp;)  &lt;p&gt;and also we have the Free E-book Don Jones did before &lt;em&gt;See &lt;/em&gt;&lt;a href="http://mow001.blogspot.com/2006/05/powershell-links-and-free-e-book.html"&gt;&lt;em&gt;/\/\o\/\/ PowerShelled: Powershell links and free E-&lt;b&gt;book&lt;/b&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&amp;nbsp;:&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Now allreay&amp;nbsp;two very books, to learn&amp;nbsp;more&amp;nbsp;about PowerShell (release), that you can get your hands on, and there are much more in the pipeline ,amongs others :&amp;nbsp;&lt;a href="http://www.amazon.com/Professional-Windows-PowerShell-Andrew-Watt/dp/0471946931"&gt;Professional Windows from Andrew Watt&lt;/a&gt;&amp;nbsp;,&amp;nbsp; &lt;p&gt;Andrew Watt is&amp;nbsp;a MVP and &amp;nbsp;also is very active on the Newsgroup : &lt;a href="http://www.microsoft.com/communities/newsgroups/en-us/default.aspx?dg=microsoft.public.windows.powershell"&gt;microsoft.public.windows.powershell NewsGroup&lt;/a&gt;&amp;nbsp;and also has a PowerShell&amp;nbsp;blog : &lt;a href="http://andrwwatt.wordpress.com/"&gt;PowerShell Ponderings&lt;/a&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;Enjoy,  &lt;p&gt;Greetings,&lt;br&gt;/\/\o\/\/&lt;br&gt;Tags : &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-116476187426054648?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/116476187426054648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=116476187426054648' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116476187426054648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116476187426054648'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/11/one-questionremark-i-did-hear-very.html' title='&amp;quot;Windows PowerShell: TFM&amp;quot; goes &amp;quot;Gold&amp;quot;'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-116447095478248104</id><published>2006-11-25T17:09:00.000+01:00</published><updated>2006-11-25T17:09:16.350+01:00</updated><title type='text'>PowerShell : Advanced renaming of files</title><content type='html'>&lt;p&gt;On the NewsGroup &lt;a href="http://groups.google.nl/group/microsoft.public.windows.powershell?lnk=sg&amp;amp;hl=en"&gt;&lt;b&gt;microsoft.public.windows.powershell&lt;/b&gt;&lt;/a&gt;&amp;nbsp;,&lt;/p&gt; &lt;p&gt;there was a Question about : &lt;a href="http://groups.google.nl/group/microsoft.public.windows.powershell/browse_thread/thread/c7cc12d76678a66b/5c92ecdc2106387b?hl=en#5c92ecdc2106387b"&gt;Advanced renaming directly in Powershell?&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The Question was about doing advanced&amp;nbsp;file renaming, to rename a set of files like this :&lt;/p&gt; &lt;p&gt;file.ex2&lt;br&gt;file.ext&lt;br&gt;file_1.ex2&lt;br&gt;file_1.ext&lt;br&gt;file_2.ext&lt;/p&gt; &lt;p&gt;to the following format, Giving a base number and then rename the files and use the _3 as an offset to the number&lt;/p&gt; &lt;p&gt;file12.ex2&lt;br&gt;file12.ext &lt;br&gt;file13.ex2 &lt;br&gt;file13.ext &lt;br&gt;file14.ext &lt;/p&gt; &lt;p&gt;Now the rename-object commandlet in PowerShell is very powerfull for this,&amp;nbsp;some basic renaming might be a bit hard at first see also &lt;a href="http://mow001.blogspot.com/2006/05/powershell-how-can-i-rename-files.html"&gt;/\/\o\/\/ PowerShelled: PowerShell : How Can I &lt;b&gt;Rename&lt;/b&gt; Files Using &lt;b&gt;...&lt;/b&gt;&lt;/a&gt;&amp;nbsp;(a CSV file) and commments on this post&amp;nbsp;&lt;a href="http://mow001.blogspot.com/2006/04/upgrading-msh-my-first-windows.html"&gt;Upgrading MSH, My first Windows PowerShell Commands&lt;/a&gt;&amp;nbsp;about renaming *.msh to *.ps1, &lt;/p&gt; &lt;p&gt;But as the -NewName parameter takes a ScriptBlock as a parameter it is very handy to use some more advanced logic to rename file as you also can use the Power of the -Match and -Replce Operators RegEx support.&lt;/p&gt; &lt;p&gt;I Came up with this oneliner for this task&amp;nbsp;:  &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$num = 12 &lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;ls file*.ex* | rename-item -newname {if($_.name -match '_(\d)'){$num = $num + $matches[1]};$_.name -replace "file.*\.", "file$num."} -WhatIf  &lt;p&gt;What if: Performing operation "Rename File" on Target "Item: C:\PowerShell\file.ex2 Destination: C:\PowerShell\file12.ex2".&lt;br&gt;What if: Performing operation "Rename File" on Target "Item: C:\PowerShell\file.ext Destination: C:\PowerShell\file12.ext".&lt;br&gt;What if: Performing operation "Rename File" on Target "Item: C:\PowerShell\file_1.ex2 Destination: C:\PowerShell\file13.ex2".&lt;br&gt;What if: Performing operation "Rename File" on Target "Item: C:\PowerShell\file_1.ext Destination: C:\PowerShell\file13.ext".&lt;br&gt;What if: Performing operation "Rename File" on Target "Item: C:\PowerShell\file_2.ext Destination: C:\PowerShell\file14.ext". &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;As there is happening a lot in this one line of code I'm going to work it out a bit more in this post.  &lt;p&gt;lets first make the files and list them :  &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;sc file.ext 'a'&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;sc file.ex2 'a'&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;sc file_1.ex2 'a'&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;sc file_1.ext 'a'&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;sc file_2.ext 'a'  &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;ls file*.ex*  &lt;p&gt;Directory: Microsoft.PowerShell.Core\FileSystem::C:\PowerShell  &lt;p&gt;Mode LastWriteTime Length Name&lt;br&gt;---- ------------- ------ ----&lt;br&gt;-a--- 11/25/2006 1:55 PM 3 file.ex2&lt;br&gt;-a--- 11/25/2006 1:54 PM 3 file.ext&lt;br&gt;-a--- 11/25/2006 1:55 PM 3 file_1.ex2&lt;br&gt;-a--- 11/25/2006 1:55 PM 3 file_1.ext&lt;br&gt;-a--- 11/25/2006 2:15 PM 3 file_2.ext &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Now that we have listed the files we want to act upon ( al files starting with file and ending with .ex* )  &lt;p&gt;we can pipe them to rename object :  &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;ls file*.ex* | rename-item -newname {$_.name} -WhatIf&lt;br&gt;&lt;/p&gt; &lt;p&gt;What if: Performing operation "Rename File" on Target "Item: C:\PowerShell\file.ex2 Destination: C:\PowerShell\file.ex2".&lt;br&gt;What if: Performing operation "Rename File" on Target "Item: C:\PowerShell\file.ext Destination: C:\PowerShell\file.ext".&lt;br&gt;What if: Performing operation "Rename File" on Target "Item: C:\PowerShell\file_1.ex2 Destination: C:\PowerShell\file_1.ex2".&lt;br&gt;What if: Performing operation "Rename File" on Target "Item: C:\PowerShell\file_1.ext Destination: C:\PowerShell\file_1.ext".&lt;br&gt;What if: Performing operation "Rename File" on Target "Item: C:\PowerShell\file_2.ext Destination: C:\PowerShell\file_2.ext".&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Note that in the scriptblock I provided to the -newname parameter I have access to the complete&amp;nbsp;File Object in the $_ variable, I just use it to get the name property and do not do&amp;nbsp;any processing yet, also note that I added the -WhatIf parameter so no changes are made and I&amp;nbsp;we can test freely till we got it right without messing up your testfiles.  &lt;p&gt;Now lets start by adding the Base Number for it, in this case 12 that I put in the variable $num  &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$num = 12&lt;/p&gt; &lt;p&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;ls file*.ex* | rename-item -newname {$_.name -replace "file.*\.", "file$num." } -WhatIf&lt;br&gt;&lt;/p&gt; &lt;p&gt;What if: Performing operation "Rename File" on Target "Item: C:\PowerShell\file.ex2 Destination: C:\PowerShell\file12.ex2".&lt;br&gt;What if: Performing operation "Rename File" on Target "Item: C:\PowerShell\file.ext Destination: C:\PowerShell\file12.ext".&lt;br&gt;What if: Performing operation "Rename File" on Target "Item: C:\PowerShell\file_1.ex2 Destination: C:\PowerShell\file12.ex2".&lt;br&gt;What if: Performing operation "Rename File" on Target "Item: C:\PowerShell\file_1.ext Destination: C:\PowerShell\file12.ext".&lt;br&gt;What if: Performing operation "Rename File" on Target "Item: C:\PowerShell\file_2.ext Destination: C:\PowerShell\file12.ext".&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;In this first step we use the -replace operator to insert the basenumber given into the filename by replacing everything between the word file and the extension.&lt;/p&gt; &lt;p&gt;note that -replace uses RegEx expressions not wildcards so the expression looks like this : &lt;strong&gt;"file.*\."&lt;/strong&gt; first the word &lt;strong&gt;file&lt;/strong&gt;, then we need to use a dot &lt;strong&gt;. &lt;/strong&gt;before the &lt;strong&gt;*&lt;/strong&gt; that&amp;nbsp;means any character and we need to escape the last (literal) dot by escaping it&lt;strong&gt; \.&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;but as you can see in the following steps&amp;nbsp;this makes it much more powerfull as also the -mach operator uses the regular expression engine, so we can use the full RegEx power.&lt;/p&gt; &lt;p&gt;Next we need to raise the number for filesnames that do contain an _ with the number that is behind it.&lt;/p&gt; &lt;p&gt;we can use the mach operator to do this (note again that&amp;nbsp;we use -WhatIf so are free just to return anything we want)&amp;nbsp;:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;ls file*.ex* | rename-item -newname {$_.name -match '_' } -WhatIf&lt;/p&gt; &lt;p&gt;What if: Performing operation "Rename File" on Target "Item: C:\PowerShell\file.ex2 Destination: C:\PowerShell\False".&lt;br&gt;What if: Performing operation "Rename File" on Target "Item: C:\PowerShell\file.ext Destination: C:\PowerShell\False".&lt;br&gt;What if: Performing operation "Rename File" on Target "Item: C:\PowerShell\file_1.ex2 Destination: C:\PowerShell\True".&lt;br&gt;What if: Performing operation "Rename File" on Target "Item: C:\PowerShell\file_1.ext Destination: C:\PowerShell\True".&lt;br&gt;What if: Performing operation "Rename File" on Target "Item: C:\PowerShell\file_2.ext Destination: C:\PowerShell\True".&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;The -Mach operator returns $True or $False , but does more it also fills the $maches variable, lets look at this with a single filename to look how this works :&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;"file_1.ex2" -match '_'&lt;br&gt;True  &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$matches  &lt;p&gt;Name Value&lt;br&gt;---- -----&lt;br&gt;0 _  &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;"file_1.ex2" -match '_\d'&lt;br&gt;True  &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$matches[0]&lt;br&gt;_1 &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;You can see here that the $matches variable does contain the Capture found, in the second example I did add &lt;strong&gt;\d&lt;/strong&gt; that means any digit.  &lt;p&gt;but as with a fullBlown [regex] object also the -match operator supports subCaptures, so we can get the Number&amp;nbsp;:  &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$matches  &lt;p&gt;Name Value&lt;br&gt;---- -----&lt;br&gt;1 1&lt;br&gt;0 _1  &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$matches[1]&lt;br&gt;1 &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;So now we can combine the $true returned by -match and the capture made in $matches with an If statement to do the Math :  &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;if ("file_1.ex2" -match '_(\d)'){$matches[1]}&lt;br&gt;1&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;if ("file_2.ex2" -match '_(\d)'){$matches[1]}&lt;br&gt;2&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;if ("file_2.ex2" -match '_(\d)'){$num + $matches[1]}&lt;br&gt;14&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;and all can be combined the the one-liner I did post on the NewGroup, what also could be written like this in PowerShell to make it a bit more readable and you can still just past it into the PowerShell console&lt;/p&gt; &lt;blockquote&gt; &lt;div style="font-family: courier new"&gt;$num&amp;nbsp;=&amp;nbsp;&lt;span style="color: maroon"&gt;12&lt;/span&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;Dir&amp;nbsp;file*.ex*&amp;nbsp;|&amp;nbsp; &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;rename-item&amp;nbsp;-newname&amp;nbsp;{ &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;if&lt;/span&gt;($_.name&amp;nbsp;-match&amp;nbsp;&lt;span style="color: maroon"&gt;'_(\d)'&lt;/span&gt;){ &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$num&amp;nbsp;=&amp;nbsp;$num&amp;nbsp;+&amp;nbsp;$matches[&lt;span style="color: maroon"&gt;1&lt;/span&gt;] &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$_.name&amp;nbsp;-replace&amp;nbsp;&lt;span style="color: maroon"&gt;"file.*\."&lt;/span&gt;,&amp;nbsp;&lt;span style="color: maroon"&gt;"file$num."&lt;/span&gt; &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;-WhatIf &lt;br&gt;&lt;/div&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I hope this post makes it clear how easy it is to make and test advanced rename jobs interactivly on the console by using -WhatIf and command history, and then while ready format as a script, and how powerfull the RegEx support of -match and -Replace is.&lt;/p&gt; &lt;p&gt;Enjoy, &lt;/p&gt; &lt;p&gt;Greetings,&lt;br&gt;/\/\o\/\/&lt;br&gt;Tags : &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-116447095478248104?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/116447095478248104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=116447095478248104' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116447095478248104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116447095478248104'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/11/powershell-advanced-renaming-of-files.html' title='PowerShell : Advanced renaming of files'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-116439076260020809</id><published>2006-11-24T18:52:00.000+01:00</published><updated>2006-11-24T18:52:43.703+01:00</updated><title type='text'>PowerShell : Playing with LeapYears</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;On &amp;nbsp;&lt;a title="Rob van der Woude's Scripting Pages PowerShell" href="http://www.robvanderwoude.com/robnavmonad.html"&gt;Rob van der Woude's Scripting Pages&lt;/a&gt;, there is an excelent PowerShell section,&lt;/p&gt; &lt;p&gt;with some good links and some examples.&lt;/p&gt; &lt;p&gt;one of the examples&amp;nbsp; is how to test a year if it is a leap year.&lt;/p&gt; &lt;p&gt;this script did look a bit for such a trivial task in powerShell, as I did Know that the .NET [dateTime] class did have some handy methods, I started out like this :&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;[datetime]::IsLeapYear(2006)&lt;br&gt;False&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;[datetime]::IsLeapYear(2008)&lt;br&gt;True&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;but ofcourse this was not the only thing the script did do if you look at the original script we just replaced one line&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#008000"&gt;# Check if the specified year is a leap year&lt;/font&gt; &lt;/p&gt; &lt;p&gt;[boolean]$leapyear = ( [boolean]!( $year % 4 ) -and [boolean]( $year % 100 ) ) -or [boolean]!( $year % 400 )&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Read some info from the host &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;[datetime]::IsLeapYear((read-host "Year:"))&lt;br&gt;Year:: 2006&lt;br&gt;False  &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;[datetime]::IsLeapYear((read-host "Year"))&lt;br&gt;Year: 8&lt;br&gt;True&lt;br&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Add some formatting&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;function get-leapYear ($year = (read-host "Year")){"$year = Leapyear : {0}" -f [datetime]::IsLeapYear($Year)}&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;get-leapyear 2008&lt;br&gt;2008 = Leapyear : True&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;  &lt;p&gt;Combine asking the year and providing default value  &lt;p&gt;&amp;nbsp;  &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;function get-leapYear ($year = (read-host "Year")) {if(! $year) {$year = (get-date).year} ; "$year = Leapyear : {0}&lt;br&gt;" -f [datetime]::IsLeapYear($Year)}&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;get-leapYear&lt;br&gt;Year: 2008&lt;br&gt;2008 = Leapyear : True&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;get-leapYear&lt;br&gt;Year:&lt;br&gt;2006 = Leapyear : False&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;get-leapYear 12&lt;br&gt;12 = Leapyear : True&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Gotha with 2 digit years  &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;(get-date -year 12).year -lt (get-date).year&lt;br&gt;True&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;(get-date -year 2012).year -lt (get-date).year&lt;br&gt;False &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;below 30 use 2000 rangle &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;[datetime]::ParseExact("12","yy",$null).year&lt;br&gt;2012&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;so to solve that :&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;function get-leapYear ($year = (read-host "Year")) {if(! $year) {$year = (get-date).year} ; if ($year -lt 100){$yea&lt;br&gt;r = [datetime]::ParseExact($year,"yy",$null).year};"$year = Leapyear : {0}" -f [datetime]::IsLeapYear($Year)}&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;get-leapYear 12&lt;br&gt;2012 = Leapyear : True&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Formatting of the past, present or future  &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;switch ((get-date -year 2007).year - (get-date).year){0 {"is"} default {if ($_ -gt 0){"will be"} else {"was"}}}&lt;br&gt;will be&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;switch ((get-date -year 2005).year - (get-date).year){0 {"is"} default {if ($_ -gt 0){"will be"} else {"was"}}}&lt;br&gt;was&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;switch ((get-date -year 2006).year - (get-date).year){0 {"is"} default {if ($_ -gt 0){"will be"} else {"was"}}}&lt;br&gt;is&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;  &lt;p&gt;So complete :  &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;function get-leapYear ($year = (read-host "Year")) {if(! $year) {$year = (get-date).year} ; if ($year -lt 100){$yea&lt;br&gt;r = [datetime]::ParseExact($year,"yy",$null).year};"$year {0} a Leap Year" -f $(switch ((get-date -year $year).year - (g&lt;br&gt;et-date).year){0 {"is {0}"} default {if ($_ -gt 0){"will {0} be"} else {"was {0}"}}}) -f $(if ( ![datetime]::IsLeapYear(&lt;br&gt;$Year)){"NOT"})}&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;get-leapYear 2005&lt;br&gt;2005 was NOT a Leap Year&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;get-leapYear 2006&lt;br&gt;2006 is NOT a Leap Year&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;&amp;gt;get-leapYear 2007&lt;br&gt;2007 will NOT be a Leap Year&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;get-leapYear 2008&lt;br&gt;2008 will be a Leap Year&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;get-leapYear 12&lt;br&gt;2012 will be a Leap Year&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;  &lt;p&gt;So you can see the sample was not that bad except for not&amp;nbsp;using the [dateTime]::IsLeapYear() function&amp;nbsp;.  &lt;p&gt;but I hope you see from above examples how flexible you can work in PoSH, bu handling the input and formatting in different ways&amp;nbsp;as I tested this all as onliners interactively. &lt;p&gt;now ofcourse some whitespace an variables would be handy. &lt;p&gt;Enjoy,&lt;br&gt;Greetings,&lt;br&gt;/\/\o\/\/&lt;br&gt; &lt;p&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-116439076260020809?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/116439076260020809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=116439076260020809' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116439076260020809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116439076260020809'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/11/powershell-playing-with-leapyears.html' title='PowerShell : Playing with LeapYears'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-116361248538530649</id><published>2006-11-15T18:37:00.000+01:00</published><updated>2006-11-15T18:41:25.386+01:00</updated><title type='text'>Download PowerShell 1.0 RTM</title><content type='html'>as said in last post, PowerShell did RTM yesterday&lt;br /&gt;as anounced on the IT Forum&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx"&gt;&lt;/a&gt;due to Time differences, the RTW was a bit later but here is the link&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx"&gt;Download Windows PowerShell 1.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Enjoy,&lt;br /&gt;&lt;br /&gt;Greetings,&lt;br /&gt;&lt;br /&gt;/\/\o\/\/&lt;br /&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-116361248538530649?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/116361248538530649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=116361248538530649' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116361248538530649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116361248538530649'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/11/download-powershell-10-rtm.html' title='Download PowerShell 1.0 RTM'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-116350103184992819</id><published>2006-11-14T11:41:00.000+01:00</published><updated>2006-11-14T11:43:51.866+01:00</updated><title type='text'>PowerShell goes RTM</title><content type='html'>I just came from the Keynote of the IT Forum,&lt;br /&gt;and did hear the great news that PowerShell goes RTM today.&lt;br /&gt;&lt;br /&gt;More info later.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Enjoy,&lt;br /&gt;Greetings, /\/\o\/\/&lt;br /&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-116350103184992819?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/116350103184992819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=116350103184992819' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116350103184992819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116350103184992819'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/11/powershell-goes-rtm.html' title='PowerShell goes RTM'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-116135842144971917</id><published>2006-10-20T17:33:00.000+02:00</published><updated>2006-10-20T17:33:41.806+02:00</updated><title type='text'>Windows PowerShell Week on ScriptCenter</title><content type='html'>&lt;p&gt;On the scriptcenter on Technet, you can find information about the &lt;a href="http://www.microsoft.com/technet/scriptcenter/webcasts/ps.mspx"&gt;Windows PowerShell Week&lt;/a&gt;&lt;/p&gt; &lt;p&gt;by the Scripting Guy , a series of webcasts about PowerShell,&amp;nbsp;to be held November 6-10. &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Don't miss it !&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Enjoy,  &lt;p&gt;Greetings, /\/\o\/\/  &lt;p&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-116135842144971917?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/116135842144971917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=116135842144971917' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116135842144971917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116135842144971917'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/10/windows-powershell-week-on.html' title='Windows PowerShell Week on ScriptCenter'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-116128862225375788</id><published>2006-10-19T22:10:00.000+02:00</published><updated>2006-10-19T22:10:27.420+02:00</updated><title type='text'>PowerShell : How Can I Split a String Only on Specific Instances of a Character?</title><content type='html'>&lt;p&gt;Hey PowerShell Guy : &lt;a href="http://www.microsoft.com/technet/scriptcenter/resources/qanda/oct06/hey1018.mspx"&gt;How Can I Split a String Only on Specific Instances of a Character?&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;[&lt;/font&gt;regex]::Split("aaa&amp;amp;bbb&amp;amp;amp;ccc&amp;amp;aamp;ddd","&amp;amp;(?!amp)")&lt;br&gt;aaa&lt;br&gt;bbb&amp;amp;amp;ccc&lt;br&gt;aamp;ddd&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Enjoy,  &lt;p&gt;Greetings, /\/\o\/\/  &lt;p&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-116128862225375788?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/116128862225375788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=116128862225375788' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116128862225375788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116128862225375788'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/10/powershell-how-can-i-split-string-only.html' title='PowerShell : How Can I Split a String Only on Specific Instances of a Character?'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-116128632105040780</id><published>2006-10-19T21:32:00.000+02:00</published><updated>2006-10-19T21:32:03.470+02:00</updated><title type='text'>PowerShell : How Can I Tell Whether a Number is Even or Odd?</title><content type='html'>&lt;p&gt;Hey PowerShell Guy : &lt;a href="http://www.microsoft.com/technet/scriptcenter/resources/qanda/oct06/hey1019.mspx"&gt;How Can I Tell Whether a Number is Even or Odd?&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Function check-even ($num) {[bool]!($num%2)}&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;check-even 12&lt;br&gt;True&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;check-even 13&lt;br&gt;False&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Enjoy,  &lt;p&gt;Greetings, /\/\o\/\/  &lt;p&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-116128632105040780?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/116128632105040780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=116128632105040780' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116128632105040780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116128632105040780'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/10/powershell-how-can-i-tell-whether.html' title='PowerShell : How Can I Tell Whether a Number is Even or Odd?'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-116124247118786324</id><published>2006-10-19T09:12:00.000+02:00</published><updated>2006-10-19T17:40:34.696+02:00</updated><title type='text'>PowerShell : 99-bottles-of-beer</title><content type='html'>I came at this page : &lt;a class="bl_itemtitle" title="Site: logOS" href="http://www.oliversick.de/blog/index.php/2006/10/12/99-bottles-of-beernet/" target="_blank"&gt;99-bottles-of-beer.net&lt;/a&gt; ,&lt;br /&gt;&lt;br /&gt;I could not resist making and submitting a PowerShell example to it.&lt;br /&gt;I came to this example :&lt;br /&gt;&lt;br /&gt;&lt;DIV style="FONT-FAMILY: Courier New"&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;99-bottles-of-beer&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: maroon"&gt;99&lt;/SPAN&gt;.&lt;SPAN style="COLOR: maroon"&gt;.1&lt;/SPAN&gt;&amp;nbsp;|%&amp;nbsp;{("{&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&gt;}&amp;nbsp;bottle{&lt;SPAN style="COLOR: maroon"&gt;1&lt;/SPAN&gt;}&amp;nbsp;of&amp;nbsp;beer&amp;nbsp;on&amp;nbsp;the&amp;nbsp;wall,&amp;nbsp;{&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&gt;}&amp;nbsp;bottle{&lt;SPAN style="COLOR: maroon"&gt;1&lt;/SPAN&gt;}&amp;nbsp;of&amp;nbsp;beer. &lt;BR&gt;Take&amp;nbsp;one&amp;nbsp;down&amp;nbsp;and&amp;nbsp;pass&amp;nbsp;it&amp;nbsp;around,&amp;nbsp;{&lt;SPAN style="COLOR: maroon"&gt;2&lt;/SPAN&gt;}&amp;nbsp;bottle{&lt;SPAN style="COLOR: maroon"&gt;3&lt;/SPAN&gt;}&amp;nbsp;of&amp;nbsp;beer&amp;nbsp;on&amp;nbsp;the&amp;nbsp;wall.`n"&amp;nbsp;-f&amp;nbsp; &lt;BR&gt;$_,$(&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;($_&amp;nbsp;-ne&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;1&lt;/SPAN&gt;){&lt;SPAN style="COLOR: maroon"&gt;"s"&lt;/SPAN&gt;}),($_&amp;nbsp;-&lt;SPAN style="COLOR: maroon"&gt;1&lt;/SPAN&gt;),$(&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;($_&amp;nbsp;-ne&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;2&lt;/SPAN&gt;){&lt;SPAN style="COLOR: maroon"&gt;"s"&lt;/SPAN&gt;})).replace(&lt;SPAN style="COLOR: maroon"&gt;'&amp;nbsp;0'&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;'&amp;nbsp;No&amp;nbsp;more'&lt;/SPAN&gt;)}&lt;/DIV&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Note, this sample does handle the bottle(s) and 0 = No More, to keep it at least a bit of a chalenge in PowerShell ;-).&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Enjoy,&lt;br /&gt;&lt;br /&gt;Greetings, /\/\o\/\/&lt;br /&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-116124247118786324?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/116124247118786324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=116124247118786324' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116124247118786324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116124247118786324'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/10/powershell-99-bottles-of-beer.html' title='PowerShell : 99-bottles-of-beer'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-116118935981052895</id><published>2006-10-18T18:33:00.000+02:00</published><updated>2006-12-30T01:38:21.076+01:00</updated><title type='text'>PowerShell : Tabcompletion Part 5</title><content type='html'>&lt;p&gt;I realy added a lot on my TabCompletion :&lt;/p&gt;&lt;p&gt;&lt;br /&gt;this function realy makes PowerShell fly for me :&lt;br /&gt;&lt;/p&gt;&lt;p&gt;***&lt;br /&gt;&lt;em&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;*Edit*&lt;/strong&gt; I made beter version of this script on my new&lt;br /&gt;blog : &lt;/em&gt;&lt;a title="The PowerShell Guy" href="http://thepowershellguy.com/"&gt;The PowerShell Guy&lt;/a&gt;  ( &lt;a href="http://thepowershellguy.com/"&gt;http://ThePowerShellGuy.com&lt;/a&gt; )&lt;/p&gt;&lt;p&gt;&lt;em&gt;As it comes with an installer its much more easy to&lt;br /&gt;setup,&lt;br /&gt;&lt;/em&gt;&lt;em&gt;and it uses one database for all data, it works mostly the&lt;br /&gt;same as this one&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;Just download the PowerTab.ZIP file from the overview page here :&lt;br /&gt;&lt;br /&gt;&lt;/em&gt;&lt;a href="http://thepowershellguy.com/blogs/posh/pages/powertab.aspx"&gt;&lt;em&gt;http://thepowershellguy.com/blogs/posh/pages/powertab.aspx&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;br /&gt;&lt;br /&gt;run PowetTabSetup.Ps1 and you are ready to go&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/em&gt;&lt;p&gt;&lt;em&gt;***&lt;/em&gt;&lt;/p&gt;&lt;p&gt;I will Post my current TabCompletion below, I contains a lot of additions I realy like and the GUI selecting of items in a list I think is handy also  as&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;GUI support&lt;br /&gt;&lt;li&gt;WMI Support&lt;br /&gt;&lt;li&gt;Alias Support&lt;br /&gt;&lt;li&gt;Function Support&lt;br /&gt;&lt;li&gt;History support&lt;br /&gt;&lt;li&gt;() Support (Take Care as all will be executed on Tab)&lt;br /&gt;&lt;li&gt;Custom additions&lt;br /&gt;&lt;li&gt;Loading and saving of Configuration&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Some of the additions in this version might be to specific, could be constructed better or are not consistent,  but this version is my own current version as it has grown I and might need some cleaning up, but I posted this version for  trying out and to tweak it to your need or to get some ideas and to get you started on Custom tab completion, or just use it as is&lt;em&gt; .&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;As I think*Note* this script is also on Codeplex in  : &lt;/em&gt;&lt;a title="PowerShell Utility scipts" href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=PsObject"&gt;&lt;em&gt;PowerShell Utility scipts&lt;/em&gt;&lt;/a&gt; as my last version this works as is.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;For this version to work you need some preparement as it needs some utility scripts and a XML file to work, the code to make the XML file is needed only once, the loading of it needs to be done every time a new shell is started, so it is best placed in your profile: (for testing if you past in all of the codeblocks your also ready to go), &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Utility Functions (to be called in profile)&lt;/strong&gt; &lt;/p&gt;&lt;br /&gt;&lt;div  style="font-family:courier new;"&gt;&lt;span style="color:green;"&gt;# Custom Tab Completion Helper Functions&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="color:blue;"&gt;Function&lt;/span&gt; add-tabCompletion ([&lt;span style="color:blue;"&gt;string&lt;/span&gt;]$&lt;span style="color:blue;"&gt;filter&lt;/span&gt;,[&lt;span style="color:blue;"&gt;string&lt;/span&gt;]$Text,[&lt;span style="color:blue;"&gt;string&lt;/span&gt;]$type){&lt;br /&gt;  $global:dsTabCompletion.Tables[&lt;span style="color:maroon;"&gt;'CustomTabExpansion'&lt;/span&gt;].Rows.Add($&lt;span style="color:blue;"&gt;filter&lt;/span&gt;,$text,$type)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Function&lt;/span&gt; Save-tabCompletion {&lt;br /&gt;  $global:dsTabCompletion.WriteXml(&lt;span style="color:maroon;"&gt;"$PSHome\TabCompletion.xml"&lt;/span&gt;)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Function&lt;/span&gt; Load-tabCompletion {&lt;br /&gt;  $global:dsTabCompletion = new-&lt;span style="color:blue;"&gt;object&lt;/span&gt; data.dataset&lt;br /&gt;  $global:dsTabCompletion.ReadXml(&lt;span style="color:maroon;"&gt;"$PSHome\TabCompletion.xml"&lt;/span&gt;)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Function&lt;/span&gt; Get-tabCompletion {&lt;br /&gt;  $global:dsTabCompletion.tables[&lt;span style="color:maroon;"&gt;'CustomTabExpansion'&lt;/span&gt;]&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Function&lt;/span&gt; New-tabCompletion {&lt;br /&gt;  $global:dsTabCompletion = new-&lt;span style="color:blue;"&gt;object&lt;/span&gt; data.dataset&lt;br /&gt;&lt;br /&gt;  $global:dtCustomTabExpansion = new-Object data.datatable&lt;br /&gt;  [&lt;span style="color:blue;"&gt;VOID&lt;/span&gt;]($global:dtCustomTabExpansion.Columns.add(&lt;span style="color:maroon;"&gt;'Filter'&lt;/span&gt;,[&lt;span style="color:blue;"&gt;string&lt;/span&gt;]))&lt;br /&gt;  [&lt;span style="color:blue;"&gt;VOID&lt;/span&gt;]($global:dtCustomTabExpansion.Columns.add(&lt;span style="color:maroon;"&gt;'Text'&lt;/span&gt;,[&lt;span style="color:blue;"&gt;string&lt;/span&gt;]))&lt;br /&gt;  [&lt;span style="color:blue;"&gt;VOID&lt;/span&gt;]($global:dtCustomTabExpansion.Columns.add(&lt;span style="color:maroon;"&gt;'Type'&lt;/span&gt;,[&lt;span style="color:blue;"&gt;string&lt;/span&gt;]))&lt;br /&gt;  $global:dtCustomTabExpansion.tablename = &lt;span style="color:maroon;"&gt;'CustomTabExpansion'&lt;/span&gt;&lt;br /&gt;  $global:dsTabCompletion.Tables.Add($global:dtCustomTabExpansion)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Function&lt;/span&gt; find-tabCompletion ([&lt;span style="color:blue;"&gt;string&lt;/span&gt;]$&lt;span style="color:blue;"&gt;filter&lt;/span&gt;) {&lt;br /&gt;  $global:dsTabCompletion.Tables[&lt;span style="color:maroon;"&gt;'CustomTabExpansion'&lt;/span&gt;].select(&lt;span style="color:maroon;"&gt;"filter like '$filter'"&lt;/span&gt;) % {$_}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Function&lt;/span&gt; Refresh-TabCompletionAlias {&lt;br /&gt;  $global:dsTabCompletion.Tables[&lt;span style="color:maroon;"&gt;'CustomTabExpansion'&lt;/span&gt;].select(&lt;span style="color:maroon;"&gt;"Type = 'Alias'"&lt;/span&gt;) % {$global:dsTabCompletion.Tables[&lt;span style="color:maroon;"&gt;'CustomTabExpansion'&lt;/span&gt;].rows.remove($_)}&lt;br /&gt;  Get-Alias % {add-tabCompletion $_.name $_.Definition &lt;span style="color:maroon;"&gt;'Alias'&lt;/span&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Function&lt;/span&gt; Refresh-TabCompletionFunction {&lt;br /&gt;  $global:dsTabCompletion.Tables[&lt;span style="color:maroon;"&gt;'CustomTabExpansion'&lt;/span&gt;].select(&lt;span style="color:maroon;"&gt;"Type = 'Function'"&lt;/span&gt;) % {$global:dsTabCompletion.Tables[&lt;span style="color:maroon;"&gt;'CustomTabExpansion'&lt;/span&gt;].rows.remove($_)}&lt;br /&gt;  Get-Command -commandType &lt;span style="color:maroon;"&gt;"Function"&lt;/span&gt;% {add-tabCompletion $_.name $_.name $_.CommandType}&lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Then you need to build the Tab Completion DataBase for first use. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Build XML file (one time only needed)&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;div  style="font-family:courier new;"&gt;&lt;span style="color:green;"&gt;# Create Initial Tab-Completion DataBase&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;New-tabCompletion&lt;br /&gt;&lt;br /&gt;Get-Alias % {add-tabCompletion $_.name $_.Definition &lt;span style="color:maroon;"&gt;'Alias'&lt;/span&gt;}&lt;br /&gt;&lt;br /&gt;Get-Command -commandType &lt;span style="color:maroon;"&gt;"Function, Filter, Cmdlet"&lt;/span&gt;% {add-tabCompletion $_.name $_.name $_.CommandType}&lt;br /&gt;&lt;br /&gt;add-tabCompletion &lt;span style="color:maroon;"&gt;'%'&lt;/span&gt; &lt;span style="color:maroon;"&gt;' foreach-object {}'&lt;/span&gt; &lt;span style="color:maroon;"&gt;'Custom'&lt;/span&gt;&lt;br /&gt;add-tabCompletion &lt;span style="color:maroon;"&gt;'?'&lt;/span&gt; &lt;span style="color:maroon;"&gt;' Where-object {}'&lt;/span&gt; &lt;span style="color:maroon;"&gt;'Custom'&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Save-tabCompletion&lt;br /&gt;&lt;br /&gt;Load-tabCompletion&lt;/div&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;as you can see here, after we did initial fill it we can use the functions to customize it and then save it again,.I also added 2 functions to update the Alias and Function list. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Also as te Tabcompletion function uses a GUI you need to load this help function also :&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Out-DataGridView needed loaded for tabcompletion (profile)&lt;/p&gt;*edit* needed formas library :&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;[void][System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")&lt;/strong&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;&lt;br /&gt;&lt;div  style="font-family:courier new;"&gt;&lt;span style="color:green;"&gt;# Function out-datagridView&lt;/span&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;# shows piplineinput in a GUI using a datagridView&lt;/span&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;# and returns the given field on double-Click or Enter&lt;/span&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;# /\/\o\/\/ 2006 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;# http:mow001.blogspot.com &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Function&lt;/span&gt; out-dataGridView ([&lt;span style="color:blue;"&gt;String&lt;/span&gt;]$ReturnField){ &lt;br /&gt;&lt;br /&gt;  &lt;span style="color:green;"&gt;# Make DataTable from Input &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  $dt = new Data.datatable &lt;br /&gt;  $First = $&lt;span style="color:maroon;"&gt;true&lt;/span&gt; &lt;br /&gt;  &lt;span style="color:blue;"&gt;foreach&lt;/span&gt; ($item &lt;span style="color:blue;"&gt;in&lt;/span&gt; $input){ &lt;br /&gt;    $DR = $DT.NewRow() &lt;br /&gt;    $Item.PsObject.get_properties()  &lt;span style="color:blue;"&gt;foreach&lt;/span&gt; { &lt;br /&gt;      &lt;span style="color:blue;"&gt;If&lt;/span&gt; ($first) { &lt;br /&gt;        $Col =  new-&lt;span style="color:blue;"&gt;object&lt;/span&gt; Data.DataColumn &lt;br /&gt;        $Col.ColumnName = $_.Name.ToString() &lt;br /&gt;        $DT.Columns.Add($Col)       } &lt;br /&gt;      &lt;span style="color:blue;"&gt;if&lt;/span&gt; ($_.value -eq $&lt;span style="color:blue;"&gt;null&lt;/span&gt;) { &lt;br /&gt;        $DR.Item($_.Name) = &lt;span style="color:maroon;"&gt;"[empty]"&lt;/span&gt; &lt;br /&gt;      } &lt;br /&gt;      &lt;span style="color:blue;"&gt;ElseIf&lt;/span&gt; ($_.IsArray) { &lt;br /&gt;        $DR.Item($_.Name) =[&lt;span style="color:blue;"&gt;string&lt;/span&gt;]::Join($_.value ,&lt;span style="color:maroon;"&gt;";"&lt;/span&gt;) &lt;br /&gt;      } &lt;br /&gt;      &lt;span style="color:blue;"&gt;Else&lt;/span&gt; { &lt;br /&gt;        $DR.Item($_.Name) = $_.value &lt;br /&gt;      } &lt;br /&gt;    } &lt;br /&gt;    $DT.Rows.Add($DR) &lt;br /&gt;    $First = $&lt;span style="color:maroon;"&gt;false&lt;/span&gt; &lt;br /&gt;  } &lt;br /&gt;&lt;br /&gt;  &lt;span style="color:green;"&gt;# show Datatable in Form  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  $form = new-&lt;span style="color:blue;"&gt;object&lt;/span&gt; Windows.Forms.form  &lt;br /&gt;  $form.Size = new-&lt;span style="color:blue;"&gt;object&lt;/span&gt; System.Drawing.Size @(&lt;span style="color:maroon;"&gt;1000&lt;/span&gt;,&lt;span style="color:maroon;"&gt;600&lt;/span&gt;)  &lt;br /&gt;  $DG = new-&lt;span style="color:blue;"&gt;object&lt;/span&gt; windows.forms.DataGridView &lt;br /&gt;  $DG.DataSource = $DT.psObject.baseobject  &lt;br /&gt;  $DG.Dock = [System.Windows.Forms.DockStyle]::Fill&lt;br /&gt;  $dg.ColumnHeadersHeightSizeMode = [System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode]::AutoSize&lt;br /&gt;$dg.SelectionMode = &lt;span style="color:maroon;"&gt;'FullRowSelect'&lt;/span&gt;&lt;br /&gt;  $dg.add_DoubleClick({&lt;br /&gt;    $script:ret = $&lt;span style="color:blue;"&gt;this&lt;/span&gt;.SelectedRows % {$_.DataboundItem[&lt;span style="color:maroon;"&gt;"$ReturnField"&lt;/span&gt;]}&lt;br /&gt;    $form.Close()&lt;br /&gt;  })&lt;br /&gt; &lt;br /&gt;  $form.text = &lt;span style="color:maroon;"&gt;"$($myinvocation.line)"&lt;/span&gt; &lt;br /&gt;$form.KeyPreview = $&lt;span style="color:maroon;"&gt;true&lt;/span&gt;&lt;br /&gt;$form.Add_KeyDown({&lt;br /&gt;  &lt;span style="color:blue;"&gt;if&lt;/span&gt; ($_.KeyCode -eq &lt;span style="color:maroon;"&gt;'Enter'&lt;/span&gt;) {&lt;br /&gt;    $script:ret = $DG.SelectedRows % {$_.DataboundItem[&lt;span style="color:maroon;"&gt;"$ReturnField"&lt;/span&gt;]}&lt;br /&gt;    $form.Close()&lt;br /&gt;  }&lt;br /&gt;  &lt;span style="color:blue;"&gt;ElseIf&lt;/span&gt; ($_.KeyCode -eq &lt;span style="color:maroon;"&gt;'Escape'&lt;/span&gt;){&lt;br /&gt;    $form.Close()&lt;br /&gt;  }&lt;br /&gt;}) &lt;br /&gt; &lt;br /&gt;  $form.Controls.Add($DG) &lt;br /&gt;  $Form.Add_Shown({$form.Activate();$dg.AutoResizeColumns()}) &lt;br /&gt;  $script:ret = $&lt;span style="color:blue;"&gt;null&lt;/span&gt; &lt;br /&gt;  [&lt;span style="color:blue;"&gt;void&lt;/span&gt;]$form.showdialog() &lt;br /&gt;  $script:ret&lt;br /&gt;} &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt; &lt;/p&gt;And after that ofcourse load the TabCompletion replacement : &lt;strong&gt;TabCompletion Function (load in profile)&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div  style="font-family:Courier New;"&gt;&lt;span style="color:green;"&gt;# TabExpansion.ps1 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;# RC2 Version 0.5 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;# Replacement of default TabExpansion function &lt;/span&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;# /\/\o\/\/ 2006 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;# www.ThePowerShellGuy.com&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;#$global:dtAssemblies = $null&lt;/span&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;#$global:dtWmiClasses = $null&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;function&lt;/span&gt; TabExpansion { &lt;br /&gt;&lt;br /&gt;    &lt;span style="color:green;"&gt;# This is the default function that gets called for tab expansion. &lt;/span&gt;&lt;br /&gt;    &lt;span style="color:green;"&gt;# Edited by /\/\o\/\/ from the original to handle : &lt;/span&gt;&lt;br /&gt;    &lt;span style="color:green;"&gt;#  - Cached tab completion on types (janel / mow). &lt;/span&gt;&lt;br /&gt;    &lt;span style="color:green;"&gt;#  - Methods and properties of types &lt;/span&gt;&lt;br /&gt;    &lt;span style="color:green;"&gt;#  - shows get_ methods &lt;/span&gt;&lt;br /&gt;    &lt;span style="color:green;"&gt;#  - MultiLevel variable Tab Completion &lt;/span&gt;&lt;br /&gt;    &lt;span style="color:green;"&gt;#  - Bracet Removal        &lt;/span&gt;&lt;br /&gt;    &lt;span style="color:green;"&gt;# Edited by DBMwS: Added Progressbar and Scoped variable name expansion &lt;/span&gt;&lt;br /&gt;    &lt;span style="color:green;"&gt;# /\/\o\/\/ added WMI Tab completion win32_[tab]/cim_[tab]/msft_[tab]&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:green;"&gt;# expansion on aliases / custom aliases&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:green;"&gt;# simple () expansion&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:green;"&gt;# history expansion&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:green;"&gt;# GUI Expansion&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;    param($line, $lastWord) &lt;br /&gt;  &lt;br /&gt;        $_Method = [Management.Automation.PSMemberTypes] &lt;span style="color:maroon;"&gt;'Method,CodeMethod,ScriptMethod,ParameterizedProperty'&lt;/span&gt; &lt;br /&gt;        $_ScopeNames = @(&lt;span style="color:maroon;"&gt;"global"&lt;/span&gt;, &lt;span style="color:maroon;"&gt;"local"&lt;/span&gt;, &lt;span style="color:maroon;"&gt;"script"&lt;/span&gt;, &lt;span style="color:maroon;"&gt;"private"&lt;/span&gt;) &lt;br /&gt;&lt;br /&gt;        &lt;span style="color:blue;"&gt;switch&lt;/span&gt; -regex ($line)  {&lt;br /&gt;                &lt;span style="color:green;"&gt;# Handle property and method expansion on simple () blocks( added /\/\o\/\/)... &lt;/span&gt;&lt;br /&gt;                &lt;span style="color:maroon;"&gt;'^\((.+)\)\.(.*)'&lt;/span&gt; { &lt;br /&gt;                  $val = &lt;span style="color:maroon;"&gt;"($($matches[1]))"&lt;/span&gt;&lt;br /&gt;                  invoke-expression &lt;span style="color:maroon;"&gt;"Get-Member -inputobject $val"&lt;/span&gt; ? {$_.name -like &lt;span style="color:maroon;"&gt;"$($matches[2])*"&lt;/span&gt;}  &lt;span style="color:blue;"&gt;foreach&lt;/span&gt; { &lt;br /&gt;                         &lt;span style="color:blue;"&gt;if&lt;/span&gt; ($_.MemberType -band $_method) &lt;br /&gt;                         { &lt;br /&gt;                       &lt;br /&gt;                             &lt;span style="color:green;"&gt;# Return a method... &lt;/span&gt;&lt;br /&gt;                             $lastword.Substring(&lt;span style="color:maroon;"&gt;0&lt;/span&gt;,$lastword.LastIndexOf(&lt;span style="color:maroon;"&gt;'.'&lt;/span&gt;)) + &lt;span style="color:maroon;"&gt;'.'&lt;/span&gt;  + $_.name + &lt;span style="color:maroon;"&gt;'('&lt;/span&gt; &lt;br /&gt;                         } &lt;br /&gt;                         &lt;span style="color:blue;"&gt;else&lt;/span&gt; { &lt;br /&gt;                            &lt;span style="color:green;"&gt;# Return a property... &lt;/span&gt;&lt;br /&gt;                           $lastword.Substring(&lt;span style="color:maroon;"&gt;0&lt;/span&gt;,$lastword.LastIndexOf(&lt;span style="color:maroon;"&gt;'.'&lt;/span&gt;)) + &lt;span style="color:maroon;"&gt;'.'&lt;/span&gt;  + $_.name&lt;br /&gt;                         } &lt;br /&gt;                    } &lt;br /&gt;                    &lt;span style="color:blue;"&gt;break&lt;/span&gt;; &lt;br /&gt;                } &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;        &lt;span style="color:blue;"&gt;switch&lt;/span&gt; -regex ($lastWord)  {&lt;br /&gt;&lt;br /&gt;                &lt;span style="color:green;"&gt;# GUI Shortcuts &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;                &lt;span style="color:maroon;"&gt;'w_(.*)'&lt;/span&gt; {$global:dtWmiClasses.Select(&lt;span style="color:maroon;"&gt;"name like 'win32_$($matches[1])%'"&lt;/span&gt;,&lt;span style="color:maroon;"&gt;"name"&lt;/span&gt;)  out-dataGridView name}&lt;br /&gt;                &lt;span style="color:maroon;"&gt;'A_(.*)'&lt;/span&gt; {$global:dtAssemblies.Select(&lt;span style="color:maroon;"&gt;"name like '%$($matches[1])%'"&lt;/span&gt;,&lt;span style="color:maroon;"&gt;"name"&lt;/span&gt;)  out-dataGridView name}&lt;br /&gt;                &lt;span style="color:maroon;"&gt;'f_'&lt;/span&gt; {ls &lt;span style="color:blue;"&gt;function&lt;/span&gt;:  select name  out-dataGridView name}&lt;br /&gt;                &lt;span style="color:maroon;"&gt;'d_'&lt;/span&gt; {ls   select Mode,LastWriteTime,Length,Name,fullname  out-dataGridView fullname}&lt;br /&gt;                &lt;span style="color:maroon;"&gt;'e_'&lt;/span&gt; {&lt;span style="color:maroon;"&gt;"@{e={};Name=}"&lt;/span&gt;}&lt;br /&gt;                &lt;span style="color:maroon;"&gt;'h_(.*)'&lt;/span&gt; {Get-History -count &lt;span style="color:maroon;"&gt;900&lt;/span&gt;  ? {$_.CommandLine -like &lt;span style="color:maroon;"&gt;"$($matches[1])*"&lt;/span&gt;}  &lt;span style="color:blue;"&gt;foreach&lt;/span&gt;-&lt;span style="color:blue;"&gt;object&lt;/span&gt; {$_.CommandLine}}&lt;br /&gt;                &lt;span style="color:maroon;"&gt;'g_'&lt;/span&gt; {Get-History -Count &lt;span style="color:maroon;"&gt;100&lt;/span&gt;  out-dataGridView Commandline}&lt;br /&gt;                &lt;span style="color:maroon;"&gt;'c_(.*)'&lt;/span&gt; {$global:dsTabCompletion.Tables[&lt;span style="color:maroon;"&gt;'CustomTabExpansion'&lt;/span&gt;].select(&lt;span style="color:maroon;"&gt;"filter like '$($matches[1])%'"&lt;/span&gt;,&lt;span style="color:maroon;"&gt;"text"&lt;/span&gt;)  out-dataGridView text}&lt;br /&gt;&lt;br /&gt;                &lt;span style="color:green;"&gt;# WMI completion                &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;               &lt;span style="color:maroon;"&gt;'(win32_.*cim_.*MSFT_.*)'&lt;/span&gt; {&lt;br /&gt;                  &lt;span style="color:green;"&gt;# First time fill list&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;                  &lt;span style="color:blue;"&gt;if&lt;/span&gt; (!($global:dtWmiClasses)) {&lt;br /&gt;&lt;br /&gt;                     $global:dtWmiClasses = new data.datatable&lt;br /&gt;                     [&lt;span style="color:blue;"&gt;VOID&lt;/span&gt;]($global:dtWmiClasses.Columns.add(&lt;span style="color:maroon;"&gt;'name'&lt;/span&gt;,[&lt;span style="color:blue;"&gt;string&lt;/span&gt;]))&lt;br /&gt;                     [&lt;span style="color:blue;"&gt;VOID&lt;/span&gt;]($global:dtWmiClasses.Columns.add(&lt;span style="color:maroon;"&gt;'Description'&lt;/span&gt;,[&lt;span style="color:blue;"&gt;string&lt;/span&gt;]))&lt;br /&gt;&lt;br /&gt;                     $WmiClass = [WmiClass]&lt;span style="color:maroon;"&gt;''&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;                     &lt;span style="color:green;"&gt;# Set Enumeration Options &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;                     $opt = new-&lt;span style="color:blue;"&gt;object&lt;/span&gt; system.management.EnumerationOptions &lt;br /&gt;                     $opt.EnumerateDeep = $True &lt;br /&gt;                     $opt.UseAmendedQualifiers = $&lt;span style="color:maroon;"&gt;true&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;                     $i = &lt;span style="color:maroon;"&gt;0&lt;/span&gt; ; write-progress &lt;span style="color:maroon;"&gt;"Adding WMI Classes"&lt;/span&gt; &lt;span style="color:maroon;"&gt;"$i"&lt;/span&gt;&lt;br /&gt;                     $WmiClass.psBase.GetSubclasses($opt)  &lt;span style="color:blue;"&gt;foreach&lt;/span&gt; {&lt;br /&gt;                     $i++ ; &lt;span style="color:blue;"&gt;if&lt;/span&gt; ($i%&lt;span style="color:maroon;"&gt;10&lt;/span&gt; -eq &lt;span style="color:maroon;"&gt;0&lt;/span&gt;) {write-progress &lt;span style="color:maroon;"&gt;"Adding WMI Classes"&lt;/span&gt; &lt;span style="color:maroon;"&gt;"$i"&lt;/span&gt;} &lt;br /&gt;                          [&lt;span style="color:blue;"&gt;void&lt;/span&gt;]$global:dtWmiClasses.rows.add($_.name,($_.psbase.Qualifiers ? {$_.Name -eq &lt;span style="color:maroon;"&gt;'description'&lt;/span&gt;} % {$_.Value}))&lt;br /&gt;                     }&lt;br /&gt;                     write-progress &lt;span style="color:maroon;"&gt;"Adding WMI Classes"&lt;/span&gt; &lt;span style="color:maroon;"&gt;"$i"&lt;/span&gt; -Completed&lt;br /&gt;                   }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                   $global:dtWmiClasses.select(&lt;span style="color:maroon;"&gt;"name like '$($matches[1])%'"&lt;/span&gt;) % {$_.name}&lt;br /&gt;                   &lt;span style="color:blue;"&gt;break&lt;/span&gt;;&lt;br /&gt;               }&lt;br /&gt;&lt;br /&gt;                &lt;span style="color:green;"&gt;# Handle property and method expansion on simple () blocks( added /\/\o\/\/)... &lt;/span&gt;&lt;br /&gt;                &lt;span style="color:maroon;"&gt;'^\((.+)\)\.(.*)'&lt;/span&gt; { &lt;br /&gt;                  $val = &lt;span style="color:maroon;"&gt;"($($matches[1]))"&lt;/span&gt;&lt;br /&gt;                  invoke-expression &lt;span style="color:maroon;"&gt;"Get-Member -inputobject $val"&lt;/span&gt; ? {$_.name -like &lt;span style="color:maroon;"&gt;"$($matches[2])*"&lt;/span&gt;}  &lt;span style="color:blue;"&gt;foreach&lt;/span&gt; { &lt;br /&gt;                         &lt;span style="color:blue;"&gt;if&lt;/span&gt; ($_.MemberType -band $_method) &lt;br /&gt;                         { &lt;br /&gt;                       &lt;br /&gt;                             &lt;span style="color:green;"&gt;# Return a method... &lt;/span&gt;&lt;br /&gt;                             $val + &lt;span style="color:maroon;"&gt;'.'&lt;/span&gt; + $_.name + &lt;span style="color:maroon;"&gt;'('&lt;/span&gt; &lt;br /&gt;                         } &lt;br /&gt;                         &lt;span style="color:blue;"&gt;else&lt;/span&gt; { &lt;br /&gt;                            &lt;span style="color:green;"&gt;# Return a property... &lt;/span&gt;&lt;br /&gt;                           $val + &lt;span style="color:maroon;"&gt;'.'&lt;/span&gt; + $_.name &lt;br /&gt;                         } &lt;br /&gt;                    } &lt;br /&gt;                    &lt;span style="color:blue;"&gt;break&lt;/span&gt;; &lt;br /&gt;                } &lt;br /&gt;                &lt;span style="color:green;"&gt;# Handle property and method expansion (MultiLevel added /\/\o\/\/)... &lt;/span&gt;&lt;br /&gt;                &lt;span style="color:maroon;"&gt;'\$(.+)\.(.*)'&lt;/span&gt; { &lt;br /&gt;                    $variableName =  $matches[&lt;span style="color:maroon;"&gt;1&lt;/span&gt;] &lt;br /&gt;                    $val = &lt;span style="color:maroon;"&gt;'$'&lt;/span&gt; + $matches[&lt;span style="color:maroon;"&gt;1&lt;/span&gt;] &lt;br /&gt;                    $level = $matches[&lt;span style="color:maroon;"&gt;2&lt;/span&gt;].split(&lt;span style="color:maroon;"&gt;'.'&lt;/span&gt;).count &lt;br /&gt;                    &lt;span style="color:blue;"&gt;if&lt;/span&gt; ($level -gt &lt;span style="color:maroon;"&gt;1&lt;/span&gt;) { &lt;br /&gt;                        $ofs = &lt;span style="color:maroon;"&gt;'.'&lt;/span&gt;;$val = &lt;span style="color:maroon;"&gt;'$'&lt;/span&gt; + $variableName + &lt;span style="color:maroon;"&gt;".$($matches[2].split('.')[0..($level -2)])"&lt;/span&gt; &lt;br /&gt;                    } &lt;br /&gt;                    $pat = $matches[&lt;span style="color:maroon;"&gt;2&lt;/span&gt;].split(&lt;span style="color:maroon;"&gt;'.'&lt;/span&gt;)[($level -&lt;span style="color:maroon;"&gt;1&lt;/span&gt;)] + &lt;span style="color:maroon;"&gt;'*'&lt;/span&gt; &lt;br /&gt;                    &lt;span style="color:green;"&gt;# /\/\o\/\/ removed : -and $n -notmatch '^[ge]et_' &lt;/span&gt;&lt;br /&gt;                    &lt;span style="color:green;"&gt;# to get get_ methods on WMI and AD objects &lt;/span&gt;&lt;br /&gt;                    invoke-expression &lt;span style="color:maroon;"&gt;"Get-Member -inputobject $val"&lt;/span&gt;  &lt;span style="color:blue;"&gt;where&lt;/span&gt; {$n = $_.name; $n -like $pat }  &lt;span style="color:blue;"&gt;foreach&lt;/span&gt; { &lt;br /&gt;                         &lt;span style="color:blue;"&gt;if&lt;/span&gt; ($_.MemberType -band $_method) &lt;br /&gt;                         { &lt;br /&gt;                            &lt;span style="color:green;"&gt;# Return a method... &lt;/span&gt;&lt;br /&gt;                             $val + &lt;span style="color:maroon;"&gt;'.'&lt;/span&gt; + $_.name + &lt;span style="color:maroon;"&gt;'('&lt;/span&gt; &lt;br /&gt;                         } &lt;br /&gt;                         &lt;span style="color:blue;"&gt;else&lt;/span&gt; { &lt;br /&gt;                            &lt;span style="color:green;"&gt;# Return a property... &lt;/span&gt;&lt;br /&gt;                           $val + &lt;span style="color:maroon;"&gt;'.'&lt;/span&gt; + $_.name &lt;br /&gt;                         } &lt;br /&gt;                    } &lt;br /&gt;                    &lt;span style="color:blue;"&gt;break&lt;/span&gt;; &lt;br /&gt;                } &lt;br /&gt; &lt;br /&gt;            &lt;span style="color:green;"&gt;# Remove Brackets from typename (/\/\o\/\/) &lt;/span&gt;&lt;br /&gt;               &lt;span style="color:maroon;"&gt;'(\[.*\])=(\w*)'&lt;/span&gt; { &lt;br /&gt;                   &lt;span style="color:maroon;"&gt;"new-Object $($matches[1].replace('[','').replace(']',''))"&lt;/span&gt; &lt;br /&gt;                   &lt;span style="color:blue;"&gt;break&lt;/span&gt;; &lt;br /&gt;               } &lt;br /&gt;&lt;br /&gt;            &lt;span style="color:green;"&gt;# Handle Static methods of Types (/\/\o\/\/).. &lt;/span&gt;&lt;br /&gt;            &lt;span style="color:maroon;"&gt;'(\[.*\])::(\w*)'&lt;/span&gt; { &lt;br /&gt;                invoke-expression &lt;span style="color:maroon;"&gt;"$($matches[1])  gm -static"&lt;/span&gt;  &lt;span style="color:blue;"&gt;where&lt;/span&gt; {$_.name -like &lt;span style="color:maroon;"&gt;"$($matches[2])*"&lt;/span&gt;} % { &lt;br /&gt;                    &lt;span style="color:blue;"&gt;if&lt;/span&gt; ($_.MemberType -band $_Method) { &lt;br /&gt;                        &lt;span style="color:maroon;"&gt;"$($matches[1])::$($_.name)"&lt;/span&gt; + &lt;span style="color:maroon;"&gt;'('&lt;/span&gt; &lt;br /&gt;                    } &lt;span style="color:blue;"&gt;Else&lt;/span&gt; { &lt;br /&gt;                        &lt;span style="color:maroon;"&gt;"$($matches[1])::$($_.name)"&lt;/span&gt; &lt;br /&gt;                    } &lt;br /&gt;                } &lt;br /&gt;                &lt;span style="color:blue;"&gt;break&lt;/span&gt;; &lt;br /&gt;            } &lt;br /&gt;&lt;br /&gt;           &lt;span style="color:green;"&gt;# Handle methods of Types (/\/\o\/\/).. &lt;/span&gt;&lt;br /&gt;            &lt;span style="color:maroon;"&gt;'^(\[.*\]).(\w*)'&lt;/span&gt; { &lt;br /&gt;                invoke-expression &lt;span style="color:maroon;"&gt;"$($matches[1])  gm"&lt;/span&gt;  &lt;span style="color:blue;"&gt;where&lt;/span&gt; {$_.name -like &lt;span style="color:maroon;"&gt;"$($matches[2])*"&lt;/span&gt;} % { &lt;br /&gt;                    &lt;span style="color:blue;"&gt;if&lt;/span&gt; ($_.MemberType -band $_Method) { &lt;br /&gt;                        &lt;span style="color:maroon;"&gt;"$($matches[1]).$($_.name)"&lt;/span&gt; + &lt;span style="color:maroon;"&gt;'('&lt;/span&gt; &lt;br /&gt;                    } &lt;span style="color:blue;"&gt;Else&lt;/span&gt; { &lt;br /&gt;                        &lt;span style="color:maroon;"&gt;"$($matches[1]).$($_.name)"&lt;/span&gt; &lt;br /&gt;                    } &lt;br /&gt;                } &lt;br /&gt;                &lt;span style="color:blue;"&gt;break&lt;/span&gt;; &lt;br /&gt;            } &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;            &lt;span style="color:green;"&gt;# Cache and Handle namespace and TypeNames (/\/\o\/\/) .. &lt;/span&gt;&lt;br /&gt;            &lt;span style="color:maroon;"&gt;'^\[(.*)'&lt;/span&gt; { &lt;br /&gt;                $matched = $matches[&lt;span style="color:maroon;"&gt;1&lt;/span&gt;] &lt;br /&gt;                &lt;span style="color:green;"&gt;# only the first time Fill a DataTable with Typenames,namespaces and dotCount (level) &lt;/span&gt;&lt;br /&gt;                &lt;span style="color:blue;"&gt;if&lt;/span&gt; (!($global:dtAssemblies)) { &lt;br /&gt;                    $global:dtAssemblies = New-&lt;span style="color:blue;"&gt;Object&lt;/span&gt; System.Data.Datatable &lt;br /&gt;                    [&lt;span style="color:blue;"&gt;VOID&lt;/span&gt;]($global:dtAssemblies.Columns.add(&lt;span style="color:maroon;"&gt;'name'&lt;/span&gt;,[&lt;span style="color:blue;"&gt;string&lt;/span&gt;])) &lt;br /&gt;                    [&lt;span style="color:blue;"&gt;VOID&lt;/span&gt;]($global:dtAssemblies.Columns.add(&lt;span style="color:maroon;"&gt;'DC'&lt;/span&gt;,[&lt;span style="color:blue;"&gt;int&lt;/span&gt;])) &lt;br /&gt;                    [&lt;span style="color:blue;"&gt;VOID&lt;/span&gt;]($global:dtAssemblies.Columns.add(&lt;span style="color:maroon;"&gt;'NS'&lt;/span&gt;,[&lt;span style="color:blue;"&gt;string&lt;/span&gt;])) &lt;br /&gt;                    $assemblies = [appdomain]::CurrentDomain.getassemblies() &lt;br /&gt;                    [&lt;span style="color:blue;"&gt;void&lt;/span&gt;] ($assemblies  % {$i = &lt;span style="color:maroon;"&gt;0&lt;/span&gt;} { &lt;br /&gt;                        $i++; &lt;br /&gt;                        [&lt;span style="color:blue;"&gt;int&lt;/span&gt;]$assemblyProgress = ($i * &lt;span style="color:maroon;"&gt;100&lt;/span&gt;) / $assemblies.Length &lt;br /&gt;                        write-progress &lt;span style="color:maroon;"&gt;"Adding Assembly $($_.getName().name):"&lt;/span&gt; &lt;span style="color:maroon;"&gt;"$assemblyProgress"&lt;/span&gt; -perc $assemblyProgress &lt;br /&gt;                         $types = $_.GetTypes() ? {$_.IsPublic -eq $&lt;span style="color:maroon;"&gt;true&lt;/span&gt;}&lt;br /&gt;                        $types % {$j = &lt;span style="color:maroon;"&gt;0&lt;/span&gt;} { &lt;br /&gt;                            $j++; &lt;br /&gt;                            &lt;span style="color:blue;"&gt;if&lt;/span&gt; (($j % &lt;span style="color:maroon;"&gt;200&lt;/span&gt;) -eq &lt;span style="color:maroon;"&gt;0&lt;/span&gt;) { &lt;br /&gt;                                [&lt;span style="color:blue;"&gt;int&lt;/span&gt;]$typeProgress = ($j * &lt;span style="color:maroon;"&gt;100&lt;/span&gt;) / $types.Length &lt;br /&gt;                                write-progress  &lt;span style="color:maroon;"&gt;"Adding types percent complete :"&lt;/span&gt; &lt;span style="color:maroon;"&gt;"$typeProgress"&lt;/span&gt; -perc $typeProgress -id &lt;span style="color:maroon;"&gt;1&lt;/span&gt; &lt;br /&gt;                            } &lt;br /&gt;  &lt;br /&gt;                            $dc = $_.fullName.split(&lt;span style="color:maroon;"&gt;"."&lt;/span&gt;).count - &lt;span style="color:maroon;"&gt;1&lt;/span&gt; &lt;br /&gt;                            $ns = $_.namespace &lt;br /&gt;                            $global:dtAssemblies.rows.add(&lt;span style="color:maroon;"&gt;"$_"&lt;/span&gt;,$dc,$ns) &lt;br /&gt;                        } &lt;br /&gt;&lt;br /&gt;                        &lt;span style="color:green;"&gt;# Stubs added &lt;/span&gt;&lt;br /&gt;                        $dtAssemblies.rows.add(&lt;span style="color:maroon;"&gt;'windows stub'&lt;/span&gt;,&lt;span style="color:maroon;"&gt;2&lt;/span&gt;,&lt;span style="color:maroon;"&gt;'System.Windows'&lt;/span&gt;)&lt;br /&gt;                        write-progress &lt;span style="color:maroon;"&gt;"Adding types percent complete :"&lt;/span&gt; &lt;span style="color:maroon;"&gt;"100"&lt;/span&gt; -perc &lt;span style="color:maroon;"&gt;100&lt;/span&gt; -id &lt;span style="color:maroon;"&gt;1&lt;/span&gt; &lt;br /&gt;                    }) &lt;br /&gt;                } &lt;br /&gt;  &lt;br /&gt;                &lt;span style="color:green;"&gt;# actual tab completion &lt;/span&gt;&lt;br /&gt;                $dots = $matches[&lt;span style="color:maroon;"&gt;1&lt;/span&gt;].split(&lt;span style="color:maroon;"&gt;"."&lt;/span&gt;).count - &lt;span style="color:maroon;"&gt;1&lt;/span&gt; &lt;br /&gt;                &lt;span style="color:blue;"&gt;switch&lt;/span&gt; ($dots) { &lt;br /&gt;                    &lt;span style="color:maroon;"&gt;0&lt;/span&gt; {&lt;span style="color:maroon;"&gt;"[System"&lt;/span&gt;,&lt;span style="color:maroon;"&gt;"[Microsoft"&lt;/span&gt;,&lt;span style="color:maroon;"&gt;"[IronPython"&lt;/span&gt;} &lt;br /&gt;                    Default { &lt;br /&gt;                        $res = @() &lt;br /&gt;                        $res += $global:dtAssemblies.select(&lt;span style="color:maroon;"&gt;"ns like '$($matched)%' and dc = $($dots + 1)"&lt;/span&gt;)   &lt;br /&gt;                            select -uni ns % {&lt;span style="color:maroon;"&gt;"[$($_.ns)"&lt;/span&gt;}; &lt;br /&gt;                        $res += $global:dtAssemblies.select(&lt;span style="color:maroon;"&gt;"name like '$($matched)%' and dc = $dots"&lt;/span&gt;) % {&lt;span style="color:maroon;"&gt;"[$($_.name)]"&lt;/span&gt;} &lt;br /&gt;                        $res &lt;br /&gt;                    } &lt;br /&gt;                } &lt;br /&gt;                &lt;span style="color:blue;"&gt;break&lt;/span&gt;; &lt;br /&gt;            } &lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;            &lt;span style="color:green;"&gt;# Handle expansions for both "Scope Variable Name" and "Type Variable Names" (DbmwS) &lt;/span&gt;&lt;br /&gt;            &lt;span style="color:maroon;"&gt;'(.*^\$)(\w+):(\w*)$'&lt;/span&gt; { &lt;br /&gt;                $type = $matches[&lt;span style="color:maroon;"&gt;2&lt;/span&gt;];        &lt;span style="color:green;"&gt;# function, variable, etc.. that are not scopes &lt;/span&gt;&lt;br /&gt;                $prefix = $matches[&lt;span style="color:maroon;"&gt;1&lt;/span&gt;] + $type;  &lt;span style="color:green;"&gt;# $ + function &lt;/span&gt;&lt;br /&gt;                $typeName = $matches[&lt;span style="color:maroon;"&gt;3&lt;/span&gt;];            &lt;span style="color:green;"&gt;# e.g. in '$function:C', value will be 'C' &lt;/span&gt;&lt;br /&gt;             &lt;br /&gt;                &lt;span style="color:blue;"&gt;if&lt;/span&gt; ($_ScopeNames -contains $type) { &lt;br /&gt;                    &lt;span style="color:green;"&gt;# Scope Variable Name Expansion &lt;/span&gt;&lt;br /&gt;                    &lt;span style="color:blue;"&gt;foreach&lt;/span&gt; ($scopeVariable &lt;span style="color:blue;"&gt;in&lt;/span&gt; &lt;br /&gt;                        (Get-Variable &lt;span style="color:maroon;"&gt;"$($typeName)*"&lt;/span&gt; -Scope $type  Sort-&lt;span style="color:blue;"&gt;Object&lt;/span&gt; name)) { &lt;br /&gt;                        $prefix + &lt;span style="color:maroon;"&gt;":"&lt;/span&gt; + $scopeVariable.Name &lt;br /&gt;                    } &lt;br /&gt;                } &lt;span style="color:blue;"&gt;else&lt;/span&gt; { &lt;br /&gt;                    &lt;span style="color:green;"&gt;# Type name expansion($function:, $variable, $env: ,etc) &lt;/span&gt;&lt;br /&gt;                    &lt;span style="color:blue;"&gt;foreach&lt;/span&gt; ($t &lt;span style="color:blue;"&gt;in&lt;/span&gt; (Get-ChildItem ($type + &lt;span style="color:maroon;"&gt;":"&lt;/span&gt; + $typeName + &lt;span style="color:maroon;"&gt;'*'&lt;/span&gt;)  Sort-&lt;span style="color:blue;"&gt;Object&lt;/span&gt; name)) { &lt;br /&gt;                        $prefix + &lt;span style="color:maroon;"&gt;":"&lt;/span&gt; + $t.Name &lt;br /&gt;                    } &lt;br /&gt;                } &lt;br /&gt;                &lt;span style="color:blue;"&gt;break&lt;/span&gt;; &lt;br /&gt;            } &lt;br /&gt;  &lt;br /&gt;            &lt;span style="color:green;"&gt;# Handle variable name expansion (original)... &lt;/span&gt;&lt;br /&gt;            &lt;span style="color:maroon;"&gt;'(.*^\$)(\w+)$'&lt;/span&gt; { &lt;br /&gt;                $prefix = $matches[&lt;span style="color:maroon;"&gt;1&lt;/span&gt;] &lt;br /&gt;                $varName = $matches[&lt;span style="color:maroon;"&gt;2&lt;/span&gt;] &lt;br /&gt;                &lt;span style="color:blue;"&gt;foreach&lt;/span&gt; ($v &lt;span style="color:blue;"&gt;in&lt;/span&gt; Get-Childitem (&lt;span style="color:maroon;"&gt;'variable:'&lt;/span&gt; + $varName + &lt;span style="color:maroon;"&gt;'*'&lt;/span&gt;)) { &lt;br /&gt;                    $prefix + $v.name &lt;br /&gt;                } &lt;br /&gt;                &lt;span style="color:blue;"&gt;break&lt;/span&gt;; &lt;br /&gt;            } &lt;br /&gt;  &lt;br /&gt;            &lt;span style="color:green;"&gt;# Do completion on parameters (original) ... &lt;/span&gt;&lt;br /&gt;            &lt;span style="color:maroon;"&gt;'^-([\w0-9]*)'&lt;/span&gt; { &lt;br /&gt;                $pat = $matches[&lt;span style="color:maroon;"&gt;1&lt;/span&gt;] + &lt;span style="color:maroon;"&gt;'*'&lt;/span&gt; &lt;br /&gt;  &lt;br /&gt;                &lt;span style="color:green;"&gt;# extract the command name from the string &lt;/span&gt;&lt;br /&gt;                &lt;span style="color:green;"&gt;# first split the string into statements and pipeline elements &lt;/span&gt;&lt;br /&gt;                &lt;span style="color:green;"&gt;# This doesnt handle strings however. &lt;/span&gt;&lt;br /&gt;                $cmdlet = [regex]::Split($line, &lt;span style="color:maroon;"&gt;'[;]'&lt;/span&gt;)[-&lt;span style="color:maroon;"&gt;1&lt;/span&gt;] &lt;br /&gt;  &lt;br /&gt;                &lt;span style="color:green;"&gt;#  Extract the trailing unclosed block &lt;/span&gt;&lt;br /&gt;                &lt;span style="color:blue;"&gt;if&lt;/span&gt; ($cmdlet -match &lt;span style="color:maroon;"&gt;'\{([^\{\}]*)$'&lt;/span&gt;) { &lt;br /&gt;                    $cmdlet = $matches[&lt;span style="color:maroon;"&gt;1&lt;/span&gt;] &lt;br /&gt;                } &lt;br /&gt;  &lt;br /&gt;                &lt;span style="color:green;"&gt;# Extract the longest unclosed parenthetical expression... &lt;/span&gt;&lt;br /&gt;                &lt;span style="color:blue;"&gt;if&lt;/span&gt; ($cmdlet -match &lt;span style="color:maroon;"&gt;'\(([^()]*)$'&lt;/span&gt;) { &lt;br /&gt;                    $cmdlet = $matches[&lt;span style="color:maroon;"&gt;1&lt;/span&gt;] &lt;br /&gt;                } &lt;br /&gt;  &lt;br /&gt;                &lt;span style="color:green;"&gt;# take the first space separated token of the remaining string &lt;/span&gt;&lt;br /&gt;                &lt;span style="color:green;"&gt;# as the command to look up. Trim any leading or trailing spaces &lt;/span&gt;&lt;br /&gt;                &lt;span style="color:green;"&gt;# so you dont get leading empty elements. &lt;/span&gt;&lt;br /&gt;                $cmdlet = $cmdlet.Trim().Split()[&lt;span style="color:maroon;"&gt;0&lt;/span&gt;] &lt;br /&gt;  &lt;br /&gt;                &lt;span style="color:green;"&gt;# now get the info object for it... &lt;/span&gt;&lt;br /&gt;                $cmdlet = @(Get-Command -type &lt;span style="color:maroon;"&gt;'cmdlet,alias'&lt;/span&gt; $cmdlet)[&lt;span style="color:maroon;"&gt;0&lt;/span&gt;] &lt;br /&gt;  &lt;br /&gt;                &lt;span style="color:green;"&gt;# loop resolving aliases... &lt;/span&gt;&lt;br /&gt;                &lt;span style="color:blue;"&gt;while&lt;/span&gt; ($cmdlet.CommandType -eq &lt;span style="color:maroon;"&gt;'alias'&lt;/span&gt;) { &lt;br /&gt;                    $cmdlet = @(Get-Command -type &lt;span style="color:maroon;"&gt;'cmdlet,alias'&lt;/span&gt; $cmdlet.Definition)[&lt;span style="color:maroon;"&gt;0&lt;/span&gt;] &lt;br /&gt;                } &lt;br /&gt;  &lt;br /&gt;                &lt;span style="color:green;"&gt;# expand the parameter sets and emit the matching elements &lt;/span&gt;&lt;br /&gt;                &lt;span style="color:blue;"&gt;foreach&lt;/span&gt; ($n &lt;span style="color:blue;"&gt;in&lt;/span&gt; $cmdlet.ParameterSets  Select-&lt;span style="color:blue;"&gt;Object&lt;/span&gt; -expand parameters) { &lt;br /&gt;                    $n = $n.name &lt;br /&gt;                    &lt;span style="color:blue;"&gt;if&lt;/span&gt; ($n -like $pat) { &lt;span style="color:maroon;"&gt;'-'&lt;/span&gt; + $n } &lt;br /&gt;                } &lt;br /&gt;                &lt;span style="color:blue;"&gt;break&lt;/span&gt;; &lt;br /&gt;            } &lt;br /&gt;&lt;br /&gt;            &lt;span style="color:green;"&gt;# Custom additions&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;            &lt;span style="color:maroon;"&gt;'(.*)'&lt;/span&gt; { &lt;br /&gt;                  $global:dsTabCompletion.Tables[&lt;span style="color:maroon;"&gt;'CustomTabExpansion'&lt;/span&gt;].select(&lt;span style="color:maroon;"&gt;"filter like '$($matches[1])'"&lt;/span&gt;) % {$_.text} &lt;span style="color:green;"&gt;#  AND type = 'Alias'"&lt;/span&gt;&lt;br /&gt;            } &lt;br /&gt;            &lt;span style="color:maroon;"&gt;'(.*)%'&lt;/span&gt; { &lt;br /&gt;                  $global:dsTabCompletion.Tables[&lt;span style="color:maroon;"&gt;'CustomTabExpansion'&lt;/span&gt;].select(&lt;span style="color:maroon;"&gt;"filter like '$($matches[1])%'"&lt;/span&gt;,&lt;span style="color:maroon;"&gt;"text"&lt;/span&gt;) % {$_.text}&lt;br /&gt;            } &lt;br /&gt;            &lt;span style="color:maroon;"&gt;'(.*-.*)'&lt;/span&gt; { &lt;br /&gt;                  $global:dsTabCompletion.Tables[&lt;span style="color:maroon;"&gt;'CustomTabExpansion'&lt;/span&gt;].select(&lt;span style="color:maroon;"&gt;"filter like '$($matches[1])%'"&lt;/span&gt;,&lt;span style="color:maroon;"&gt;"text"&lt;/span&gt;) % {$_.text}&lt;br /&gt;            } &lt;br /&gt;&lt;br /&gt;        }       &lt;span style="color:green;"&gt;# EO switch &lt;/span&gt;&lt;br /&gt;}  &lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;now you are free to edit your tabcompletion&lt;br /&gt;try this now&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="color:#008000;"&gt;# Alias&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="color:#ff0000;"&gt;PoSH&amp;gt;&lt;/span&gt; gwmi&lt;span style="color:#0000a0;"&gt;[tab]&lt;/span&gt;&lt;br /&gt;PoSH&amp;gt; Get-WmiObject win32_sh&lt;span style="color:#0000a0;"&gt;[tab]&lt;/span&gt;&lt;br /&gt;Posh&amp;gt; Get-WmiObject Win32_Share&lt;br /&gt;&lt;p&gt;&lt;span style="color:#008000;"&gt;# Function + CmdLet (on -)&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="color:#ff0000;"&gt;PoSH&amp;gt;&lt;/span&gt; get-t&lt;span style="color:#0000a0;"&gt;[tab]&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;PoSH&amp;gt;&lt;/span&gt;Get-tabCompletion&lt;br /&gt;&lt;p&gt;&lt;span style="color:#008000;"&gt;# Function + CmdLet (on %)&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="color:#ff0000;"&gt;PoSH&amp;gt;&lt;/span&gt;ref%&lt;span style="color:#0000a0;"&gt;[tab]&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;PoSH&amp;gt;&lt;/span&gt;Refresh-TabCompletionAlias&lt;br /&gt;&lt;p&gt;&lt;span style="color:#008000;"&gt;# GUI tabcompletion :&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="color:#ff0000;"&gt;PoSH&amp;gt;&lt;/span&gt;w_sh&lt;span style="color:#0000a0;"&gt;[tab]&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;PoSH&amp;gt;&lt;/span&gt;f_&lt;span style="color:#0000a0;"&gt;[tab]&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;PoSH&amp;gt;&lt;/span&gt;w_ &lt;span style="color:#0000a0;"&gt;[tab]&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="color:#008000;"&gt;# Custom&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="color:#ff0000;"&gt;PoSH&amp;gt;&lt;/span&gt;ls %&lt;span style="color:#0000a0;"&gt;[tab]&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;PoSH&amp;gt;&lt;/span&gt;ls  foreach-object {}&lt;br /&gt;&lt;p&gt;# () resolving&lt;br /&gt;&lt;p&gt;&lt;span style="color:#ff0000;"&gt;PoSH&amp;gt;&lt;/span&gt;(LS).&lt;span style="color:#000080;"&gt;[tab]&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="color:#ff0000;"&gt;PoSH&amp;gt;&lt;/span&gt;(gwmi win32_share).&lt;span style="color:#0000ff;"&gt;[tab]&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Enjoy,&lt;br /&gt;&lt;p&gt;Greetings, /\/\o\/\/&lt;br /&gt;&lt;p&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-116118935981052895?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/116118935981052895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=116118935981052895' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116118935981052895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116118935981052895'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/10/powershell-tabcompletion-part-5.html' title='PowerShell : Tabcompletion Part 5'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-116067760788432434</id><published>2006-10-12T20:26:00.000+02:00</published><updated>2006-10-12T21:48:24.236+02:00</updated><title type='text'>PowerShell : Calendar Function (GUI)</title><content type='html'>I often have a need for a quick Calendar&amp;nbsp; to look up some dates or Week numbers , &lt;/p&gt; &lt;p&gt;you can double click the clock in the systray to do&amp;nbsp;a quick lookup&amp;nbsp;(I often used it for that) but you need to be an Admin to do so, so it is not available on my own workstation using my normal account , also it shows no week numbers&amp;nbsp;and&amp;nbsp;I often need those&amp;nbsp; also &lt;/p&gt; &lt;p&gt;So this trick&amp;nbsp;did help me out on several occasions,&amp;nbsp;but still this is not a really ideal solution.&lt;/p&gt; &lt;p&gt;Hence I made this small PowerShell function that does show a Calendar&amp;nbsp;with WeekNumbers in a Form that closes again on hitting [Enter], &amp;nbsp;that I load in my profile and alias to &lt;strong&gt;Cal&lt;/strong&gt; to keep it&amp;nbsp;ready for a quick lookup of some dates, as you will be surprised how often it comes handy.&lt;/p&gt; &lt;p&gt;&lt;em&gt;(note the dot-space to load in global scope, and the loading forms library in profile (needed for function)&amp;nbsp;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;to test you can also just past the code into the PowerShell console to load the function, and start using the function:&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;[void][System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;. c:\PowerShell\Functions\GetCalendar.ps1&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;and here is the script&amp;nbsp; : &lt;em&gt;(formatted&amp;nbsp;by the&amp;nbsp;html export function&amp;nbsp;from &lt;/em&gt;&lt;a href="http://www.karlprosser.com/coder/?page_id=14"&gt;&lt;em&gt;PowerShell Analyzer&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&amp;nbsp;a&amp;nbsp;great PowerShell editor, if you not know it yet be sure to try it out)&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;?xml version="1.0"?&gt;&lt;/p&gt;&lt;pre&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro SyntaxEditor&lt;br /&gt;http://www.ActiproSoftware.com/Products/DotNet/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; Function Get-Calendar&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; Shows a calendar with WeekNumbers in a Form&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; /\/\o\/\/ 2006&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; www.ThePowerShellGuy.com&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;Function &lt;/span&gt;&lt;span style="color: #ffa500; text-decoration: underline"&gt;get-Calendar&lt;/span&gt;&lt;span style="color: #000000"&gt; { &lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$form&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ffa500; text-decoration: underline"&gt;new-object&lt;/span&gt;&lt;span style="color: #000000"&gt; Windows.Forms.Form &lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$form&lt;/span&gt;&lt;span style="color: #000000"&gt;.text &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000080"&gt;Calendar&lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$form&lt;/span&gt;&lt;span style="color: #000000"&gt;.Size &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ffa500; text-decoration: underline"&gt;new-object&lt;/span&gt;&lt;span style="color: #000000"&gt; Drawing.Size @(&lt;/span&gt;&lt;span style="color: #ff0000"&gt;656&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000"&gt;639&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; Make "Hidden" SelectButton to handle Enter Key&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$btnSelect&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ffa500; text-decoration: underline"&gt;new-object&lt;/span&gt;&lt;span style="color: #000000"&gt; System.Windows.Forms.Button&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$btnSelect&lt;/span&gt;&lt;span style="color: #000000"&gt;.Size &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000080"&gt;1,1&lt;/span&gt;&lt;span style="color: #000080"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$btnSelect&lt;/span&gt;&lt;span style="color: #000000"&gt;.add_Click({ &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$form&lt;/span&gt;&lt;span style="color: #000000"&gt;.close() &lt;br /&gt;  }) &lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$form&lt;/span&gt;&lt;span style="color: #000000"&gt;.Controls.Add(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;$btnSelect&lt;/span&gt;&lt;span style="color: #000000"&gt; ) &lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$form&lt;/span&gt;&lt;span style="color: #000000"&gt;.AcceptButton &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$btnSelect&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; Add Calendar &lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$cal&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ffa500; text-decoration: underline"&gt;new-object&lt;/span&gt;&lt;span style="color: #000000"&gt; System.Windows.Forms.MonthCalendar &lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$cal&lt;/span&gt;&lt;span style="color: #000000"&gt;.ShowWeekNumbers &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$true&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$cal&lt;/span&gt;&lt;span style="color: #000000"&gt;.MaxSelectionCount &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #ff0000"&gt;356&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$cal&lt;/span&gt;&lt;span style="color: #000000"&gt;.Dock &lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000080"&gt;Fill&lt;/span&gt;&lt;span style="color: #000080"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$form&lt;/span&gt;&lt;span style="color: #000000"&gt;.Controls.Add(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;$cal&lt;/span&gt;&lt;span style="color: #000000"&gt;) &lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; Show Form&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$Form&lt;/span&gt;&lt;span style="color: #000000"&gt;.Add_Shown({&lt;/span&gt;&lt;span style="color: #0000ff"&gt;$form&lt;/span&gt;&lt;span style="color: #000000"&gt;.Activate()})  &lt;br /&gt;  [void]&lt;/span&gt;&lt;span style="color: #0000ff"&gt;$form&lt;/span&gt;&lt;span style="color: #000000"&gt;.showdialog() &lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #008000"&gt;#&lt;/span&gt;&lt;span style="color: #008000"&gt; Return Start and end date &lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt; &lt;/span&gt;&lt;span style="color: #0000ff"&gt;$cal&lt;/span&gt;&lt;span style="color: #000000"&gt;.SelectionRange&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #ffa500; text-decoration: underline"&gt;set-alias&lt;/span&gt;&lt;span style="color: #000000"&gt; cal &lt;/span&gt;&lt;span style="color: #ffa500; text-decoration: underline"&gt;get-Calendar&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;strong&gt;* Update *&lt;/strong&gt;As the PSA formatting if the Script gives formatting and pasting problems, I'm looking into this, I also will place the script here in the "old" formatting&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;DIV style="FONT-FAMILY: Courier New"&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Function&amp;nbsp;Get-Calendar&lt;/SPAN&gt; &lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Shows&amp;nbsp;a&amp;nbsp;calendar&amp;nbsp;with&amp;nbsp;WeekNumbers&amp;nbsp;in&amp;nbsp;a&amp;nbsp;Form&lt;/SPAN&gt; &lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;/\/\o\/\/&amp;nbsp;2006&lt;/SPAN&gt; &lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;www.ThePowerShellGuy.com&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;Function&lt;/SPAN&gt;&amp;nbsp;get-Calendar&amp;nbsp;{&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;$form&amp;nbsp;=&amp;nbsp;new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;Windows.Forms.Form&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$form.text&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"Calendar"&lt;/SPAN&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$form.Size&amp;nbsp;=&amp;nbsp;new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;Drawing.Size&amp;nbsp;@(&lt;SPAN style="COLOR: maroon"&gt;656&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;639&lt;/SPAN&gt;)&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Make&amp;nbsp;"Hidden"&amp;nbsp;SelectButton&amp;nbsp;to&amp;nbsp;handle&amp;nbsp;Enter&amp;nbsp;Key&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;$btnSelect&amp;nbsp;=&amp;nbsp;new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;System.Windows.Forms.Button &lt;BR&gt;&amp;nbsp;&amp;nbsp;$btnSelect.Size&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"1,1"&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$btnSelect.add_Click({&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$form.close()&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;})&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$form.Controls.Add($btnSelect&amp;nbsp;)&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$form.AcceptButton&amp;nbsp;=&amp;nbsp;&amp;nbsp;$btnSelect &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Add&amp;nbsp;Calendar&amp;nbsp;&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;$cal&amp;nbsp;=&amp;nbsp;new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;System.Windows.Forms.MonthCalendar&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$cal.ShowWeekNumbers&amp;nbsp;=&amp;nbsp;$&lt;SPAN style="COLOR: maroon"&gt;true&lt;/SPAN&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$cal.MaxSelectionCount&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;356&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$cal.Dock&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;'Fill'&lt;/SPAN&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$form.Controls.Add($cal)&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Show&amp;nbsp;Form&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;$Form.Add_Shown({$form.Activate()})&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;[&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;]$form.showdialog()&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Return&amp;nbsp;Start&amp;nbsp;and&amp;nbsp;end&amp;nbsp;date&amp;nbsp;&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt;&amp;nbsp;$cal.SelectionRange &lt;BR&gt;}&amp;nbsp; &lt;BR&gt;&lt;BR&gt;set-alias&amp;nbsp;cal&amp;nbsp;get-Calendar&lt;/DIV&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;So if you are need a quick calendar, you just need ro do a quick &lt;strong&gt;cal[enter]&lt;/strong&gt;, in the PowerShell console ..and there you go :&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;cal &lt;br /&gt;&lt;p&gt;End Start&lt;br&gt;--- -----&lt;br&gt;10/12/2006 12:00:00 AM 10/12/2006 12:00:00 AM&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;a href="http://photos1.blogger.com/blogger/8006/1759/1600/Cal.0.png"&gt;&lt;img style="cursor: hand" alt="" src="http://photos1.blogger.com/blogger/8006/1759/400/Cal.0.png" border="0"&gt;&lt;/a&gt; &lt;br /&gt;&lt;p&gt;&amp;nbsp;and you can select a timeframe in the calendar to return.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I added a "hidden" button (size 1 by 1) , to handle the [enter] key to close the Form and return the start and end date, to make the calendar more handy&amp;nbsp;to use, as a quick enter will close the form after use&amp;nbsp;and you do not need to use&amp;nbsp; X to close the form, and I still can use fill on the Calendar control. also you can select a range of days in the Calendar and the function will return the Start and the End date of that period to the PowerShell console when it is closed.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$vacation = cal&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$vacation.end &lt;br /&gt;&lt;p&gt;Sunday, November 05, 2006 12:00:00 AM &lt;br /&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$vacation.start &lt;br /&gt;&lt;p&gt;Saturday, October 14, 2006 12:00:00 AM &lt;br /&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$vacation.end - $vacation.start &lt;br /&gt;&lt;p&gt;Days : 22&lt;br&gt;Hours : 0&lt;br&gt;Minutes : 0&lt;br&gt;Seconds : 0&lt;br&gt;Milliseconds : 0&lt;br&gt;Ticks : 19008000000000&lt;br&gt;TotalDays : 22&lt;br&gt;TotalHours : 528&lt;br&gt;TotalMinutes : 31680&lt;br&gt;TotalSeconds : 1900800&lt;br&gt;TotalMilliseconds : 1900800000&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Enjoy, &lt;br /&gt;&lt;p&gt;Greetings, /\/\o\/\/ &lt;br /&gt;&lt;p&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;HR&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-116067760788432434?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/116067760788432434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=116067760788432434' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116067760788432434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116067760788432434'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/10/powershell-calendar-function-gui.html' title='PowerShell : Calendar Function (GUI)'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-116052147673059379</id><published>2006-10-11T01:04:00.000+02:00</published><updated>2006-10-11T01:04:36.890+02:00</updated><title type='text'>PowerShell : WMI Support in RC2 : Privileges and connection settings (Series part 3)</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp; For some actions in WMI you need to enable privileges , for example for the SetDateTime method of win32_operatingsystem,  &lt;p&gt;and how you can use the GUI again to edit settings, and change Classes , and also see posible values of properties also with the searcher you can do the same as we did see in (" &lt;a href="http://mow001.blogspot.com/2006/10/powershell-wmi-support-in-rc2-series_02.html"&gt;PowerShell : WMI Support in RC2 (Series part 2) &lt;/a&gt;"," &lt;a href="http://mow001.blogspot.com/2006/10/powershell-wmi-support-in-rc2-series.html"&gt;PowerShell : WMI Support in RC2 (Series part 1) &lt;/a&gt;"," &lt;p&gt;[WmiSearcher]$roq | opg &lt;p&gt;as I did get a question by &lt;a href="http://gm-it.blogspot.com"&gt;G/\/\E&lt;/a&gt;&amp;nbsp; on the second part of this series, I did this quick post about this &lt;em&gt;&lt;strong&gt;*Remark*&lt;/strong&gt; I did not see&amp;nbsp;the blog item he did make about this,&amp;nbsp;about this when I started this &lt;/em&gt; &lt;p&gt;to see about that strange timeformat see second example, More information&amp;nbsp;about calling methods in next post  &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$win32_Operatingsystem = gwmi win32_Operatingsystem&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$win32_Operatingsystem.SetDateTime("20061010234615.000000+120")&lt;br&gt;&lt;font color="#ff0000"&gt;Exception calling "SetDateTime" : "Access denied "&lt;br&gt;At line:1 char:35&lt;br&gt;+ $win32_Operatingsystem.SetDateTime( &amp;lt;&amp;lt;&amp;lt;&amp;lt; "20061010234615.000000+120")&lt;br&gt;PoSH&amp;gt;&lt;/font&gt;$win32_Operatingsystem.psbase.Scope  &lt;p&gt;IsConnected Options Path&lt;br&gt;----------- ------- ----&lt;br&gt;True System.Management.ConnectionOptions \\localhost\root\cimv2  &lt;p&gt;PoSH&amp;gt;$win32_Operatingsystem.psbase.Scope.options  &lt;p&gt;Locale :&lt;br&gt;Username :&lt;br&gt;Password :&lt;br&gt;Authority :&lt;br&gt;Impersonation : Impersonate&lt;br&gt;Authentication : Unchanged&lt;br&gt;EnablePrivileges : False&lt;br&gt;Context : {}&lt;br&gt;Timeout : 10675199.02:48:05.4775807  &lt;p&gt;&amp;nbsp;  &lt;p&gt;&amp;nbsp;  &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$win32_Operatingsystem.psbase.Scope.options.EnablePrivileges = $true&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$win32_Operatingsystem.SetDateTime("20061010234615.000000+120")  &lt;p&gt;__GENUS : 2&lt;br&gt;__CLASS : __PARAMETERS&lt;br&gt;__SUPERCLASS :&lt;br&gt;__DYNASTY : __PARAMETERS&lt;br&gt;__RELPATH :&lt;br&gt;__PROPERTY_COUNT : 1&lt;br&gt;__DERIVATION : {}&lt;br&gt;__SERVER :&lt;br&gt;__NAMESPACE :&lt;br&gt;__PATH :&lt;br&gt;ReturnValue : 0 &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Here you can see that you can also use the &lt;a href="http://mow001.blogspot.com/2006/04/powershell-out-propertygrid-msh-view.html"&gt;&lt;em&gt;out-PropertyGrid&lt;/em&gt;&lt;/a&gt;&lt;em&gt; &lt;/em&gt;to Edit and test those&amp;nbsp;Settings as I showed in former posts about queries&amp;nbsp;(Change&amp;nbsp;properties and query will be automatically changed), &lt;em&gt;&lt;strong&gt;*Note*&lt;/strong&gt; you need to change to WmiClass eg to win32_share and back Note the changing of paths in the GUI, to reconnect and enable the privileges, note that you have a complete WMI browsel like this,&lt;/em&gt;  &lt;p&gt;also I show the use of a added utility property added to a WMI class in RC2&amp;nbsp;&amp;nbsp;to get a WMI dateTime, a bit more about methods in next post  &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$win32_Operatingsystem = gwmi win32_Operatingsystem&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$win32_Operatingsystem.ConvertfromDateTime("10/10/2006 23:26:15")&lt;br&gt;20061010232615.000000+120 &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$win32_Operatingsystem.SetDateTime("20061010232615.000000+120")&lt;br&gt;&lt;font color="#ff0000"&gt;Exception calling "SetDateTime" : "Access denied "&lt;br&gt;At line:1 char:35&lt;br&gt;+ $win32_Operatingsystem.SetDateTime( &amp;lt;&amp;lt;&amp;lt;&amp;lt; "20061010232615.000000+120")&lt;/font&gt;&lt;br&gt;PoSH&amp;gt;$win32_Operatingsystem | opg&lt;br&gt;Cancel  &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$win32_Operatingsystem | opg&lt;br&gt;Cancel&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;a href="http://photos1.blogger.com/blogger/8006/1759/1600/WmiOpg.png"&gt;&lt;img style="cursor: hand" alt="" src="http://photos1.blogger.com/blogger/8006/1759/400/WmiOpg.png" border="0"&gt;&lt;/a&gt;  &lt;blockquote&gt; &lt;p&gt;&lt;br&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$win32_Operatingsystem.SetDateTime("20061010232615.000000+120") &lt;/p&gt; &lt;p&gt;__GENUS : 2&lt;br&gt;__CLASS : __PARAMETERS&lt;br&gt;__SUPERCLASS :&lt;br&gt;__DYNASTY : __PARAMETERS&lt;br&gt;__RELPATH :&lt;br&gt;__PROPERTY_COUNT : 1&lt;br&gt;__DERIVATION : {}&lt;br&gt;__SERVER :&lt;br&gt;__NAMESPACE :&lt;br&gt;__PATH :&lt;br&gt;ReturnValue : 0&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;Enjoy,  &lt;p&gt;Greetings, /\/\o\/\/  &lt;p&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-116052147673059379?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/116052147673059379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=116052147673059379' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116052147673059379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/116052147673059379'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/10/powershell-wmi-support-in-rc2.html' title='PowerShell : WMI Support in RC2 : Privileges and connection settings (Series part 3)'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-115981981917321934</id><published>2006-10-02T22:10:00.001+02:00</published><updated>2006-10-03T16:33:16.620+02:00</updated><title type='text'>PowerShell : WMI Support in RC2 (Series part 2)</title><content type='html'>&lt;p&gt;In last post &lt;a href="http://mow001.blogspot.com/2006/10/powershell-wmi-support-in-rc2-series.html"&gt;PowerShell : WMI Support in RC2 (Series part 1) &lt;/a&gt;, I started out translating&amp;nbsp;the first WMI post, about more advanced WMI queries, and the helperObjects ( RelatedObjectQuery and RelationshipQuery ) you could use as helpers for creating this kind of Queries&amp;nbsp;.&lt;/p&gt; &lt;p&gt;Also I did show that you could use &lt;a href="http://mow001.blogspot.com/2006/04/powershell-out-propertygrid-msh-view.html"&gt;&lt;em&gt;out-PropertyGrid&lt;/em&gt;&lt;/a&gt;&lt;em&gt; &lt;/em&gt;to Edit and test those queries (Change&amp;nbsp;properties and query will be automatically changed)&lt;/p&gt; &lt;p&gt;This is a great help in doing that advanced queries, but might be a step to much if you are just starting out with PowerShell and/or WMI&lt;/p&gt; &lt;p&gt;In this post I take a step back, and will first &amp;nbsp;cover the different ways to get&amp;nbsp;to&amp;nbsp;just one WMI object / Class, and go on from the Lanman example in last post.&lt;/p&gt; &lt;p&gt;After that I will cover Next post I did on my blog also in October last year the WMI viewer script &lt;a href="http://mow001.blogspot.com/2005/10/wmi-viewer-script-for-msh-gui.html"&gt;WMI viewer script for MSH (GUI) &lt;/a&gt;.&lt;/p&gt; &lt;p&gt;As I already made a out-DataGrid function here : &lt;a href="http://mow001.blogspot.com/2006/05/powershell-out-datagrid-update-and.html"&gt;PowerShell out-&lt;b&gt;DataGrid&lt;/b&gt; update and more Dataset utilities&lt;/a&gt;&amp;nbsp;that can take all sorts of input and show it in a GUI Form with a&amp;nbsp;DataGrid that is a more generic solution, and can also combine datasources , (&lt;em&gt;See Screendumps here : &lt;/em&gt;&lt;a href="http://mow001.blogspot.com/2005/12/msh-gui-viewer-for-dataset-example.html"&gt;&lt;em&gt;MSH GUI Viewer for Dataset Example&lt;/em&gt;&lt;/a&gt;&lt;em&gt; ,)&lt;/em&gt; , Hence we do not really need it anymore, and also I could replace the whole first Part with &lt;em&gt;"gwmi $WmiClass | "&lt;/em&gt;&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; gwmi win32_service | out-DataGrid&lt;br&gt;Cancel&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; gwmi win32_service | select [a-z] | out-DataGrid&lt;br&gt;Cancel&lt;/p&gt;&lt;/blockquote&gt;&lt;a href="http://photos1.blogger.com/blogger/8006/1759/1600/DataGrid.png"&gt;&lt;img style="cursor: hand" alt="" src="http://photos1.blogger.com/blogger/8006/1759/400/DataGrid.png" border="0"&gt;&lt;/a&gt;  &lt;p&gt;but I did still update the script and did put it at the end of this post as it uses the next change in RC2 getting to a static Class, and can take it as input, getting to static classes is much easier in RC2 but more about that in next post.&lt;/p&gt; &lt;p&gt;(we going to use that also in next post about using methods in RC2)&lt;/p&gt; &lt;p&gt;take a note about how I changed the input Parameter to &lt;strong&gt;[WmiClass]&lt;/strong&gt; so it gets more flexible, it will not only take a string but anything it can translate to an WmiClass, so you can also pass it an (Variable with) WMI Class as&amp;nbsp;input, also see I use a Class to get Instances from them not needed in this example but in next post&amp;nbsp;I will show some more examples about using this&amp;nbsp;&amp;nbsp;:&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; get-WMIDatagrid win32_share&lt;br&gt;Cancel&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; [WmiClass]'win32_share'  &lt;p&gt;Win32_Share  &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $WmiClass = [WmiClass]'win32_share'&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; get-WMIDatagrid $WmiClass&lt;br&gt;Cancel&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;For More information about working with DataSets and Tables see my CSV series&amp;nbsp;:&lt;/p&gt; &lt;p&gt;&lt;a href="http://mow001.blogspot.com/2006/03/working-with-csv-files-in-msh-part-one.html"&gt;&lt;em&gt;working with CSV files in MSH (part one)&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&amp;nbsp; &lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://mow001.blogspot.com/2006/03/working-with-csv-files-in-msh-part-two.html"&gt;/\/\o\/\/ PowerShelled: working with &lt;b&gt;CSV&lt;/b&gt; files in MSH (part two)&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://mow001.blogspot.com/2006/04/more-monad-scripts-and-bit-more-csv.html"&gt;/\/\o\/\/ PowerShelled: more Monad scripts, and a bit more &lt;b&gt;CSV&lt;/b&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;And for using datasets with other datasources see these posts :&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Access&lt;/strong&gt; :&lt;br&gt;&lt;a href="http://mow001.blogspot.com/2006/02/scripting-games-last-day-msh-answers.html"&gt;scripting games Last Day MSH answers for event 7 and 8&lt;/a&gt;&lt;br&gt;&lt;strong&gt;Excel&lt;/strong&gt; :&lt;br&gt;&lt;a href="http://mow001.blogspot.com/2005/12/using-ado-to-get-data-from-excel-to.html"&gt;Using ADO to get data from Excel to Dataset in Monad.&lt;/a&gt;&lt;br&gt;&lt;strong&gt;SQL&lt;/strong&gt; (SQL Provider) &lt;br&gt;&lt;a href="http://mow001.blogspot.com/2005/12/getting-and-working-with-sql-server.html"&gt;Getting and Working With SQL Server data in Monad&lt;/a&gt;  &lt;p&gt;&amp;nbsp;  &lt;p&gt;But to go on with WMI here are some way's to to get to an instance of a WMI class, I will show how to use &lt;strong&gt;get-WmiObject&lt;/strong&gt; and also the new ways in PowerShell RC2 using &lt;strong&gt;[WMI]&lt;/strong&gt; (name or Path) or &lt;strong&gt;[WmiSearcher]&lt;/strong&gt; use a WQL query.&lt;/p&gt; &lt;p&gt;As last example I show using [WmiClass] like in the script, as I can only filter client site this is not a good way to do this, but I&amp;nbsp;added it as an first example of the &lt;strong&gt;[WmiClass]&lt;/strong&gt; (see also how it is used in the Updated script, to make the input more flexible and note other ways to do it)more in next post.&amp;nbsp;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#008000"&gt;# Use get-WmiObject&lt;/font&gt; &lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; get-wmiObject win32_service -filter "Name = 'lanmanserver'"  &lt;p&gt;ExitCode : 0&lt;br&gt;Name : lanmanserver&lt;br&gt;ProcessId : 1580&lt;br&gt;StartMode : Auto&lt;br&gt;State : Running&lt;br&gt;Status : OK  &lt;p&gt;&lt;font color="#008000"&gt;# a More Short way&lt;/font&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; gwmi win32_service -f "Name = 'lanmanserver'"  &lt;p&gt;ExitCode : 0&lt;br&gt;Name : lanmanserver&lt;br&gt;ProcessId : 1580&lt;br&gt;StartMode : Auto&lt;br&gt;State : Running&lt;br&gt;Status : OK  &lt;p&gt;&lt;font color="#008000"&gt;# Using [WMI] and a Path&lt;/font&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; [WMI]'\\.\root\cimv2:Win32_Service.Name="lanmanserver"'  &lt;p&gt;ExitCode : 0&lt;br&gt;Name : lanmanserver&lt;br&gt;ProcessId : 1580&lt;br&gt;StartMode : Auto&lt;br&gt;State : Running&lt;br&gt;Status : OK  &lt;p&gt;&lt;font color="#008000"&gt;# only the Name of the Class&lt;/font&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; [WMI]'Win32_Service.Name="lanmanserver"'  &lt;p&gt;ExitCode : 0&lt;br&gt;Name : lanmanserver&lt;br&gt;ProcessId : 1580&lt;br&gt;StartMode : Auto&lt;br&gt;State : Running&lt;br&gt;Status : OK  &lt;p&gt;&lt;font color="#008000"&gt;# Using a [WMISearcher] for using a WQL query to get to the Object&lt;/font&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; [wmiSearcher]"Select * from Win32_Service where Name='lanmanserver'"  &lt;p&gt;Scope : System.Management.ManagementScope&lt;br&gt;Query : System.Management.ObjectQuery&lt;br&gt;Options : System.Management.EnumerationOptions&lt;br&gt;Site :&lt;br&gt;Container :  &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; ([wmiSearcher]"Select * from Win32_Service where Name='lanmanserver'").get()  &lt;p&gt;ExitCode : 0&lt;br&gt;Name : lanmanserver&lt;br&gt;ProcessId : 876&lt;br&gt;StartMode : Auto&lt;br&gt;State : Running&lt;br&gt;Status : OK  &lt;p&gt;&lt;font color="#008000"&gt;# Note that you can use get-Services in PowerShell but this uses .NET not WMI&lt;/font&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; get-service lanmanserver  &lt;p&gt;Status Name DisplayName&lt;br&gt;------ ---- -----------&lt;br&gt;Running lanmanserver Server  &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; get-service lanmanserver | gm  &lt;p&gt;TypeName: System.ServiceProcess.ServiceController  &lt;p&gt;Name MemberType Definition&lt;br&gt;---- ---------- ----------&lt;br&gt;Name AliasProperty Name = ServiceName  &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; [wmiClass]'win32_service'  &lt;p&gt;Win32_Service  &lt;p&gt;&lt;font color="#008000"&gt;# Using WmiClass (filter client site not efficient)&lt;/font&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $win32_service = [wmiClass]'win32_service'&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $win32_service.psbase.GetInstances() |? {$_.name -eq 'lanmanserver'}  &lt;p&gt;ExitCode : 0&lt;br&gt;Name : lanmanserver&lt;br&gt;ProcessId : 1580&lt;br&gt;StartMode : Auto&lt;br&gt;State : Running&lt;br&gt;Status : OK &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;You can see that RC2 makes you very flexible, Here the updated script using [wmiClass] directlyin the Parameter set.  &lt;p&gt;for the Rest I only added a couple of PsBases and changed the topmost hack .  &lt;p&gt;&amp;nbsp;  &lt;div style="font-family: courier new"&gt;&lt;span style="color: green"&gt;#&amp;nbsp;WmiDatagrid.PS1&lt;/span&gt; &lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;Shows&amp;nbsp;Instances&amp;nbsp;of&amp;nbsp;WMIClass&amp;nbsp;in&amp;nbsp;Datagrid&amp;nbsp;&lt;/span&gt; &lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;PowerShell&amp;nbsp;RC2&amp;nbsp;Update&lt;/span&gt; &lt;br&gt;&lt;span style="color: green"&gt;#&lt;/span&gt; &lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;/\/\o\/\/&amp;nbsp;2006&amp;nbsp;&lt;/span&gt; &lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;http://www.ThePowerShellGuy.com&lt;/span&gt; &lt;br&gt;&lt;br&gt;[System.Reflection.Assembly]::LoadWithPartialName(&lt;span style="color: maroon"&gt;"System.windows.forms"&lt;/span&gt;)&amp;nbsp; &lt;br&gt;&lt;br&gt;&lt;span style="color: blue"&gt;function&lt;/span&gt;&amp;nbsp;get-WMIDatagrid&amp;nbsp;{&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;Param&amp;nbsp;([wmiCLass]&amp;nbsp;$WmiClass&amp;nbsp;=&amp;nbsp;{Throw&amp;nbsp;&lt;span style="color: maroon"&gt;"No&amp;nbsp;WMIClass&amp;nbsp;given"&lt;/span&gt;})&amp;nbsp; &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;$MOC&amp;nbsp;=&amp;nbsp;$WmiClass.PSBase.GetInstances()&amp;nbsp; &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;trap{&lt;span style="color: maroon"&gt;"Class&amp;nbsp;Not&amp;nbsp;found"&lt;/span&gt;;&lt;span style="color: blue"&gt;break&lt;/span&gt;}&amp;nbsp; &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;$DT&amp;nbsp;=&amp;nbsp;&amp;nbsp;new-&lt;span style="color: blue"&gt;object&lt;/span&gt;&amp;nbsp;&amp;nbsp;System.Data.DataTable&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;$DT.TableName&amp;nbsp;=&amp;nbsp;$wmiClass&amp;nbsp; &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;$i&amp;nbsp;=&amp;nbsp;&lt;span style="color: maroon"&gt;0&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;$MOC&amp;nbsp;|&amp;nbsp;&lt;span style="color: blue"&gt;foreach&lt;/span&gt;&amp;nbsp;{&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$MO&amp;nbsp;=&amp;nbsp;$_&amp;nbsp; &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green"&gt;#&amp;nbsp;Make&amp;nbsp;a&amp;nbsp;DataRow&amp;nbsp;&lt;/span&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$DR&amp;nbsp;=&amp;nbsp;$DT.NewRow()&amp;nbsp; &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$MO.PSBase.properties&amp;nbsp;|&amp;nbsp;&lt;span style="color: blue"&gt;foreach&lt;/span&gt;&amp;nbsp;{&amp;nbsp; &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$prop&amp;nbsp;=&amp;nbsp;$_&amp;nbsp; &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;If&lt;/span&gt;&amp;nbsp;($i&amp;nbsp;-eq&amp;nbsp;&lt;span style="color: maroon"&gt;0&lt;/span&gt;)&amp;nbsp;&amp;nbsp;{&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green"&gt;#&amp;nbsp;Only&amp;nbsp;On&amp;nbsp;First&amp;nbsp;Row&amp;nbsp;make&amp;nbsp;The&amp;nbsp;Headers&amp;nbsp;&lt;/span&gt; &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$Col&amp;nbsp;=&amp;nbsp;&amp;nbsp;new-&lt;span style="color: blue"&gt;object&lt;/span&gt;&amp;nbsp;System.Data.DataColumn&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$Col.ColumnName&amp;nbsp;=&amp;nbsp;$prop.Name.ToString()&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$prop.PSBase.get_Qualifiers()&amp;nbsp;|&amp;nbsp;&lt;span style="color: blue"&gt;foreach&lt;/span&gt;&amp;nbsp;{&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;If&lt;/span&gt;&amp;nbsp;($_.Name.ToLower()&amp;nbsp;-eq&amp;nbsp;&lt;span style="color: maroon"&gt;"key"&lt;/span&gt;)&amp;nbsp;{&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$Col.ColumnName&amp;nbsp;=&amp;nbsp;$Col.ColumnName&amp;nbsp;+&amp;nbsp;&lt;span style="color: maroon"&gt;"*"&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$DT.Columns.Add($Col)&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp; &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green"&gt;#fill&amp;nbsp;dataRow&amp;nbsp;&amp;nbsp;&lt;/span&gt; &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;if&lt;/span&gt;&amp;nbsp;($prop.value&amp;nbsp;-eq&amp;nbsp;$&lt;span style="color: blue"&gt;null&lt;/span&gt;)&amp;nbsp;{&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$DR.Item($prop.Name)&amp;nbsp;=&amp;nbsp;&lt;span style="color: maroon"&gt;"[empty]"&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;ElseIf&lt;/span&gt;&amp;nbsp;($prop.IsArray)&amp;nbsp;{&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$DR.Item($prop.Name)&amp;nbsp;=[&lt;span style="color: blue"&gt;string&lt;/span&gt;]::Join($prop.value&amp;nbsp;,&lt;span style="color: maroon"&gt;";"&lt;/span&gt;)&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;Else&lt;/span&gt;&amp;nbsp;{&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$DR.Item($prop.Name)&amp;nbsp;=&amp;nbsp;$prop.value&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green"&gt;#Item&amp;nbsp;is&amp;nbsp;Key&amp;nbsp;try&amp;nbsp;again&amp;nbsp;with&amp;nbsp;*&amp;nbsp;&lt;/span&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trap{$DR.Item(&lt;span style="color: maroon"&gt;"$($prop.Name)*"&lt;/span&gt;)&amp;nbsp;=&amp;nbsp;$prop.Value.tostring();&lt;span style="color: blue"&gt;continue&lt;/span&gt;}&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: green"&gt;#&amp;nbsp;Add&amp;nbsp;the&amp;nbsp;row&amp;nbsp;to&amp;nbsp;the&amp;nbsp;DataTable&amp;nbsp;&lt;/span&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$DT.Rows.Add($DR)&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$i&amp;nbsp;+=&amp;nbsp;&lt;span style="color: maroon"&gt;1&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;$form&amp;nbsp;=&amp;nbsp;new-&lt;span style="color: blue"&gt;object&lt;/span&gt;&amp;nbsp;&lt;span style="color: maroon"&gt;"System.Windows.Forms.Form"&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;$form.Size&amp;nbsp;=&amp;nbsp;new-&lt;span style="color: blue"&gt;object&lt;/span&gt;&amp;nbsp;System.Drawing.Size&amp;nbsp;@(&lt;span style="color: maroon"&gt;800&lt;/span&gt;,&lt;span style="color: maroon"&gt;400&lt;/span&gt;)&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;$DG&amp;nbsp;=&amp;nbsp;new-&lt;span style="color: blue"&gt;object&lt;/span&gt;&amp;nbsp;&lt;span style="color: maroon"&gt;"System.windows.forms.DataGrid"&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;$DG.CaptionText&amp;nbsp;=&amp;nbsp;&lt;span style="color: maroon"&gt;"$wmiClass&amp;nbsp;$($DT.Count)"&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;$DG.AllowSorting&amp;nbsp;=&amp;nbsp;$True&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;$DG.DataSource&amp;nbsp;=&amp;nbsp;$DT&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;$DG.Dock&amp;nbsp;=&amp;nbsp;[System.Windows.Forms.DockStyle]::Fill&amp;nbsp; &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: green"&gt;#show&amp;nbsp;the&amp;nbsp;Form&amp;nbsp;&lt;/span&gt; &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;$form.text&amp;nbsp;=&amp;nbsp;&lt;span style="color: maroon"&gt;"$wmiCLass"&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;$form.Controls.Add($DG)&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;$Form.Add_Shown({$form.Activate()})&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;$form.showdialog()&amp;nbsp; &lt;br&gt;}&amp;nbsp; &lt;br&gt;&lt;br&gt;set-alias&amp;nbsp;gwd&amp;nbsp;get-WMIDatagrid&amp;nbsp;&lt;/div&gt; &lt;p&gt;More very cool RC2 WMI stuff in next part of this series about calling WMI Methods !!, there the real power of the changes&amp;nbsp;made in WMI will show !&amp;nbsp;  &lt;p&gt;Enjoy,  &lt;p&gt;Greetings, /\/\o\/\/  &lt;p&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-115981981917321934?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/115981981917321934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=115981981917321934' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115981981917321934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115981981917321934'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/10/powershell-wmi-support-in-rc2-series_02.html' title='PowerShell : WMI Support in RC2 (Series part 2)'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-115966144799680596</id><published>2006-10-01T02:10:00.000+02:00</published><updated>2006-10-01T02:17:13.516+02:00</updated><title type='text'>PowerShell : WMI Support in RC2 (Series part 1)</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;em&gt;As the WMI Support in PowerShell as also changed in RC2, &lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;I will start a new WMI series by translating former WMI posts on my blog to PowerShell RC2, and I will show what has changed, &lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;Opposed to what I think about the new Active Directory Support See : &amp;nbsp;&lt;a href="http://mow001.blogspot.com/2006/09/powershell-rc2-and-active-directory_29.html"&gt;PowerShell RC2 and Active Directory Part 2 &lt;/a&gt;, &lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;In this Case I think the wrapper&amp;nbsp;does add value, here also a bit more PSBase is needed, but the added functional in this case I think is much more as what the ADSI wrapper does and I has much less impact on&amp;nbsp;working interactively&amp;nbsp;&amp;nbsp;, &lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;So for now I decided I like it, or working with it and&amp;nbsp;the translating of older WMI post in this series,&amp;nbsp;does bring up some hidden problems,&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;I will start with the First WMI example I did on my blog (&lt;/em&gt;&lt;a href="http://mow001.blogspot.com/2005/10/lets-query-wmi-from-msh.html"&gt;&lt;em&gt;Lets Query WMI from MSH&lt;/em&gt;&lt;/a&gt;&lt;em&gt;)&amp;nbsp;in&amp;nbsp;the first Month&amp;nbsp;October 2005 about&amp;nbsp; RelatedObjectQuery 's&amp;nbsp; in WMI, &lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;as I was just starting then with Monad (Codename for PowerShell at that time), and did go on from a VbScript Example, I did copy the old post and will follow it in RC2 &amp;nbsp;in this re-post and I will translate the&amp;nbsp;scripts inbetween the old text&amp;nbsp;adding comments and changes to it (Italic)., also I will show the use of out-PropertyGrid&lt;em&gt;&amp;nbsp;&amp;nbsp;&lt;/em&gt;&lt;a title="powershell-out-propertygrid-msh-view.html" href="http://mow001.blogspot.com/2006/04/powershell-out-propertygrid-msh-view.html"&gt;&lt;em&gt;PowerShell : out-PropertyGrid&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&amp;nbsp; that is very handy for&amp;nbsp;editing the WMI Queries in a GUI Form (load windows forms library first see example).&lt;/em&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;here is the edited post :&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://mow001.blogspot.com/2005/10/lets-query-wmi-from-msh.html"&gt;Lets Query WMI from MSH&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;*Original text*&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;ls, as I was answering a post in the NG, about a vbscript to get dependent services the (corrected) script looks like this : &lt;/p&gt;&lt;pre&gt;&lt;span style="color: blue"&gt;Dim&lt;/span&gt; UnArgs&lt;br /&gt;&lt;span style="color: blue"&gt;Set&lt;/span&gt; UnArgs = WScript.Arguments.Unnamed&lt;br /&gt;WScript.Echo UnArgs(&lt;span style="color: maroon"&gt;0&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;strComputer = &lt;span style="color: maroon"&gt;"."&lt;/span&gt;&lt;br /&gt; &lt;span style="color: blue"&gt;Set&lt;/span&gt; objWMIService = GetObject(&lt;span style="color: maroon"&gt;"winmgmts:"&lt;/span&gt; _&lt;br /&gt;     &amp;amp; &lt;span style="color: maroon"&gt;"{impersonationLevel=impersonate}!\\"&lt;/span&gt; &amp;amp; strComputer &amp;amp; &lt;span style="color: maroon"&gt;"\root\cimv2"&lt;/span&gt;)&lt;br /&gt; &lt;span style="color: blue"&gt;Set&lt;/span&gt; colServiceList = objWMIService.ExecQuery(&lt;span style="color: maroon"&gt;"Associators of "&lt;/span&gt; _&lt;br /&gt;     &amp;amp; &lt;span style="color: maroon"&gt;"{Win32_Service.Name='"&lt;/span&gt; &amp;amp; UnArgs(&lt;span style="color: maroon"&gt;0&lt;/span&gt;) &amp;amp; &lt;span style="color: maroon"&gt;"'} Where "&lt;/span&gt; _&lt;br /&gt;         &amp;amp; &lt;span style="color: maroon"&gt;"AssocClass=Win32_DependentService "&lt;/span&gt; &amp;amp; &lt;span style="color: maroon"&gt;"Role=Antecedent"&lt;/span&gt; )&lt;br /&gt;&lt;br /&gt; &lt;span style="color: blue"&gt;for&lt;/span&gt; &lt;span style="color: blue"&gt;each&lt;/span&gt; s &lt;span style="color: blue"&gt;in&lt;/span&gt;  colServiceList&lt;br /&gt;  WScript.Echo s.name&lt;br /&gt;&lt;span style="color: blue"&gt;next&lt;/span&gt; &lt;/pre&gt;this is a bit more as the standard WMI get propery, and involves more than 1 WMI-class. I decided to make it in MSH also :. at first I came with this : &lt;pre&gt;&lt;span style="color: blue"&gt;Function&lt;/span&gt; GetDep {&lt;br /&gt;  $mos = (&lt;span style="color: blue"&gt;new&lt;/span&gt;-&lt;span style="color: blue"&gt;object&lt;/span&gt; system.management.ManagementObjectSearcher)&lt;br /&gt;  $mos.Query = &lt;span style="color: maroon"&gt;"Associators of {Win32_Service.Name='"&lt;/span&gt; + $Args[&lt;span style="color: maroon"&gt;0&lt;/span&gt;] + &lt;span style="color: maroon"&gt;"'} Where AssocClass=Win32_DependentService Role=Antecedent"&lt;/span&gt;&lt;br /&gt;  $mos.&lt;span style="color: blue"&gt;get&lt;/span&gt;()&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;* Update *&lt;/strong&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;As you can see, if you past this script into the PowerShell RC2 Console&amp;nbsp;it still works&amp;nbsp;&amp;nbsp;:&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; Function GetDep {&lt;br&gt;&amp;gt;&amp;gt; $mos = (new-object system.management.ManagementObjectSearcher)&lt;br&gt;&amp;gt;&amp;gt; $mos.Query = "Associators of {Win32_Service.Name='" + $Args[0] + "'} Where AssocClass=Win32_DependentService Role=A&lt;br&gt;ntecedent"&lt;br&gt;&amp;gt;&amp;gt; $mos.get()&lt;br&gt;&amp;gt;&amp;gt; }&lt;br&gt;&amp;gt;&amp;gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; getdep 'lanmanserver' &lt;br /&gt;&lt;p&gt;ExitCode : 0&lt;br&gt;Name : Browser&lt;br&gt;ProcessId : 876&lt;br&gt;StartMode : Auto&lt;br&gt;State : Running&lt;br&gt;Status : OK &lt;br /&gt;&lt;p&gt;ExitCode : 0&lt;br&gt;Name : Dfs&lt;br&gt;ProcessId : 1264&lt;br&gt;StartMode : Auto&lt;br&gt;State : Running&lt;br&gt;Status : OK &lt;br /&gt;&lt;p&gt;ExitCode : 0&lt;br&gt;Name : Netlogon&lt;br&gt;ProcessId : 432&lt;br&gt;StartMode : Auto&lt;br&gt;State : Running&lt;br&gt;Status : OK&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;But in PowerShell RC2 we can&amp;nbsp;use the &amp;nbsp;[WmiSearcher]&amp;nbsp; "intrinsic type" (From Release notes)&amp;nbsp;,&amp;nbsp; so I did started out testing&amp;nbsp;interacive in the PowerShell Conole&amp;nbsp;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;/em&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; [wmiSearcher]("Associators of {Win32_Service.Name='" + $Args[0] + "'} Where AssocClass=Win32_DependentService Role=Antecedent") &lt;br /&gt;&lt;p&gt;Scope : System.Management.ManagementScope&lt;br&gt;Query : System.Management.ObjectQuery&lt;br&gt;Options : System.Management.EnumerationOptions&lt;br&gt;Site :&lt;br&gt;Container : &lt;br /&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; ([wmiSearcher]"Associators of {Win32_Service.Name='lanmanserver'} Where AssocClass=Win32_DependentService Role=Antecedent").get() &lt;br /&gt;&lt;p&gt;ExitCode : 0&lt;br&gt;Name : Browser&lt;br&gt;ProcessId : 876&lt;br&gt;StartMode : Auto&lt;br&gt;State : Running&lt;br&gt;Status : OK &lt;br /&gt;&lt;p&gt;ExitCode : 0&lt;br&gt;Name : Dfs&lt;br&gt;ProcessId : 1264&lt;br&gt;StartMode : Auto&lt;br&gt;State : Running&lt;br&gt;Status : OK &lt;br /&gt;&lt;p&gt;ExitCode : 0&lt;br&gt;Name : Netlogon&lt;br&gt;ProcessId : 432&lt;br&gt;StartMode : Auto&lt;br&gt;State : Running&lt;br&gt;Status : OK&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;also I would do some things a bit different now, here is the&amp;nbsp;translated script for PowerShell RC2 :&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;div style="font-family: courier new"&gt;&lt;span style="color: green"&gt;#&amp;nbsp;PowerShell&amp;nbsp;RC2&amp;nbsp;Function&amp;nbsp;to&amp;nbsp;get&amp;nbsp;Services&amp;nbsp;that&amp;nbsp;depent&amp;nbsp;on&amp;nbsp;the&amp;nbsp;given&amp;nbsp;ServiceName&lt;/span&gt; &lt;br&gt;&lt;br&gt;&lt;span style="color: blue"&gt;Function&lt;/span&gt;&amp;nbsp;Get-DependentService&amp;nbsp;([&lt;span style="color: blue"&gt;String&lt;/span&gt;]$ServiceName)&amp;nbsp;{ &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;$WmiSearcher&amp;nbsp;=&amp;nbsp;[wmiSearcher]&lt;span style="color: maroon"&gt;"Associators&amp;nbsp;of&amp;nbsp;{Win32_Service.Name='$ServiceName'}&amp;nbsp;Where&amp;nbsp;AssocClass=Win32_DependentService&amp;nbsp;Role=Antecedent"&lt;/span&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;$WmiSearcher.get() &lt;br&gt;&lt;br&gt;} &lt;br&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;You can See I changed to a Named Parameter for the service Name to make things more clear, opposed the $Args[0] I did use&amp;nbsp;in the Monad examples , and I did a make use of the Variable handling&amp;nbsp;of PowerShell&amp;nbsp;that will expand in double quoted strings but both where possible at that time also (You can see that I was using a more VbScript way as I was just starting out with PowerShell at that time and still did "think VbScript"&amp;nbsp; as I was less used to PowerShell)&amp;nbsp;,&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;The Difference in RC2 is the [WmiSearcher]&amp;nbsp; "intrinsic type" , so it is not needed anymore to use new-object system.management.ManagementObjectSearcher to get the .NET object&amp;nbsp;, also the next remark in the Original is Covered in RC2 :&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; [WMI]'\\MOWDC001\root\cimv2:Win32_Service.Name="lanmanserver"' &lt;br /&gt;&lt;p&gt;ExitCode : 0&lt;br&gt;Name : lanmanserver&lt;br&gt;ProcessId : 876&lt;br&gt;StartMode : Auto&lt;br&gt;State : Running&lt;br&gt;Status : OK&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;the rest is all still working only you need to use PSBase as with the [adsi] wrapper, but this time the wrapper shows the Methods of the Win32_Share class and we can invoke them directly,&amp;nbsp;we &amp;nbsp;see&amp;nbsp; the methods of the WMIclass in the Get-Member&amp;nbsp;and have Tab Completion for them&amp;nbsp;and this is very handy &lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;As we needed to Invoke them in PowerShell before RC2 , and could not see them, so in this case the wrapper has much more added value.&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; (get-wmiObject win32_service -filter "Name = 'lanmanserver'") | gm &lt;br /&gt;&lt;p&gt;TypeName: System.Management.ManagementObject#root\cimv2\Win32_Service &lt;br /&gt;&lt;p&gt;Name MemberType Definition&lt;br&gt;---- ---------- ----------&lt;br&gt;Change Method System.Management.ManagementBaseObject Change(System.String DisplayName, System...&lt;br&gt;ChangeStartMode Method System.Management.ManagementBaseObject ChangeStartMode(System.String StartMode)&lt;br&gt;InterrogateService Method System.Management.ManagementBaseObject InterrogateService()&lt;br&gt;PauseService Method System.Management.ManagementBaseObject PauseService()&lt;br&gt;ResumeService Method System.Management.ManagementBaseObject ResumeService()&lt;br&gt;StartService Method System.Management.ManagementBaseObject StartService()&lt;br&gt;StopService Method System.Management.ManagementBaseObject StopService()&lt;br&gt;UserControlService Method System.Management.ManagementBaseObject UserControlService(System.Byte ControlCode) &lt;br /&gt;&lt;p&gt;... &lt;br /&gt;&lt;p&gt;&amp;nbsp; &lt;br /&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; (get-wmiObject win32_service -filter "Name = 'lanmanserver'").PsBase | gm &lt;br /&gt;&lt;p&gt;TypeName: System.Management.Automation.PSMemberSet &lt;br /&gt;&lt;p&gt;Name MemberType Definition&lt;br&gt;---- ---------- ----------&lt;br&gt;add_Disposed Method System.Void add_Disposed(EventHandler value)&lt;br&gt;Clone Method System.Object Clone()&lt;br&gt;CompareTo Method System.Boolean CompareTo(ManagementBaseObject otherObject, Compariso...&lt;br&gt;CopyTo Method System.Management.ManagementPath CopyTo(ManagementPath path), System...&lt;br&gt;CreateObjRef Method System.Runtime.Remoting.ObjRef CreateObjRef(Type requestedType)&lt;br&gt;Delete Method System.Void Delete(), System.Void Delete(DeleteOptions options), Sys...&lt;br&gt;Dispose Method System.Void Dispose()&lt;br&gt;Equals Method System.Boolean Equals(Object obj)&lt;br&gt;Get Method System.Void Get(), System.Void Get(ManagementOperationObserver watcher)&lt;br&gt;GetHashCode Method System.Int32 GetHashCode()&lt;br&gt;GetLifetimeService Method System.Object GetLifetimeService()&lt;br&gt;GetMethodParameters Method System.Management.ManagementBaseObject GetMethodParameters(String me...&lt;br&gt;GetPropertyQualifierValue Method System.Object GetPropertyQualifierValue(String propertyName, String ...&lt;br&gt;GetPropertyValue Method System.Object GetPropertyValue(String propertyName)&lt;br&gt;GetQualifierValue Method System.Object GetQualifierValue(String qualifierName)&lt;br&gt;GetRelated Method System.Management.ManagementObjectCollection GetRelated(), System.Ma...&lt;br&gt;GetRelationships Method System.Management.ManagementObjectCollection GetRelationships(), Sys...&lt;br&gt;GetText Method System.String GetText(TextFormat format)&lt;br&gt;GetType Method System.Type GetType() &lt;br /&gt;&lt;p&gt;...&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;I will cover the Methods in&amp;nbsp; more detail in later posts in this Series, for the following examples we need to add&amp;nbsp; PSBase at some places, for the rest it works the same only we can start the Query we constucted much easier , see next update below following the original text how the use the Query in RC2 , here is how it looks in RC2 with PSbase before the method, but first the example on how the change the original code&amp;nbsp;&amp;nbsp;:.&lt;/em&gt; &lt;br /&gt;&lt;p&gt;&amp;nbsp; &lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; (get-wmiObject win32_service -filter "Name = 'lanmanserver'").PSBase.GetRelated($null,"Win32_DependentService",$null,$null,$null,"Antecedent",$false,$null) &lt;br /&gt;&lt;p&gt;ExitCode : 0&lt;br&gt;Name : Browser&lt;br&gt;ProcessId : 876&lt;br&gt;StartMode : Auto&lt;br&gt;State : Running&lt;br&gt;Status : OK &lt;br /&gt;&lt;p&gt;ExitCode : 0&lt;br&gt;Name : Dfs&lt;br&gt;ProcessId : 1264&lt;br&gt;StartMode : Auto&lt;br&gt;State : Running&lt;br&gt;Status : OK &lt;br /&gt;&lt;p&gt;ExitCode : 0&lt;br&gt;Name : Netlogon&lt;br&gt;ProcessId : 432&lt;br&gt;StartMode : Auto&lt;br&gt;State : Running&lt;br&gt;Status : OK&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp; &lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;*Original text*&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;(you can not use a Moniker to connect to WMI as in VBscript) But after that I thought .. this may be correct but not realy MSH. Hence, I did look at the get-WMIObject function. first how to get only the wanted Class. the get-WMIObject uses - filter for this : &lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;get-wmiObject win32_service -filter "Name ="lanmanserver"&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;then how to get the related class&lt;/p&gt;&lt;br /&gt;&lt;p&gt;a Get-Method on the Object revealed the GetRelated Property&lt;/p&gt;&lt;br /&gt;&lt;p&gt;hence ,&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;pre&gt;&lt;span style="color: blue"&gt;Function&lt;/span&gt; GetServiceDeps {($s = get-wmiObject win32_service -&lt;span style="color: blue"&gt;filter&lt;/span&gt; &lt;span style="color: maroon"&gt;"Name = '$($args[0])'"&lt;/span&gt;).GetRelated(&lt;span style="color: maroon"&gt;"win32_service"&lt;/span&gt;)}&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;And Ready ..&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Much more Clean, shorter and more MSH&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;but then again .....maybe NOT..... (c) LSL&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I did forget the Role-part this does not matter for "lanmanserver" so I did not see it at first but this will give also the relations the service is dependend on.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;OK, lets look again at that Method :&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;pre&gt;MSH G:\Monad&amp;gt; (get-wmiObject win32_service -&lt;span style="color: blue"&gt;filter&lt;/span&gt; &lt;span style="color: maroon"&gt;"Name = 'lanmanserver'"&lt;/span&gt;).GetRelated.OverloadDefinitions&lt;br /&gt;System.Management.ManagementObjectCollection GetRelated()&lt;br /&gt;System.Management.ManagementObjectCollection GetRelated(&lt;span style="color: blue"&gt;String&lt;/span&gt; relatedClass)&lt;br /&gt;System.Management.ManagementObjectCollection GetRelated(&lt;span style="color: blue"&gt;String&lt;/span&gt; relatedClass, &lt;span style="color: blue"&gt;String&lt;/span&gt; relationshipClass, &lt;span style="color: blue"&gt;String&lt;/span&gt; relationshipQualifier, &lt;span style="color: blue"&gt;String&lt;/span&gt; relatedQualifier,&lt;span style="color: blue"&gt;String&lt;/span&gt; relatedRole, &lt;span style="color: blue"&gt;String&lt;/span&gt; thisRole, Boolean classDefinitionsOnly, EnumerationOptions options)&lt;/pre&gt;&lt;pre&gt;&lt;span style="font-family: georgia"&gt;(I left out the ASync Methods)&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="font-family: georgia"&gt;Oops, IMNSHO that is not a nice Overload !!!&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="font-family: georgia"&gt;&lt;em&gt;(Quiz Question : You know them All  well enough to fill the 3th overload ?)&lt;/em&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="font-family: georgia"&gt;I do now ;-) (see later in post) and it seems that you can keep the ones you don't need empty.&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="font-family: georgia"&gt;it is :&lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;MSH G:\Monad&amp;gt; (get-wmiObject win32_service -&lt;span style="color: blue"&gt;filter&lt;/span&gt; &lt;span style="color: maroon"&gt;"Name = 'lanmanserver'"&lt;/span&gt;).GetRelated($&lt;span style="color: blue"&gt;null&lt;/span&gt;,&lt;span style="color: maroon"&gt;"Win32_DependentService"&lt;/span&gt;,$&lt;span style="color: blue"&gt;null&lt;/span&gt;,$&lt;span style="color: blue"&gt;null&lt;/span&gt;,$&lt;span style="color: blue"&gt;null&lt;/span&gt;,&lt;span style="color: maroon"&gt;"Antecedent"&lt;/span&gt;,$&lt;span style="color: maroon"&gt;false&lt;/span&gt;,$&lt;span style="color: blue"&gt;null&lt;/span&gt;)&lt;/pre&gt;But then I did not know what to fill in, but I saw another Method called &lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;GetRelationShips.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;after playing a bit I stopped at :&lt;/p&gt;&lt;pre&gt; ((($s = get-wmiObject win32_service -&lt;span style="color: blue"&gt;filter&lt;/span&gt; &lt;span style="color: maroon"&gt;"Name = 'lanmanserver'"&lt;/span&gt;).GetRelationships(&lt;span style="color: maroon"&gt;"win32_Dependentservice"&lt;/span&gt;))  &lt;span style="color: blue"&gt;foreach&lt;/span&gt; {$_.dependent}).split(&lt;span style="color: maroon"&gt;"="&lt;/span&gt;)[&lt;span style="color: maroon"&gt;1&lt;/span&gt;]&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;What do you think ? , In this case I would more like the ".NET" solution ;-) But.. help was on the way ;-) while searching SDK's etc for the WQL language specs, I stumbled upon System.Management.RelationshipQuery after playing with it (more about how later) I could only make a &lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;references of -query.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;So I needed his brother-class : System.Management.RelatedObjectQuery(System.Management.RelatedObjectQuery is related to GetRelated and RelationshipQuery to GetRelationships)&lt;/p&gt;&lt;br /&gt;&lt;p&gt;.So ... and what can we do with thos 2 classes ?&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Translate WQL Query's to Properties and Back !!!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;pre&gt;MSH G:\Monad&amp;gt; $roq = new-&lt;span style="color: blue"&gt;object&lt;/span&gt; System.Management.RelatedObjectQuery&lt;br /&gt;MSH G:\Monad&amp;gt; $roq.QueryString = &lt;span style="color: maroon"&gt;"associators of {Win32_Service.name='lanmanserver'} where resultclass = win32_service role = Antecedent"&lt;/span&gt;&lt;br /&gt;MSH G:\Monad&amp;gt; $roq&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;IsSchemaQuery         : False&lt;br /&gt;SourceObject          : Win32_Service.name=&lt;span style="color: maroon"&gt;'lanmanserver'&lt;/span&gt;&lt;br /&gt;RelatedClass          : win32_service&lt;br /&gt;RelationshipClass     :&lt;br /&gt;RelatedQualifier      :&lt;br /&gt;RelationshipQualifier :&lt;br /&gt;RelatedRole           :&lt;br /&gt;ThisRole              : Antecedent&lt;br /&gt;ClassDefinitionsOnly  : False&lt;br /&gt;QueryLanguage         : WQL&lt;br /&gt;QueryString           : associators of {Win32_Service.name=&lt;span style="color: maroon"&gt;'lanmanserver'&lt;/span&gt;} wher&lt;br /&gt;e resultclass = win32_service role = Antecedent&lt;/pre&gt;So, Now you know How I filled in that 3th Overload of GetRelated ;-) but at the End, I don't know if i want to, because you can get put the RelatedObjectQuery into a ManagementObjectSearcher directly. (see last "bonus"-script.) so until you need more as only the relatedClass (1st/2nd Overload of GetRelated) get-wmiObject is nice but after that I prefer the "system.management"-Way And .. as final "Bonus" - script to learn the WMI Queries, I coupled to on my Objectviewer-script, to get a GUI WQL-Querytool : &lt;pre&gt;$roq = new-&lt;span style="color: blue"&gt;object&lt;/span&gt; System.Management.RelatedObjectQuery&lt;br /&gt;ov($roq)&lt;br /&gt;$mos = new-&lt;span style="color: blue"&gt;object&lt;/span&gt; system.management.ManagementObjectSearcher($roq)&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;In the MSHObjectviewer you can change the Properties (or the Query), and you will see the effect in the Query(or the properties). You have to change to another field to see the reaction. I think now you have enough tools to get some more heavy work done in WMI Doe er iets leuks mee (have Fun) gr /\/\o\/\/ PS IF you do not have OV(MSHObject-Viewer), go here : &lt;a href="http://mow001.blogspot.com/2005/10/msh-object-viewer.html"&gt;MSH Object Viewer &lt;/a&gt;for more info about WQL queries go to : &lt;a href="http://msdn.microsoft.com/library/en-us/wmisdk/wmi/wql_sql_for_wmi.asp?frame=true"&gt;http://msdn.microsoft.com/library/en-us/wmisdk/wmi/wql_sql_for_wmi.asp?frame=true&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;* Update *&lt;/strong&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;Also for the .NET Query helper classes I did show how to use in the original post above, you can use them&amp;nbsp;with [WmiSearcher]&amp;nbsp; in RC2 so you do not need to make the object yourself, &lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;Also I show that you can also use a GUI using the function out-datagrid to get a kind of Query Generator,&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;You can find that function here :&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&lt;/em&gt;&lt;a title="powershell-out-propertygrid-msh-view.html" href="http://mow001.blogspot.com/2006/04/powershell-out-propertygrid-msh-view.html"&gt;&lt;em&gt;powershell-out-propertygrid-msh-view.html&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&amp;nbsp; &lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;that is an updated version of the MSH object viewer mentioned. that can be used to configure the WMI queries in A GUI&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; &lt;font color="#008000"&gt;# make the Query&lt;br&gt;&lt;/font&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $roq = new-object System.Management.RelatedObjectQuery&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $roq.QueryString = "associators of {Win32_Service.name='lanmanserver'} where resultclass = win32_service role = Antecedent"&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $roq &lt;br /&gt;&lt;p&gt;IsSchemaQuery : False&lt;br&gt;SourceObject : Win32_Service.name='lanmanserver'&lt;br&gt;RelatedClass : win32_service&lt;br&gt;RelationshipClass :&lt;br&gt;RelatedQualifier :&lt;br&gt;RelationshipQualifier :&lt;br&gt;RelatedRole :&lt;br&gt;ThisRole : Antecedent&lt;br&gt;ClassDefinitionsOnly : False&lt;br&gt;QueryLanguage : WQL&lt;br&gt;QueryString : associators of {Win32_Service.name='lanmanserver'} where resultclass = win32_service role = Antecedent &lt;br /&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; &lt;font color="#008000"&gt;# Execute the Query in RC2 :&lt;br&gt;&lt;/font&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; ([WmiSearcher]$roq).get() &lt;br /&gt;&lt;p&gt;ExitCode : 0&lt;br&gt;Name : Browser&lt;br&gt;ProcessId : 876&lt;br&gt;StartMode : Auto&lt;br&gt;State : Running&lt;br&gt;Status : OK &lt;br /&gt;&lt;p&gt;ExitCode : 0&lt;br&gt;Name : Dfs&lt;br&gt;ProcessId : 1264&lt;br&gt;StartMode : Auto&lt;br&gt;State : Running&lt;br&gt;Status : OK &lt;br /&gt;&lt;p&gt;ExitCode : 0&lt;br&gt;Name : Netlogon&lt;br&gt;ProcessId : 432&lt;br&gt;StartMode : Auto&lt;br&gt;State : Running&lt;br&gt;Status : OK &lt;br /&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;a href="http://photos1.blogger.com/blogger/8006/1759/1600/wmiQuery.png"&gt;&lt;img style="cursor: hand" alt="" src="http://photos1.blogger.com/blogger/8006/1759/400/wmiQuery.png" border="0"&gt;&lt;/a&gt; &lt;br /&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; &lt;font color="#008000"&gt;# Example Of using a PropertyGrid to make the Query&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") &lt;/p&gt;&lt;br /&gt;&lt;p&gt;GAC Version Location&lt;br&gt;--- ------- --------&lt;br&gt;True v2.0.50727 C:\WINDOWS\assembly\GAC_MSIL\System.Windows.Forms\2.0.0.0__b77a5c561934e089\System.Windows.For... &lt;br /&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; . .\Out-PropertyGrid.ps1&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $roq | opg&lt;br&gt;Cancel&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt; &lt;/font&gt;&lt;font color="#008000"&gt;# And you can also use it for the whole Searcher Object&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; [WmiSearcher]$roq | opg&lt;br&gt;Cancel&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp; &lt;a href="http://photos1.blogger.com/blogger/8006/1759/1600/wmiSearcher.png"&gt;&lt;img style="cursor: hand" alt="" src="http://photos1.blogger.com/blogger/8006/1759/400/wmiSearcher.png" border="0"&gt;&lt;/a&gt; &lt;br /&gt;&lt;p&gt;&amp;nbsp; &lt;br /&gt;&lt;p&gt;the [WMI]&amp;nbsp;and [WMIClass] in&amp;nbsp;PoSH RC2 make working with a WMI Path or&amp;nbsp;Query much Easier,also that you can see the&amp;nbsp;Class methods&amp;nbsp;on the WMI Object and use the directly, make that it is much Easier to work with and explore WMI in PowerShell RC2, &lt;br /&gt;&lt;p&gt;So in this examples the RC2 changes do really help, and Queries are more used, and&amp;nbsp;more handy to work with as using the methods as you see in this post,&amp;nbsp; &lt;br /&gt;&lt;p&gt;Hence in Case of WMI till now I'm still very happy with the change, as you can see in original entry I missed that at the time,&amp;nbsp;and can live with PSBase for this. &lt;br /&gt;&lt;p&gt;So I don't mind I need to update my scripts for this, more later in this series. &lt;br /&gt;&lt;p&gt;Enjoy, &lt;br /&gt;&lt;p&gt;Greetings, /\/\o\/\/ &lt;br /&gt;&lt;p&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-115966144799680596?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/115966144799680596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=115966144799680596' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115966144799680596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115966144799680596'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/10/powershell-wmi-support-in-rc2-series.html' title='PowerShell : WMI Support in RC2 (Series part 1)'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-115955860187657486</id><published>2006-09-29T21:36:00.000+02:00</published><updated>2006-09-29T21:50:13.096+02:00</updated><title type='text'>PowerShell RC2 and Active Directory Part 2</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;p&gt;As Active Directory management from PowerShell&amp;nbsp;is very important to me&amp;nbsp;in my daily work as I do all AD, SMS and&amp;nbsp;MOM management from PowerShell as well as&amp;nbsp;some of&amp;nbsp;the others in&amp;nbsp;my department allready&amp;nbsp;&amp;nbsp;;-)&amp;nbsp;,&amp;nbsp;  &lt;p&gt;As you could see here : &lt;a href="http://mow001.blogspot.com/2006/09/powershell-rc2-and-active-directory.html"&gt;PowerShell RC2 and Active Directory &lt;/a&gt;&amp;nbsp;I do not like the Wapper added in RC2.  &lt;p&gt;I have a lot if discussions about it ,  &lt;p&gt;in the NewsGroup &lt;em&gt;(Yes Finaly Google has Indexed the PowerShell NG )&lt;/em&gt;  &lt;p&gt;&lt;a href="http://groups.google.nl/group/microsoft.public.windows.powershell/browse_thread/thread/7cf4b1bb774dfb90/17ad75cae89a341d?lnk=st&amp;amp;q=rc2+adsi&amp;amp;rnum=2&amp;amp;hl=en#17ad75cae89a341d"&gt;AD access change/break in &lt;b&gt;RC2&lt;/b&gt;&lt;/a&gt;  &lt;p&gt;&lt;a href="http://groups.google.nl/group/microsoft.public.windows.powershell/browse_thread/thread/0e5fe67abb252754/5f1f2f62e0c4ee71?hl=en#5f1f2f62e0c4ee71"&gt;Syntax&lt;/a&gt; ([ADSI] removed by google)  &lt;p&gt;&lt;a href="http://groups.google.nl/group/microsoft.public.windows.powershell/browse_thread/thread/6a7df5c60b391d1e/07a5addadf19629a?hl=en#07a5addadf19629a"&gt;getting COM properties .&lt;/a&gt;&amp;nbsp;([ADSI] removed by google)  &lt;p&gt;&lt;a href="http://groups.google.nl/group/microsoft.public.windows.powershell/browse_thread/thread/9a46d0d3f1a55bd6/58abbd1f3b817ccb?lnk=st&amp;amp;q=rc2+adsi&amp;amp;rnum=1&amp;amp;hl=en#58abbd1f3b817ccb"&gt;&lt;b&gt;ADSI&lt;/b&gt; - AD access changes/issues in &lt;b&gt;RC2&lt;/b&gt;&lt;/a&gt;  &lt;p&gt;and on IRC&amp;nbsp;, there I got this remark :,  &lt;blockquote&gt; &lt;p&gt;&amp;lt;dreeschkind&amp;gt; guys, you need to vote if you want to achieve anything&lt;br&gt;&amp;lt;dreeschkind&amp;gt; &lt;a href="https://connect.microsoft.com/feedback/ViewFeedback.aspx?FeedbackID=213764&amp;amp;SiteID=99"&gt;https://connect.microsoft.com/feedback/ViewFeedback.aspx?FeedbackID=213764&amp;amp;SiteID=99&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp; And ofcourse did add a 5 ;-) &lt;p&gt;&amp;nbsp; &lt;p&gt;In the Newsgroup Threads Aruk Kumaravel explains a bit more&amp;nbsp;about the wrapper and&amp;nbsp;about the methods added (hidden),  &lt;blockquote&gt; &lt;p&gt;Create&lt;br&gt;Put&lt;br&gt;Set&lt;br&gt;PutEx&lt;br&gt;SetEx&lt;br&gt;GetInfo&lt;br&gt;SetInfo&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;and he has also some examples on his blog using the new wrapper :  &lt;p&gt;&lt;a href="http://blogs.msdn.com/arulk/archive/2006/07/25/678137.aspx"&gt;http://blogs.msdn.com/arulk/archive/2006/07/25/678137.aspx&lt;/a&gt;  &lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.msdn.com/arulk/archive/2006/07/28/682289.aspx"&gt;http://blogs.msdn.com/arulk/archive/2006/07/28/682289.aspx&lt;/a&gt;  &lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.msdn.com/arulk/archive/2006/08/24/719241.aspx"&gt;http://blogs.msdn.com/arulk/archive/2006/08/24/719241.aspx&lt;/a&gt;  &lt;p&gt;&amp;nbsp;  &lt;p&gt;Most people I did hear so far that are using PoSH for AD do not like&amp;nbsp;it, &amp;nbsp;and the questions on the NGm &lt;p&gt;also &amp;nbsp;ofcourse I did,some more comparing and testing&amp;nbsp; also, here you see some examples of the differences added by the wrapper :  &lt;p&gt;&lt;em&gt;Note that PsBase has no Tabcompletion.&lt;/em&gt;  &lt;p&gt;&amp;nbsp;  &lt;blockquote&gt; &lt;p&gt;&lt;font color="#008000"&gt;# Old&lt;/font&gt;  &lt;p&gt;$user.rename('cn=mow')  &lt;p&gt;$root.invoke('MoveHere','LDAP://CN=mow,OU=MowOu,DC=mow,DC=local','cn=mowMoved')  &lt;p&gt;&lt;font color="#008000"&gt;# New&lt;/font&gt;  &lt;p&gt;$user.psbase.rename('cn=mow')  &lt;p&gt;$root.movehere('LDAP://CN=FooBar,DC=mow,DC=local','cn=FooMoved')  &lt;p&gt;&lt;font color="#008000"&gt;# New (not working )&lt;/font&gt;  &lt;p&gt;([adsi]'LDAP://CN=FooMoved,DC=mow,DC=local').'AccountDisabled'&lt;br&gt;([adsi]'LDAP://CN=FooMoved,DC=mow,DC=local').get('AccountDisabled')  &lt;p&gt;&lt;font color="#008000"&gt;# Old way ( works ) :&lt;/font&gt;  &lt;p&gt;([adsi]'LDAP://CN=FooMoved,DC=mow,DC=local').psbase.invokeget('AccountDisabled')&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;  &lt;p&gt;&amp;nbsp; &lt;p&gt;as you could see here&amp;nbsp;&amp;nbsp;:&amp;nbsp; &lt;a href="http://mow001.blogspot.com/2006/07/powershell-and-active-directory-part-3.html"&gt;PowerShell and Active Directory Part 3 (UserProperties) &lt;/a&gt;, (last part of post) the ADSI COM Object has some added Method Properties, for a list see : &lt;a href="http://msdn.microsoft.com/interface_property_methods.asp"&gt;Interface Property Methods&lt;/a&gt;. on MSDN  &lt;p&gt;I do not know how to do it yet using the wrapper, (see last NG thread [ADSI] &amp;nbsp;&lt;a href="http://groups.google.nl/group/microsoft.public.windows.powershell/browse_thread/thread/6a7df5c60b391d1e/07a5addadf19629a?hl=en#07a5addadf19629a"&gt;getting COM properties .&lt;/a&gt;&amp;nbsp;)  &lt;p&gt;&amp;nbsp;  &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; ([adsi]'LDAP://CN=FooMoved,DC=mow,DC=local').'AccountDisabled'&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; ([adsi]'LDAP://CN=FooMoved,DC=mow,DC=local').get('AccountDisabled')&lt;br&gt;&lt;font color="#ff8080"&gt;Exception calling "get" with "1" argument(s): "The directory property cannot be found in the cache.&lt;br&gt;"&lt;br&gt;At line:1 char:49&lt;br&gt;+ ([adsi]'LDAP://CN=FooMoved,DC=mow,DC=local').get( &amp;lt;&amp;lt;&amp;lt;&amp;lt; 'AccountDisabled')&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; # Old way (works):&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; ([adsi]'LDAP://CN=FooMoved,DC=mow,DC=local').psbase.invokeget('AccountDisabled')&lt;br&gt;True&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;As I have almost 1500 readers of the first post of the series &lt;a href="http://mow001.blogspot.com/2006/06/powershel-and-active-directory-part-1.html"&gt;PowerShel and Active Directory Part 1 &lt;/a&gt;&amp;nbsp;, and 626&amp;nbsp;that came to &amp;nbsp;&lt;a href="http://mow001.blogspot.com/2006/07/powershell-and-active-directory-part-3.html"&gt;PowerShell and Active Directory Part 3 (UserProperties) &lt;/a&gt;,&amp;nbsp; so&amp;nbsp;if you have done that&amp;nbsp;start (and did read the NG threads),&amp;nbsp;you have experince with the process and can give valuable feedback,&amp;nbsp;&amp;nbsp;&amp;nbsp;  &lt;p&gt;&lt;strong&gt;Do you think is more easy to get started with Active Directory in PowerShell&amp;nbsp; in RC1 or RC2 ?&lt;/strong&gt;  &lt;p&gt;As that was the main goal of this change I think.  &lt;p&gt;&amp;nbsp;&lt;strong&gt;please Vote&lt;/strong&gt; : &lt;a href="https://connect.microsoft.com/feedback/ViewFeedback.aspx?FeedbackID=213764&amp;amp;SiteID=99"&gt;https://connect.microsoft.com/feedback/ViewFeedback.aspx?FeedbackID=213764&amp;amp;SiteID=99&lt;/a&gt;  &lt;p&gt;or join the discussion in the &lt;a title="http://www.microsoft.com/communities/newsgroups/en-us/default.aspx?dg=microsoft.public.windows.powershell" href="http://www.microsoft.com/communities/newsgroups/en-us/default.aspx?dg=microsoft.public.windows.powershell"&gt;microsoft.public.windows.powershell NewsGroup&lt;/a&gt;&amp;nbsp;  &lt;p&gt;&lt;strong&gt;Let know what you think !,&lt;/strong&gt;  &lt;p&gt;&lt;em&gt;(OK sorry one more complaint ;-) )&lt;/em&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;I still think that for this little value&amp;nbsp; that.emulating VbScript &amp;nbsp;this&amp;nbsp;wrapper&amp;nbsp;does add for someone starting with PowerShell (when he is coming from VbScript, and&amp;nbsp;knowing all the &amp;nbsp;Methods by Head&amp;nbsp; ;-) )&amp;nbsp;, &lt;/em&gt; &lt;p&gt;&lt;em&gt;This wrapper does to much concessions to the usability of PowerShell&amp;nbsp;&amp;nbsp;for more&amp;nbsp;advanced administrator tasks, for&amp;nbsp;using /converting all examples in other .NET languages (C#,IronPyhon,VB.NET,PowerShell), Developers to use PowerShell as a Tool&amp;nbsp;, or to glide to&amp;nbsp;a making a CmdLet , and it is very confusing, making exploring and Learning harder. &lt;/em&gt; &lt;p&gt;&lt;em&gt;I think&amp;nbsp; the way forward, using the Framework, is the best way , see also all changes in .NET2.0 for managing AD infrastructure :&amp;nbsp;&lt;/em&gt;&lt;a href="http://mow001.blogspot.com/2005/10/ad-infastructure-exploring-with-msh.html"&gt;&lt;em&gt;/\/\o\/\/ PowerShelled: &lt;b&gt;AD&lt;/b&gt; Infrastructure exploring with MSH&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;(AD&amp;nbsp;is managed by admin's,&amp;nbsp;not by end-users )&amp;nbsp;&amp;nbsp;,&amp;nbsp;as you could see in the&amp;nbsp;&lt;/em&gt;&lt;a href="http://mow001.blogspot.com/2006/07/powershell-and-active-directory-part-3.html"&gt;&lt;em&gt;Part 3&lt;/em&gt;&lt;/a&gt;&lt;em&gt;of the series, and the example in this post, it is already easy enough to get to those Hidden Methods added by the wrapper, and we have best of both worlds.&amp;nbsp; &lt;/em&gt; &lt;p&gt;&lt;em&gt;Also Get-Member is one of the most used and important commands in PowerShell , and in exploring Objects , and we have to be able to trust it to be consistent and complete, as it is one of our eyes&amp;nbsp;into the&amp;nbsp;PowerShell&amp;nbsp;World.&amp;nbsp;&lt;/em&gt; &lt;p&gt;&lt;em&gt;So I think that&amp;nbsp;hiding important information from it, for some also hidden added methods&amp;nbsp;is the wrong way to go on the glidepath, and I see&amp;nbsp;almost nothing&amp;nbsp;for it in return, as for typing PSBase.&lt;/em&gt; &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;End of campain !&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Enjoy, &lt;/p&gt; &lt;p&gt;Greetings, /\/\o\/\/  &lt;p&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt;&amp;nbsp; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-115955860187657486?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/115955860187657486/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=115955860187657486' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115955860187657486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115955860187657486'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/09/powershell-rc2-and-active-directory_29.html' title='PowerShell RC2 and Active Directory Part 2'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-115948776495728446</id><published>2006-09-29T01:56:00.000+02:00</published><updated>2006-09-29T02:02:19.326+02:00</updated><title type='text'>PowerShell : Hosting IronPython</title><content type='html'>&lt;p&gt;In last post about using IronPython from &lt;a href="http://mow001.blogspot.com/2006/09/powershell-using-ironpython-to-connect.html"&gt;PowerShell : Using IronPython to Connect to AD and list children &lt;/a&gt;, I did just use the CLI.&lt;/p&gt; &lt;p&gt;In this post I will show how to Use IronPython from Powershell, by hosting it.&lt;/p&gt; &lt;p&gt;I first load the DLL's needed (copy them to PSHOME directory), and then just start using it.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div style="font-family: courier new"&gt;[System.Reflection.Assembly]::LoadFile(&lt;span style="color: maroon"&gt;"$pshome\IronPython.dll"&lt;/span&gt;) &lt;br&gt;[System.Reflection.Assembly]::LoadFile(&lt;span style="color: maroon"&gt;"$pshome\IronMath.dll"&lt;/span&gt;) &lt;br&gt;&lt;br&gt;$ipe&amp;nbsp;=&amp;nbsp;new-&lt;span style="color: blue"&gt;object&lt;/span&gt;&amp;nbsp;IronPython.Hosting.PythonEngine&amp;nbsp;&lt;br&gt;&lt;br&gt;$code&amp;nbsp;=&amp;nbsp;@' &lt;br&gt;&lt;br&gt;import&amp;nbsp;sys &lt;br&gt;import&amp;nbsp;clr &lt;br&gt;import&amp;nbsp;System &lt;br&gt;&lt;br&gt;clr.AddReferenceByPartialName(&lt;span style="color: maroon"&gt;"System.DirectoryServices"&lt;/span&gt;) &lt;br&gt;&lt;br&gt;import&amp;nbsp;System.DirectoryServices &lt;br&gt;&lt;br&gt;from&amp;nbsp;System.DirectoryServices&amp;nbsp;import&amp;nbsp;* &lt;br&gt;&lt;br&gt;root&amp;nbsp;=&amp;nbsp;DirectoryEntry() &lt;br&gt;&lt;br&gt;&lt;span style="color: blue"&gt;for&lt;/span&gt;&amp;nbsp;c&amp;nbsp;&lt;span style="color: blue"&gt;in&lt;/span&gt;&amp;nbsp;root.Children:&amp;nbsp;print&amp;nbsp;c.Name &lt;br&gt;&lt;br&gt;&lt;br&gt;u&amp;nbsp;=&amp;nbsp;root.Children.Find(&lt;span style="color: maroon"&gt;"CN=FooBar"&lt;/span&gt;) &lt;br&gt;&lt;br&gt;&lt;span style="color: blue"&gt;for&lt;/span&gt;&amp;nbsp;p&amp;nbsp;&lt;span style="color: blue"&gt;in&lt;/span&gt;&amp;nbsp;u.Properties:&amp;nbsp;print&amp;nbsp;p.PropertyName&amp;nbsp;,&amp;nbsp;p.Value &lt;br&gt;&lt;br&gt;&lt;span style="color: blue"&gt;for&lt;/span&gt;&amp;nbsp;p&amp;nbsp;&lt;span style="color: blue"&gt;in&lt;/span&gt;&amp;nbsp;u.Properties.__getitem__(&lt;span style="color: maroon"&gt;"CN"&lt;/span&gt;):&amp;nbsp;print&amp;nbsp;p &lt;br&gt;&lt;br&gt;&lt;br&gt;'@ &lt;br&gt;&lt;br&gt;$ipe.Execute($code)&lt;/div&gt; &lt;p&gt;&amp;nbsp;  &lt;p&gt;&amp;nbsp;  &lt;p&gt;The results are not lost you can still work with them and you can exchange variables very easy also see examples below :  &lt;p&gt;&amp;nbsp;  &lt;p&gt;&amp;nbsp;  &lt;blockquote&gt; &lt;p&gt;&lt;font color="#008000"&gt;# You can get back the results by using Evaluate&lt;/font&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $ipe.Evaluate('root.Children.Find("CN=FooBar")')  &lt;p&gt;distinguishedName&lt;br&gt;-----------------&lt;br&gt;{CN=fooBar,DC=mow,DC=local}  &lt;p&gt;&lt;font color="#008000"&gt;# Or you can get the variable&lt;/font&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $ipe.Globals["u"]  &lt;p&gt;distinguishedName&lt;br&gt;-----------------&lt;br&gt;{CN=fooBar,DC=mow,DC=local}  &lt;p&gt;&lt;font color="#008000"&gt;# Set a IronPython Variable&lt;/font&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $ipe.Globals['domain'] = [adsi]''&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $ipe.Evaluate('domain.Children.Find("CN=FooBar")')  &lt;p&gt;distinguishedName&lt;br&gt;-----------------&lt;br&gt;{CN=fooBar,DC=mow,DC=local}  &lt;p&gt;&lt;font color="#008000"&gt;# and do a Dir (get-member) on that variable in IronPython&lt;/font&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $ipe.Evaluate('dir(domain)')&lt;br&gt;AuthenticationType&lt;br&gt;CanRaiseEvents&lt;br&gt;Children&lt;br&gt;Close&lt;br&gt;CommitChanges&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;  &lt;p&gt;As you see its very easy to mix&amp;nbsp; IronPython and PowerShell parts.  &lt;p&gt;Realy great !&amp;nbsp; &lt;p&gt;&amp;nbsp;  &lt;p&gt;&amp;nbsp;  &lt;p&gt;Enjoy,  &lt;p&gt;Greetings, /\/\o\/\/  &lt;p&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/IronPython"&gt;IronPython&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-115948776495728446?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/115948776495728446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=115948776495728446' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115948776495728446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115948776495728446'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/09/powershell-hosting-ironpython.html' title='PowerShell : Hosting IronPython'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-115939250322855666</id><published>2006-09-27T23:28:00.000+02:00</published><updated>2006-09-27T23:29:16.636+02:00</updated><title type='text'>PowerShell RC2 and Active Directory</title><content type='html'>&lt;p&gt;As you have RC2 Installed all my AD post will not work anymore, As I did switch back on all my work PC's (I did call all my colleagues not to upgrade as all our AD tools are messed up, I will not update them, as I would not recommend to upgrade to RC2 of you work with AD a lot , as it is verry confusing, but fixable&amp;nbsp;if you read explaination below,&lt;/p&gt; &lt;p&gt;&amp;nbsp;you can get all working again be the result might be messy.&lt;/p&gt; &lt;p&gt;he examples in my AD series will most of the time not work, most of the things discussed will not seem to be there , so if you did not do AD in PowerShell all seem very strange, and it will be hard to follow.&lt;/p&gt; &lt;p&gt;I will explain what has happened&amp;nbsp;and give the ways to solve this.&lt;/p&gt; &lt;p&gt;As &amp;nbsp;PowerShell RC2&amp;nbsp;was released, I hopefully started to explore the new AD support&amp;nbsp; :&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; [ADSI]''  &lt;p&gt;distinguishedName&lt;br&gt;-----------------&lt;br&gt;{DC=mow,DC=local}  &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $root = [ADSI]''&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;Wow Cool, but then : &lt;p&gt;&amp;nbsp; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $root.get_Children()&lt;br&gt;&lt;font color="#ff0000"&gt;Exception calling "get_Children" with "0" argument(s): "Unknown name. (Exception from HRESULT: 0x80020006 (DISP_E_UNKNO&lt;br&gt;WNNAME))"&lt;br&gt;At line:1 char:19&lt;br&gt;+ $root.get_Children( &amp;lt;&amp;lt;&amp;lt;&amp;lt; )&lt;/font&gt; &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Hmm,&amp;nbsp;should be&amp;nbsp;there, lets remove the ()&amp;nbsp;: &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $root.get_Children  &lt;p&gt;MemberType : Method&lt;br&gt;OverloadDefinitions :&lt;br&gt;TypeNameOfValue : System.Management.Automation.PSMethod&lt;br&gt;Value :&lt;br&gt;Name : get_Children&lt;br&gt;IsInstance : True &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;bit strange output but its there &lt;p&gt;Hmm its not there. &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $root | gm &lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;TypeName: System.DirectoryServices.DirectoryEntry  &lt;p&gt;Name MemberType Definition&lt;br&gt;---- ---------- ----------&lt;br&gt;auditingPolicy Property System.DirectoryServices.PropertyValueCollection auditingPolicy {get;set;}&lt;br&gt;creationTime Property System.DirectoryServices.PropertyValueCollection creationTime {get;set;}&lt;br&gt;dc Property System.DirectoryServices.PropertyValueCollection dc {get;set;}&lt;br&gt;distinguishedName Property System.DirectoryServices.PropertyValueCollection distinguishedName {get;...  &lt;p&gt;... &lt;p&gt;...&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Ok we do not see it but let's try PSbase &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $root.psbase | gm  &lt;p&gt; &lt;p&gt;TypeName: System.Management.Automation.PSMemberSet  &lt;p&gt;Name MemberType Definition&lt;br&gt;---- ---------- ----------&lt;br&gt;add_Disposed Method System.Void add_Disposed(EventHandler value)&lt;br&gt;Close Method System.Void Close()&lt;br&gt;CommitChanges Method System.Void CommitChanges()&lt;br&gt;CopyTo Method System.DirectoryServices.DirectoryEntry CopyTo(DirectoryEntry newParent), Syste...&lt;br&gt;CreateObjRef Method System.Runtime.Remoting.ObjRef CreateObjRef(Type requestedType)&lt;br&gt;DeleteTree Method System.Void DeleteTree()&lt;br&gt;Dispose Method System.Void Dispose()&lt;br&gt;Equals Method System.Boolean Equals(Object obj)&lt;br&gt;GetHashCode Method System.Int32 GetHashCode()&lt;br&gt;GetLifetimeService Method System.Object GetLifetimeService()&lt;br&gt;GetType Method System.Type GetType()&lt;br&gt;get_AuthenticationType Method System.DirectoryServices.AuthenticationTypes get_AuthenticationType()&lt;br&gt;get_Children Method System.DirectoryServices.DirectoryEntries get_Children()&lt;br&gt;get_Container Method System.ComponentModel.IContainer get_Container()&lt;br&gt;get_Guid Method System.Guid get_Guid()&lt;br&gt;get_Name Method System.String get_Name()&lt;br&gt;get_NativeGuid Method System.String get_NativeGuid()&lt;br&gt;get_NativeObject Method System.Object get_NativeObject()&lt;br&gt;get_ObjectSecurity Method System.DirectoryServices.ActiveDirectorySecurity get_ObjectSecurity()&lt;br&gt;get_Options Method System.DirectoryServices.DirectoryEntryConfiguration get_Options()&lt;br&gt;get_Parent Method System.DirectoryServices.DirectoryEntry get_Parent()&lt;br&gt;get_Path Method System.String get_Path()&lt;br&gt;get_Properties Method System.DirectoryServices.PropertyCollection get_Properties()&lt;br&gt;get_SchemaClassName Method System.String get_SchemaClassName()&lt;br&gt;get_SchemaEntry Method System.DirectoryServices.DirectoryEntry get_SchemaEntry()&lt;br&gt;get_Site Method System.ComponentModel.ISite get_Site()&lt;br&gt;get_UsePropertyCache Method System.Boolean get_UsePropertyCache()&lt;br&gt;get_Username Method System.String get_Username()&lt;br&gt;InitializeLifetimeService Method System.Object InitializeLifetimeService()&lt;br&gt;Invoke Method System.Object Invoke(String methodName, Params Object[] args)&lt;br&gt;InvokeGet Method System.Object InvokeGet(String propertyName)&lt;br&gt;InvokeSet Method System.Void InvokeSet(String propertyName, Params Object[] args)&lt;br&gt;MoveTo Method System.Void MoveTo(DirectoryEntry newParent), System.Void MoveTo(DirectoryEntry...&lt;br&gt;RefreshCache Method System.Void RefreshCache(), System.Void RefreshCache(String[] propertyNames)&lt;br&gt;remove_Disposed Method System.Void remove_Disposed(EventHandler value)&lt;br&gt;Rename Method System.Void Rename(String newName)&lt;br&gt;set_AuthenticationType Method System.Void set_AuthenticationType(AuthenticationTypes value)&lt;br&gt;set_ObjectSecurity Method System.Void set_ObjectSecurity(ActiveDirectorySecurity value)&lt;br&gt;set_Password Method System.Void set_Password(String value)&lt;br&gt;set_Path Method System.Void set_Path(String value)&lt;br&gt;set_Site Method System.Void set_Site(ISite value)&lt;br&gt;set_UsePropertyCache Method System.Void set_UsePropertyCache(Boolean value)&lt;br&gt;set_Username Method System.Void set_Username(String value)&lt;br&gt;ToString Method System.String ToString()&lt;br&gt;AuthenticationType Property System.DirectoryServices.AuthenticationTypes AuthenticationType {get;set;}&lt;br&gt;Children Property System.DirectoryServices.DirectoryEntries Children {get;}&lt;br&gt;Container Property System.ComponentModel.IContainer Container {get;}&lt;br&gt;Guid Property System.Guid Guid {get;}&lt;br&gt;Name Property System.String Name {get;}&lt;br&gt;NativeGuid Property System.String NativeGuid {get;}&lt;br&gt;NativeObject Property System.Object NativeObject {get;}&lt;br&gt;ObjectSecurity Property System.DirectoryServices.ActiveDirectorySecurity ObjectSecurity {get;set;}&lt;br&gt;Options Property System.DirectoryServices.DirectoryEntryConfiguration Options {get;}&lt;br&gt;Parent Property System.DirectoryServices.DirectoryEntry Parent {get;}&lt;br&gt;Password Property System.String Password {set;}&lt;br&gt;Path Property System.String Path {get;set;}&lt;br&gt;Properties Property System.DirectoryServices.PropertyCollection Properties {get;}&lt;br&gt;SchemaClassName Property System.String SchemaClassName {get;}&lt;br&gt;SchemaEntry Property System.DirectoryServices.DirectoryEntry SchemaEntry {get;}&lt;br&gt;Site Property System.ComponentModel.ISite Site {get;set;}&lt;br&gt;UsePropertyCache Property System.Boolean UsePropertyCache {get;set;}&lt;br&gt;Username Property System.String Username {get;set;}&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;Ahh, there are all the usefull methods and properties, hmm maybe not that bad, as this works now &lt;p&gt;&amp;nbsp; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $root.psBase.children  &lt;p&gt;distinguishedName&lt;br&gt;-----------------&lt;br&gt;{CN=Builtin,DC=mow,DC=local}&lt;br&gt;{CN=Computers,DC=mow,DC=local}&lt;br&gt;{OU=Domain Controllers,DC=mow,DC=local}&lt;br&gt;{CN=foo,DC=mow,DC=local}&lt;br&gt;{CN=fooBar,DC=mow,DC=local} &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;strong&gt;But then again!!!!!!&lt;/strong&gt; &lt;p&gt;First, the PSbase is hidden, so you need to be a more advanced PoSH user and know about it. &lt;p&gt;then there is no tab completion and you need this much,  &lt;p&gt;&amp;nbsp; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $user.InvokeGet('AccountDisabled')&lt;br&gt;&lt;font color="#ff0000"&gt;Exception calling "InvokeGet" with "1" argument(s): "Unknown name. (Exception from HRESULT: 0x80020006 (DISP_E_UNKNOWNN&lt;br&gt;AME))"&lt;br&gt;At line:1 char:16&lt;br&gt;+ $user.InvokeGet( &amp;lt;&amp;lt;&amp;lt;&amp;lt; 'AccountDisabled')&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $user.psbase.InvokeGet('AccountDisabled')&lt;br&gt;True&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $user.InvokeSet('department','foo')  &lt;p&gt;&lt;font color="#ff0000"&gt;Exception calling "InvokeSet" with "2" argument(s): "Unknown name. (Exception from HRESULT: 0x80020006 (DISP_E_UNKNOWNN&lt;br&gt;AME))"&lt;br&gt;At line:1 char:16&lt;br&gt;+ $user.InvokeSet( &amp;lt;&amp;lt;&amp;lt;&amp;lt; 'department','foo')&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Get-member does give misleading info, I think I got the BaseObject here memberset ?.&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;/font&gt;&amp;nbsp; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $user.psbase | gm  &lt;p&gt;TypeName: System.Management.Automation.PSMemberSet  &lt;p&gt;Name MemberType Definition&lt;br&gt;---- ---------- ----------  &lt;p&gt;... &lt;p&gt;...&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;But after that even worse, if you follow the series you could add Properties directly&amp;nbsp;and did not need to commit them (part 3) Hence you could&amp;nbsp;do this : &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $user.displayName = 'user' &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Looks OK but ... where is it ?? &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $user.displayName&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;Refresh or commit ? &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $user.psbase.RefreshCache()&lt;br&gt;&lt;font color="#ff0000"&gt;&lt;/font&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $user.displayName &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $user.psbase.CommitChanges()&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $user | fl *  &lt;p&gt;objectClass : {top, person, organizationalPerson, user}&lt;br&gt;cn : {Ken Myer}&lt;br&gt;distinguishedName : {CN=Ken Myer,DC=mow,DC=local}&lt;br&gt;instanceType : {4}&lt;br&gt;whenCreated : {8/14/2006 7:47:24 PM}&lt;br&gt;whenChanged : {9/27/2006 8:08:22 PM}&lt;br&gt;uSNCreated : {System.__ComObject}&lt;br&gt;uSNChanged : {System.__ComObject}&lt;br&gt;department : {foo}&lt;br&gt;name : {Ken Myer}&lt;br&gt;objectGUID : {147 228 120 129 152 3 234 72 153 138 249 176 59 43 99 6}&lt;br&gt;userAccountControl : {546}&lt;br&gt;badPwdCount : {0}&lt;br&gt;codePage : {0}&lt;br&gt;countryCode : {0}&lt;br&gt;badPasswordTime : {System.__ComObject}&lt;br&gt;lastLogoff : {System.__ComObject}&lt;br&gt;lastLogon : {System.__ComObject}&lt;br&gt;pwdLastSet : {System.__ComObject}&lt;br&gt;primaryGroupID : {513}&lt;br&gt;objectSid : {1 5 0 0 0 0 0 5 21 0 0 0 94 172 186 232 167 29 117 70 12 60 36 84 68 13 0 0}&lt;br&gt;accountExpires : {System.__ComObject}&lt;br&gt;logonCount : {0}&lt;br&gt;sAMAccountName : {$4A3000-FT61QRM67UFO}&lt;br&gt;sAMAccountType : {805306368}&lt;br&gt;objectCategory : {CN=Person,CN=Schema,CN=Configuration,DC=mow,DC=local}&lt;br&gt;nTSecurityDescriptor : {System.__ComObject}  &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $user.psbase.displayName = 'user'&lt;br&gt;Property 'displayName' cannot be found on this object; make sure it exists and is settable.&lt;br&gt;At line:1 char:14&lt;br&gt;+ $user.psbase.d &amp;lt;&amp;lt;&amp;lt;&amp;lt; isplayName = 'user' &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Hmm, let go the hard way then (and again the Psbase !!!!) &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $user.psbase.InvokeSet('displayname','foo')&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $user.psbase.CommitChanges()&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $user | fl * &lt;/p&gt; &lt;p&gt;objectClass : {top, person, organizationalPerson, user}&lt;br&gt;cn : {Ken Myer}&lt;br&gt;distinguishedName : {CN=Ken Myer,DC=mow,DC=local}&lt;br&gt;instanceType : {4}&lt;br&gt;whenCreated : {8/14/2006 7:47:24 PM}&lt;br&gt;whenChanged : {9/27/2006 8:13:11 PM}&lt;br&gt;displayName : {foo}&lt;br&gt;...&lt;/p&gt; &lt;p&gt;...&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;And now it works, but you see that we seem to be back in the ADAM limits !!!,&lt;/p&gt; &lt;p&gt;also this is ofcourse very dangerous, as it does only work sometimes.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $user.displayname = 'bar'&lt;br&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $user &lt;/p&gt; &lt;p&gt;distinguishedName&lt;br&gt;-----------------&lt;br&gt;{CN=Ken Myer,DC=mow,DC=local}  &lt;p&gt;&lt;font color="#ff0000"&gt;PS C:\PowerShell&amp;gt;&lt;/font&gt; $user.displayname&lt;br&gt;bar&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;So you see this makes working with AD interactive very errorprone, and&amp;nbsp;lots of extra troubles and gotyas to take care of,&amp;nbsp;and I hope that this will be solved for RTM as I think this makes PowerShell AD support much worse opposed to better,and lots of boilercode making scripts harder to read. &lt;p&gt;I realy wonder how they came to this and if they did eat there own dogfood on this one, as I can not get what they see as improvements for this wrapper. &lt;p&gt;for WMI the ++ are mutch&amp;nbsp;greater (direct method access) &amp;nbsp;as the -- (losing getInstances() e.g.) &lt;p&gt;&amp;nbsp;but for AD please give me only the [ADSI] shortcut, and remove that wrapper again, as said and shown I think this makes it even harder for starters in PowerShell to explore AD. &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;So as you could see in last post I got started with IronPython for AD management&amp;nbsp;also, it&amp;nbsp;is a lot more clear as current solution in RC2, as dir() does show all directly ,&amp;nbsp;but as PTY is limited (no tabcompletion) but we have dir()&amp;nbsp;next to the PTY examples (as we have&amp;nbsp;no tabcompletion&amp;nbsp;and&amp;nbsp;PowerShell commands(direct see PowerShell Memo links)&amp;nbsp;in next post I also will work out loading the IronPython DLL to work with it from PowerShell and embed it inside a script using&amp;nbsp;a here string in&amp;nbsp;and add some more AD stuff, also I look into the Event Form and Thread support in IronPython and how to borrow this functionality from IronPython to extend PowerShell.&lt;/p&gt; &lt;p&gt;Our Japanese MVP &lt;a href="http://d.hatena.ne.jp/newpops/20060927/p1"&gt;newpops&lt;/a&gt;&amp;nbsp;is also doing a series on doing it the other way around hosting PowerShell in IronPython&amp;nbsp;&lt;a href="http://d.hatena.ne.jp/newpops/20060927/p1"&gt;PowerShell Memo&lt;/a&gt;:&lt;/p&gt; &lt;p&gt;be sure to take a look, only the code samples impressive enough and will get you going&amp;nbsp;or you can use Google to translate.&lt;/p&gt; &lt;p&gt;&lt;a href="http://d.hatena.ne.jp/newpops/20060918/p1"&gt;[PowerShell][IronPython]PowerShell from IronPython&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://d.hatena.ne.jp/newpops/20060927/p1"&gt;[PowerShell][IronPython]PowerShell from IronPython Part 2&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Very Very cool also, so when we take best of all "Dynamic" worlds all will be good and PoSHy&amp;nbsp;;-)&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Enjoy,  &lt;p&gt;Greetings, /\/\o\/\/  &lt;p&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/IronPython"&gt;IronPython&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-115939250322855666?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/115939250322855666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=115939250322855666' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115939250322855666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115939250322855666'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/09/powershell-rc2-and-active-directory.html' title='PowerShell RC2 and Active Directory'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-115922765757710021</id><published>2006-09-26T01:40:00.000+02:00</published><updated>2006-09-26T03:18:25.330+02:00</updated><title type='text'>PowerShell : Using IronPython to Connect to AD and list children</title><content type='html'>&lt;ol&gt; &lt;li&gt;Iron Python is Released, &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;a href="http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=IronPython&amp;amp;ReleaseId=423"&gt;IronPython Release 1 P.0 Production&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;so here is an &lt;strike&gt;Hint&lt;/strike&gt;&amp;nbsp; example how to&amp;nbsp;start the IronPython CLI (ipy.exe) from powershell and&amp;nbsp;to connect to the Active Directory RootDSE and to list its children.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;PS C:\PowerShell&amp;gt; C:\IronPython-1.0\ipy.exe&lt;br&gt;IronPython 1.0.60816 on .NET 2.0.50727.42&lt;br&gt;Copyright (c) Microsoft Corporation. All rights reserved.&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; import sys&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; import clr&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; import System&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; clr.AddReferenceByPartialName("System.DirectoryServices")&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; root = System.DirectoryServices.DirectoryEntry()&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; for c in root.Children: print c.Name&lt;br&gt;...&lt;br&gt;CN=Builtin&lt;br&gt;CN=Computers&lt;br&gt;OU=Domain Controllers&lt;br&gt;CN=foo&lt;br&gt;CN=ForeignSecurityPrincipals&lt;br&gt;CN=Infrastructure&lt;br&gt;CN=Ken Myer&lt;br&gt;CN=LostAndFound&lt;br&gt;OU=MowOtherOU&lt;br&gt;OU=MowOu&lt;br&gt;CN=NewUs:::er0003&lt;br&gt;CN=NewUser0010&lt;br&gt;CN=NewUser0011&lt;br&gt;CN=NewUser0012&lt;br&gt;CN=NTDS Quotas&lt;br&gt;CN=Program Data&lt;br&gt;CN=System&lt;br&gt;CN=Users&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; exit&lt;br&gt;'Use Ctrl-Z plus Return to exit'&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; ^Z&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;*Edit* Importing NameSpaces, Cool !, but do not throw $$ around&amp;nbsp;;-)&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp; &lt;blockquote&gt; &lt;p&gt;import System.DirectoryServices&lt;br&gt;from System.DirectoryServices import *  &lt;p&gt;root = DirectoryEntry() &lt;p&gt;&amp;gt;&amp;gt;&amp;gt; u = root.Children.Add("CN=fooBar","User")&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; $u.name&lt;br&gt;Traceback (most recent call last):&lt;br&gt;SyntaxError: unexpected token bad character '$' (&amp;lt;stdin&amp;gt;, line 1)&lt;/p&gt; &lt;p&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; u.Name&lt;br&gt;'CN=fooBar'&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Enjoy,  &lt;p&gt;Greetings, /\/\o\/\/  &lt;p&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/IronPython"&gt;IronPython&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-115922765757710021?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/115922765757710021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=115922765757710021' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115922765757710021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115922765757710021'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/09/powershell-using-ironpython-to-connect.html' title='PowerShell : Using IronPython to Connect to AD and list children'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-115861641327640705</id><published>2006-09-18T23:53:00.000+02:00</published><updated>2006-09-18T23:53:33.436+02:00</updated><title type='text'>PowerShell Session video of Bruce Payette</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;From &lt;a href="http://dev.mmgsecurity.com/blogs/lorenb/?p=491"&gt;Loren Bandiera’s weblog&lt;/a&gt;&amp;nbsp;I found the &lt;a href="http://www.langnetsymposium.com/speakers.asp"&gt;Lang.NET Symposium&lt;/a&gt;&amp;nbsp;page &lt;/p&gt; &lt;p&gt;with on that :.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;li&gt;&lt;a href="http://download.microsoft.com/download/9/4/1/94138e2a-d9dc-435a-9240-bcd985bf5bd7/BrucePayette-PowerShell.wmv"&gt;Bruce Payette&lt;/a&gt; - Discussing the new &lt;a href="http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx"&gt;Windows PowerShell&lt;/a&gt;. Huge improvement over cmd.exe&lt;/li&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I'm watching en enjoying it at the moment,&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Recomended !!&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Enjoy, &lt;p&gt;Greetings, /\/\o\/\/&lt;br&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/msh"&gt;msh&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-115861641327640705?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/115861641327640705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=115861641327640705' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115861641327640705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115861641327640705'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/09/powershell-session-video-of-bruce.html' title='PowerShell Session video of Bruce Payette'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-115808884079992534</id><published>2006-09-12T21:20:00.000+02:00</published><updated>2006-09-12T21:25:03.430+02:00</updated><title type='text'>PowerShell : Active Directory Part 11 - moving - Renaming Objects</title><content type='html'>&lt;p&gt;In this post Move and Renaming AD objects, &lt;/p&gt; &lt;p&gt;still not about Searching AD as I did say before using the DirectorySearcher Object,&lt;/p&gt; &lt;p&gt;&amp;nbsp;but as a lot of my older posts and examples&amp;nbsp;about &amp;nbsp;already&amp;nbsp;use it, If you did&amp;nbsp;read the read&amp;nbsp;the other parts of this AD series, you should be able understand those example scripts to get much information from that&amp;nbsp;older scripts about searching AD going&amp;nbsp;on from the examples, and pasting in lines of code from the examples&amp;nbsp;into the interactive Shell&amp;nbsp;.&amp;nbsp;&amp;nbsp;&lt;/p&gt; &lt;p&gt;See for a complete list, of all the parts in this series, and the other examples and scripts using the DirectorySearcher.&amp;nbsp;&lt;/p&gt; &lt;p&gt;The excellent PowerShell Links directory Dance2Die maintains on Del.icio.us :&amp;nbsp;&lt;a href="http://del.icio.us/powershell"&gt;PowerShell&lt;/a&gt;&amp;nbsp;(Note the RSS feed !! )in the Active Directory Subdirectory: &lt;a href="http://del.icio.us/powershell/ActiveDirectory?setcount=50"&gt;del.icio.us PowerShell AD links&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;(if can you make a get-Aduser ($SamAccountName){} from that using a DirectorySearcher as an example, please leave it in the comments ;-)&lt;/em&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;so in this post renaming and moving objects as that was not discussed yet :&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Yesterday night,&amp;nbsp; I got a question on how to rename a user in PoSH on IRC (IRC.freeNode.net #PowerShell).&lt;/p&gt; &lt;p&gt;I could not come up with a direct answer at the time, but&amp;nbsp;did remember from VbScript that you could use a method on the OU,&amp;nbsp;&lt;/p&gt; &lt;p&gt;I&amp;nbsp;did a quick lookup, &lt;a href="http://www.microsoft.com/technet/scriptcenter/guide/sas_usr_aznz.mspx"&gt;Microsoft Windows 2000 Scripting Guide - Moving and Renaming User &lt;b&gt;...&lt;/b&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;and came to this :&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$MowOu = C:\PowerShell\ActiveDirectoryBrowser.Ps1&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$mowOU &lt;/p&gt; &lt;p&gt;distinguishedName&lt;br&gt;-----------------&lt;br&gt;{OU=MowOu,DC=mow,DC=local} &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$mowou.get_Children()  &lt;p&gt;distinguishedName&lt;br&gt;-----------------&lt;br&gt;{CN=$_,OU=MowOu,DC=mow,DC=local}&lt;br&gt;{CN=foo,OU=MowOu,DC=mow,DC=local}&lt;br&gt;{CN=foobar,OU=MowOu,DC=mow,DC=local}&lt;br&gt;{CN=Ken Myer,OU=MowOu,DC=mow,DC=local}&lt;br&gt;{CN=mow,OU=MowOu,DC=mow,DC=local}&lt;br&gt;{CN=Mow2,OU=MowOu,DC=mow,DC=local}&lt;br&gt;{OU=MowSubOu,OU=MowOu,DC=mow,DC=local}&lt;br&gt;{CN=NewUser0003,OU=MowOu,DC=mow,DC=local}&lt;br&gt;{CN=NewUser0010,OU=MowOu,DC=mow,DC=local}&lt;br&gt;{CN=NewUser0011,OU=MowOu,DC=mow,DC=local}&lt;br&gt;{CN=NewUser0267,OU=MowOu,DC=mow,DC=local}&lt;br&gt;{CN=TestGroup,OU=MowOu,DC=mow,DC=local} &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$mowOU.invoke('MoveHere','LDAP://CN=mow,OU=MowOu,DC=mow,DC=local','cn=mowMoved')  &lt;p&gt;distinguishedName&lt;br&gt;-----------------&lt;br&gt;{CN=mowMoved,OU=MowOu,DC=mow,DC=local}&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;After I came home from work today and found back the PowerShell console as I left it last night, &lt;p&gt;I did a get-member again, and did see that I had missed the most obvious solution last night, using the Methods on the DirectoryObject. &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$mowOU | gm -MemberType method  &lt;p&gt;TypeName: System.DirectoryServices.DirectoryEntry  &lt;p&gt;Name MemberType Definition&lt;br&gt;---- ---------- ----------&lt;br&gt;add_Disposed Method System.Void add_Disposed(EventHandler value)&lt;br&gt;Close Method System.Void Close()&lt;br&gt;CommitChanges Method System.Void CommitChanges()&lt;br&gt;CopyTo Method System.DirectoryServices.DirectoryEntry CopyTo(DirectoryEntry newParent), Syste...&lt;br&gt;CreateObjRef Method System.Runtime.Remoting.ObjRef CreateObjRef(Type requestedType)&lt;br&gt;DeleteTree Method System.Void DeleteTree()&lt;br&gt;Dispose Method System.Void Dispose()&lt;br&gt;Equals Method System.Boolean Equals(Object obj)&lt;br&gt;get_AuthenticationType Method System.DirectoryServices.AuthenticationTypes get_AuthenticationType()&lt;br&gt;get_Children Method System.DirectoryServices.DirectoryEntries get_Children()&lt;br&gt;get_Container Method System.ComponentModel.IContainer get_Container()&lt;br&gt;get_Guid Method System.Guid get_Guid()&lt;br&gt;get_Name Method System.String get_Name()&lt;br&gt;get_NativeGuid Method System.String get_NativeGuid()&lt;br&gt;get_NativeObject Method System.Object get_NativeObject()&lt;br&gt;get_ObjectSecurity Method System.DirectoryServices.ActiveDirectorySecurity get_ObjectSecurity()&lt;br&gt;get_Options Method System.DirectoryServices.DirectoryEntryConfiguration get_Options()&lt;br&gt;get_Parent Method System.DirectoryServices.DirectoryEntry get_Parent()&lt;br&gt;get_Path Method System.String get_Path()&lt;br&gt;get_Properties Method System.DirectoryServices.PropertyCollection get_Properties()&lt;br&gt;get_SchemaClassName Method System.String get_SchemaClassName()&lt;br&gt;get_SchemaEntry Method System.DirectoryServices.DirectoryEntry get_SchemaEntry()&lt;br&gt;get_Site Method System.ComponentModel.ISite get_Site()&lt;br&gt;get_UsePropertyCache Method System.Boolean get_UsePropertyCache()&lt;br&gt;get_Username Method System.String get_Username()&lt;br&gt;GetHashCode Method System.Int32 GetHashCode()&lt;br&gt;GetLifetimeService Method System.Object GetLifetimeService()&lt;br&gt;GetType Method System.Type GetType()&lt;br&gt;InitializeLifetimeService Method System.Object InitializeLifetimeService()&lt;br&gt;Invoke Method System.Object Invoke(String methodName, Params Object[] args)&lt;br&gt;InvokeGet Method System.Object InvokeGet(String propertyName)&lt;br&gt;InvokeSet Method System.Void InvokeSet(String propertyName, Params Object[] args)&lt;br&gt;&lt;strong&gt;MoveTo Method System.Void MoveTo(DirectoryEntry newParent), System.Void MoveTo(DirectoryEntry...&lt;/strong&gt;&lt;br&gt;RefreshCache Method System.Void RefreshCache(), System.Void RefreshCache(String[] propertyNames)&lt;br&gt;remove_Disposed Method System.Void remove_Disposed(EventHandler value)&lt;br&gt;&lt;strong&gt;Rename Method System.Void Rename(String newName)&lt;br&gt;&lt;/strong&gt;set_AuthenticationType Method System.Void set_AuthenticationType(AuthenticationTypes value)&lt;br&gt;set_ObjectSecurity Method System.Void set_ObjectSecurity(ActiveDirectorySecurity value)&lt;br&gt;set_Password Method System.Void set_Password(String value)&lt;br&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;set_Path Method System.Void set_Path(String value)&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;set_Site Method System.Void set_Site(ISite value)&lt;br&gt;set_UsePropertyCache Method System.Void set_UsePropertyCache(Boolean value)&lt;br&gt;set_Username Method System.Void set_Username(String value)&lt;br&gt;ToString Method System.String ToString()&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;So you also can do this : &lt;p&gt;&lt;font color="#008000"&gt;# Using the DirectoryEntry Rename method&lt;/font&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$mowOU.get_Children() |? {$_.cn -match 'mowMoved'}  &lt;p&gt;distinguishedName&lt;br&gt;-----------------&lt;br&gt;{CN=mowMoved,OU=MowOu,DC=mow,DC=local} &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$MowMoved = $mowOU.get_Children() |? {$_.cn -match 'mowm'} &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$MowMoved  &lt;p&gt;distinguishedName&lt;br&gt;-----------------&lt;br&gt;{CN=mowMoved,OU=MowOu,DC=mow,DC=local}  &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$MowMoved.rename('cn=mow')&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$MowMoved  &lt;p&gt;distinguishedName&lt;br&gt;-----------------&lt;br&gt;{CN=mow,OU=MowOu,DC=mow,DC=local}&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;font color="#008000"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font color="#008000"&gt;# Connect&amp;nbsp;to&amp;nbsp;RootDSE&amp;nbsp;and go to user by&amp;nbsp;setting a&amp;nbsp;new path using Set_Path&lt;/font&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$mow = new-object system.directoryservices.directoryEntry&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$mow &lt;/p&gt; &lt;p&gt;distinguishedName&lt;br&gt;-----------------&lt;br&gt;{DC=mow,DC=local}  &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$mow.set_path('LDAP://CN=mow,OU=MowOu,DC=mow,DC=local')&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$mow  &lt;p&gt;distinguishedName&lt;br&gt;-----------------&lt;br&gt;{CN=mow,OU=MowOu,DC=mow,DC=local}&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;You can see from this that it is handy that you can use the methods you are used to (or vaguely remember) from VbScript. &lt;p&gt;And you can use the methods from the .NET Wrapper Object ( you can learn about using Get-Member ). &lt;p&gt;Ok, Ok&amp;nbsp;the CmdLets are for V2, (but I&amp;nbsp;did hear some rumors about some extra&amp;nbsp;functionality for AD as well as for WMI in RC2&amp;nbsp;.),  &lt;p&gt;but working in the Interactive&amp;nbsp;Shell console like this trying things interactively , combining Old and discovered knowledge, having much less looking up of Information and templates for admin task,&amp;nbsp;using SDK DLL's (MOM 2005,SMS2003)gives you that kind of a productivity boost compared to working in VbScript ( a guess for me it's&amp;nbsp;10x and sometimes (for on the fly work ) much more (could be days ), as&amp;nbsp;against doing the same in VbScript, and 2 or 3 times for CMD.EXE and commandline tool usage where applicable&amp;nbsp;) &lt;p&gt;That sometimes I&amp;nbsp;really feel like flying in PowerShell&amp;nbsp;;-)&amp;nbsp; &lt;p&gt;and we can make our own functions with ease from the commands also : &lt;p&gt;&amp;nbsp; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;function get-ADObject ($Path) {new-object system.directoryservices.directoryEntry($path)}&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;get-ADObject 'LDAP://CN=mow,OU=MowOu,DC=mow,DC=local'  &lt;p&gt;distinguishedName&lt;br&gt;-----------------&lt;br&gt;{CN=mow,OU=MowOu,DC=mow,DC=local}&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;&amp;nbsp;and with the easy of making GUI Forms in&amp;nbsp;PowerShell see &amp;nbsp;&lt;a href="http://mow001.blogspot.com/2006/09/powershell-active-directory-part-10-ad.html"&gt;PowerShell : Active Directory Part 10 (AD Browser) &lt;/a&gt;, for exporing the AD tree and visual selecting&amp;nbsp;an AD object for use in PowerShell, that also makes it easy to get to AD objects for interactive tasks. &lt;p&gt;Not everything is perfect yet (Exception Handling, for in scripts,Remoting etc.),&amp;nbsp;but I would &amp;nbsp;not be able to live without it for my dayly work allready. &lt;p&gt;If you followed this series, and&amp;nbsp; / or used PowerShell for AD management, compared to how you used to&amp;nbsp;do you think it gives you a productivity boost, or will&amp;nbsp;be able to&amp;nbsp;?&amp;nbsp;I would be glad to hear&amp;nbsp;what you think about this&amp;nbsp;, please leave a comment about that also (&lt;em&gt;Ok, enough begging, but my read / comment rate is low ;-) )&lt;/em&gt; &lt;p&gt;Enjoy, &lt;p&gt;Greetings, /\/\o\/\/ &lt;p&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/msh"&gt;msh&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-115808884079992534?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/115808884079992534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=115808884079992534' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115808884079992534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115808884079992534'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/09/powershell-active-directory-part-11.html' title='PowerShell : Active Directory Part 11 - moving - Renaming Objects'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-115766082801159312</id><published>2006-09-07T22:27:00.000+02:00</published><updated>2006-09-07T22:27:08.266+02:00</updated><title type='text'>PowerShell : Learn about the HashTable Object and other Collections</title><content type='html'>&lt;p&gt;In the TechNet ScriptCenter there is a series : &lt;a href="http://www.microsoft.com/technet/scriptcenter/resources/begin/archive.mspx"&gt;Sesame Script&lt;/a&gt;&amp;nbsp; &lt;em&gt;If you’re new to scripting, these articles will teach you the basics and help get you started.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;(Check out&amp;nbsp;also the &amp;nbsp;&lt;a href="http://www.microsoft.com/technet/scriptcenter/resources/begin/archive.mspx"&gt;&lt;b&gt;Sesame Script Archives&lt;/b&gt;&lt;/a&gt;&amp;nbsp;, although the Series is aimed at beginners also some more advanced topics get explained, an all articles are a good read.), also the concepts are often also usable in PowerShell so&amp;nbsp;even they are in VbScript they&amp;nbsp;still can be a good resource for&amp;nbsp;learning PowerShell)&amp;nbsp;&lt;/p&gt; &lt;p&gt;In this part of the series :&amp;nbsp;&lt;a href="http://www.microsoft.com/technet/scriptcenter/resources/begin/ss0906.mspx"&gt;Sesame Script: The Dictionary Object&lt;/a&gt;&amp;nbsp;, a Dictionary Object is discussed&lt;/p&gt; &lt;p&gt;In PowerShell we have a similar object called a HashTable that works almost the same and other .NET Collection Classes we can use that work like this, so this concepts are also good to know mastering PowerShell, &lt;em&gt;the WMI example might not be the best example as it is an collection of objects already,&lt;/em&gt; but as an ArrayList is used also in for example a Select statement for more info also&amp;nbsp;&lt;a href="http://mow001.blogspot.com/2006/08/powershell-and-active-directory-part-5.html"&gt;PowerShell and Active Directory Part 5&lt;/a&gt;&amp;nbsp;so is good to understand, and if you did not get the use in the Select completely its also good to get this background.&lt;/p&gt; &lt;p&gt;the HashTable unlike many other things do not enumerate on the pipeline. this can be a catch &lt;a href="http://mow001.blogspot.com"&gt;Wmi-Help Part 1 &lt;/a&gt;&lt;/p&gt; &lt;p&gt;In this post I will follow the Sesame Script Article with similar command in PowerShell and point out the PowerShell Specifics, be sure to read the part in the "Sesame Script" article completely first.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;An Example that Doesn’t Use the&amp;nbsp;HashTable Object&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;gwmi win32_service | fl name,state  &lt;p&gt;name : Alerter&lt;br&gt;state : Stopped  &lt;p&gt;name : Eventlog&lt;br&gt;state : Running&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;The next example about Filtering  &lt;p&gt;&amp;nbsp;  &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;gwmi win32_service -filter "state = 'Stopped'" | ft name,state  &lt;p&gt;name state&lt;br&gt;---- -----&lt;br&gt;Alerter Stopped&lt;br&gt;ALG Stopped&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;strong&gt;An Example that Does Use the Dictionary Object&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;gwmi win32_service |% {$ht = @{}}{$ht.add($_.name,$_.state)}&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$ht  &lt;p&gt;Name Value&lt;br&gt;---- -----&lt;br&gt;Eventlog Running&lt;br&gt;Alerter Stopped&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;First note we can create a HashTable like this in PowerShell&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;@{} | gm  &lt;p&gt;TypeName: System.Collections.Hashtable  &lt;p&gt;Name MemberType Definition&lt;br&gt;---- ---------- ----------&lt;br&gt;Add Method System.Void Add(Object key, Object value)&lt;br&gt;Clear Method System.Void Clear()&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;@{name = 'mow'} &lt;/p&gt; &lt;p&gt;Name Value&lt;br&gt;---- -----&lt;br&gt;name mow  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;@{'name' = 'mow'; 'shell' = 'PoSH'}  &lt;p&gt;Name Value&lt;br&gt;---- -----&lt;br&gt;name mow&lt;br&gt;shell PoSH&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Listing the Names of Stopped Services&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$ht.keys |? {$ht."$_" -eq 'Stopped'}&lt;br&gt;Alerter&lt;br&gt;ALG&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Running :  &lt;p&gt;&amp;nbsp;  &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$ht.keys |? {$ht.Item($_) -eq 'Running'}&lt;br&gt;Eventlog&lt;br&gt;W32Time&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;strong&gt;Other Things You Should Know About the Dictionary Object&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$ht.Contains('Alerter')&lt;br&gt;True&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$ht.Contains('foo')&lt;br&gt;False&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$ht.ContainsValue('Running')&lt;br&gt;True&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$ht.ContainsValue('Alerter')&lt;br&gt;False&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;For the rest see the Get-Member output&lt;/p&gt; &lt;p&gt;you can get to the DictionaryEntries it contains by calling the GetEnumerator yourself :&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$ht.GetEnumerator()&lt;/p&gt; &lt;p&gt;Name Value&lt;br&gt;---- -----&lt;br&gt;Eventlog Running&lt;br&gt;Alerter Stopped&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$ht.GetEnumerator() | gm  &lt;p&gt;TypeName: System.Collections.DictionaryEntry  &lt;p&gt;Name MemberType Definition&lt;br&gt;---- ---------- ----------&lt;br&gt;Name AliasProperty Name = Key&lt;br&gt;Equals Method System.Boolean Equals(Object obj)&lt;br&gt;get_Key Method System.Object get_Key()&lt;br&gt;get_Value Method System.Object get_Value()&lt;br&gt;GetHashCode Method System.Int32 GetHashCode()&lt;br&gt;GetType Method System.Type GetType()&lt;br&gt;set_Key Method System.Void set_Key(Object value)&lt;br&gt;set_Value Method System.Void set_Value(Object value)&lt;br&gt;ToString Method System.String ToString()&lt;br&gt;Key Property System.Object Key {get;set;}&lt;br&gt;Value Property System.Object Value {get;set;}&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;You can also see more advanced examples of&amp;nbsp;working with the HashTable Object in an MSH post (nothing changed here)&amp;nbsp;here :&lt;/p&gt; &lt;p&gt;: &lt;a href="http://mow001.blogspot.com/2005/12/get-ad-info-into-nested-hashtable-from.html"&gt;Get AD info into a nested HashTable from MSH&lt;/a&gt;&amp;nbsp;, &lt;em&gt;(also a good read if you follow the AD series, as this also contains info about how to construct the Query for a Search of Active DIrectory using a directory Searcher)&lt;/em&gt; &lt;/p&gt; &lt;p&gt;Also use get-Member well&amp;nbsp; ( &lt;a href="http://mow001.blogspot.com/2005/10/strange-behavour-of-get-member-on.html"&gt;Strange behavour of get-member on DataTables &lt;/a&gt;&amp;nbsp;), and Check out the Other collection members :&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Other Usefull Collections&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$h = new Collections.Hashtable&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$h | gm  &lt;p&gt;TypeName: System.Collections.Hashtable  &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;[System.Collections.ArrayList](1,2)&lt;br&gt;1&lt;br&gt;2  &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;,[System.Collections.ArrayList](1,2) | gm  &lt;p&gt;TypeName: System.Collections.ArrayList  &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$s = [System.Collections.Stack]('a','b')&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$s.count&lt;br&gt;2&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$s.pop()&lt;br&gt;b&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$s.count&lt;br&gt;1&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;,$s | gm  &lt;p&gt;TypeName: System.Collections.Stack  &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$sl = new System.Collections.SortedList&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;Get-Member -InputObject $sl &lt;/p&gt; &lt;p&gt;TypeName: System.Collections.SortedList  &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;$q = [System.Collections.Queue]('a','b')&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$q.Dequeue()&lt;br&gt;a&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;,$q | gm &lt;/p&gt; &lt;p&gt;TypeName: System.Collections.Queue &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;You see that this basic collection logic and get-member, can get a whole lot of possibilities next to a simple array to store Objects.  &lt;p&gt; &lt;p&gt;and you can use get-member-inputObject to list the methods of the Collection.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Greetings, /\/\o\/\/&lt;br&gt;&lt;/p&gt; &lt;p&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/msh"&gt;msh&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-115766082801159312?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/115766082801159312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=115766082801159312' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115766082801159312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115766082801159312'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/09/powershell-learn-about-hashtable_07.html' title='PowerShell : Learn about the HashTable Object and other Collections'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-115757632402571093</id><published>2006-09-06T22:58:00.000+02:00</published><updated>2006-09-06T23:38:44.426+02:00</updated><title type='text'>PowerShell : Setting SendAs permission in Exchange 2003 (AD)</title><content type='html'>&lt;p&gt;On the "You had me at EHLO" Exchange Team blog,&amp;nbsp;you can find this excelent Post with PowerShell Examples for E12.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;a href="http://msexchangeteam.com/archive/2006/09/05/428833.aspx"&gt;Exchange Server 2007 recipient management one-liners&lt;/a&gt;&lt;/p&gt; &lt;p&gt;But not all is lost if you still Have Exchange 2003 as much of the tasks listed here, you can also do in Active Directory directly.&lt;/p&gt; &lt;p&gt;I will&amp;nbsp;show&amp;nbsp;here also how you can do this directly in AD using PowerShell, for as you&amp;nbsp;have an Exchange 2003 environment and you need to do this, and so you can see the difference with and without the Exchange 2007 Cmdlet,&amp;nbsp;&lt;/p&gt; &lt;p&gt;I select the mailbox&amp;nbsp;from AD with the&amp;nbsp;PowerShell Active Directory Browser from Last&amp;nbsp;post in the AD series&amp;nbsp;&lt;a href="http://mow001.blogspot.com/2006/09/powershell-active-directory-part-10-ad.html"&gt;PowerShell : Active Directory Part 10 (AD Browser) &lt;/a&gt;&amp;nbsp;, ofcourse there are other ways to get at the mailbox as you could see in that series:&amp;nbsp;&lt;/p&gt; &lt;div style="font-family: courier new"&gt;&lt;span style="color: green"&gt;#&amp;nbsp;Grant&amp;nbsp;"Send-As"&amp;nbsp;permission&amp;nbsp;E12&lt;/span&gt; &lt;br&gt;&lt;br&gt;Add-ADPermission&amp;nbsp;testmbx&amp;nbsp;-ExtendedRights&amp;nbsp;Send-As&amp;nbsp;-user&amp;nbsp;jaredz &lt;br&gt;&lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;Using&amp;nbsp;AD&amp;nbsp;Browser&amp;nbsp;to&amp;nbsp;get&amp;nbsp;to&amp;nbsp;mailbox&lt;/span&gt; &lt;br&gt;&lt;br&gt;$mailbox&amp;nbsp;=&amp;nbsp;Browse-ActiveDirectory &lt;br&gt;$AccountName&amp;nbsp;=&amp;nbsp;&lt;span style="color: maroon"&gt;'Mow'&lt;/span&gt; &lt;br&gt;&lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;Grant&amp;nbsp;"Send-As"&amp;nbsp;Permission&amp;nbsp;Exchange&amp;nbsp;2003&amp;nbsp;(ActiveDirectory)&lt;/span&gt; &lt;br&gt;&lt;br&gt;$acl&amp;nbsp;=&amp;nbsp;new-&lt;span style="color: blue"&gt;object&lt;/span&gt;&amp;nbsp;System.DirectoryServices.ActiveDirectoryAccessRule&amp;nbsp;([Security.Principal.NTAccount]$AccountName,&lt;span style="color: maroon"&gt;'ExtendedRight'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'Allow'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'ab721a54-1e2f-11d0-9819-00aa0040529b'&lt;/span&gt;)&amp;nbsp; &lt;br&gt;$Mailbox.get_ObjectSecurity().AddAccessRule($acl) &lt;br&gt;$mailbox.CommitChanges()&amp;nbsp;&lt;/div&gt; &lt;p&gt;&amp;nbsp;For some more info about setting Active Directory&amp;nbsp; ACL's and ExtendedRights see also &lt;a href="http://mow001.blogspot.com/2006/08/powershell-and-active-directory-part-8.html"&gt;PowerShell and Active Directory Part 8 (ACL's) &lt;/a&gt;, or do a Search for the GUID : &lt;span style="color: maroon"&gt;'ab721a54-1e2f-11d0-9819-00aa0040529b'&lt;font color="#000000"&gt;&amp;nbsp; in Google for more info about SendAs and Exchange 2003 (SP1 + ).&lt;/font&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Enjoy, &lt;/p&gt; &lt;p&gt;greetings /\/\o\/\/&lt;br&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/msh"&gt;msh&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-115757632402571093?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/115757632402571093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=115757632402571093' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115757632402571093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115757632402571093'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/09/powershell-setting-sendas-permission.html' title='PowerShell : Setting SendAs permission in Exchange 2003 (AD)'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-115748992942354350</id><published>2006-09-05T22:57:00.000+02:00</published><updated>2006-10-03T16:28:11.480+02:00</updated><title type='text'>PowerShell : Active Directory Part 10 (AD Browser)</title><content type='html'>&lt;p&gt;For this&amp;nbsp;part&amp;nbsp;10&amp;nbsp;of this series, I'v made a GUI&amp;nbsp;Active Directory Browser script in PowerShell.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;*Warning*&lt;/strong&gt; As you have RC2 Installed all my AD posts will not work anymore, it is verry confusing, but fixable&amp;nbsp;if you read explaination here &lt;a href="http://mow001.blogspot.com/2006/09/powershell-rc2-and-active-directory.html"&gt;PowerShell RC2 and Active Directory &lt;/a&gt;: &lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;As I did switch back on all my work PC's (I did call all my colleagues not to upgrade as all our AD tools are messed up, I will not update them, as I would not recommend to upgrade to RC2 of you work with AD a lot.&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;em&gt; &lt;strong&gt;*Edit 2*&lt;/strong&gt; an RC2 version of this script you can find in the Comments, updated by Jakke,  Thanks Jakke !&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In the first post in this Active Directory series, &lt;a href="http://mow001.blogspot.com/2006/06/powershel-and-active-directory-part-1.html"&gt;PowerShell and Active Directory Part 1 &lt;/a&gt;, I showed how you could connect to the root of an Active Directory Domain, &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;$root&amp;nbsp;=&amp;nbsp;New-Object&amp;nbsp;System.DirectoryServices.DirectoryEntry&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Get a Sub OU :&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;$mowOU&amp;nbsp;=&amp;nbsp;$root.get_Children().find('ou=mowOu')&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Connect directly to an Active&amp;nbsp;Directory&amp;nbsp;Object :&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;$mowOu&amp;nbsp;=&amp;nbsp;New-Object&amp;nbsp;DirectoryServices.DirectoryEntry(&lt;/strong&gt;&lt;a href="ldap://OU=MowOu,DC=mow,DC=local"&gt;&lt;strong&gt;LDAP://OU=MowOu,DC=mow,DC=local&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;)&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;And how to use them on the CommandLine,&lt;/p&gt;&lt;br /&gt;&lt;p&gt;From there on, we amongst others, &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Listed and&amp;nbsp;created AD Objects, as OU's Users and Groups, Changed properties, Used methods,&amp;nbsp;Exported and Imported/Created the Objects (Users)&amp;nbsp;to and from a CSV file and did set ACL's to AD Objects.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;But if you need to connect to a SubOU deep in the AD tree, it is hard to get at it this way, we or need a lot of Get_Children() and Find() Methods,&amp;nbsp;or a long LDAP path.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In next&amp;nbsp;post we will so how to search for Objects in Active Directory using a DirectorySearcher, and how you can connect to the Active Directory Object from the results,that also will solve part of this problem.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;But&amp;nbsp;most of the times&amp;nbsp; would also be handy to&amp;nbsp;be be able to just browse through the AD Tree&amp;nbsp;to the Object you need and then use&amp;nbsp;it in PowerShell to perform some actions.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I Made a Script&amp;nbsp;for this in PowerShell&amp;nbsp; : &lt;strong&gt;BrowseActiveDirectory.ps1&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;This Script will connect to the Root of the Domain or to custom root (a Subcontainer supplied as a DirectoryEntry Object, &lt;em&gt;if you&amp;nbsp;did follow the rest of the series, I hope this makes perfect sense ;-)&lt;/em&gt; )&amp;nbsp;and if this succeeds builds a&amp;nbsp;Form that contains a TreeView Object,&amp;nbsp;that&amp;nbsp;you can use to&amp;nbsp;browse to the AD object you &amp;nbsp;need, and then Returns it so you can use it in PowerShell.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;This Form, (as you might have seen in my Teaser), Looks like this (click picture to enlarge)&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;img style="display: block; margin: 0px auto 10px; cursor: hand; text-align: center" alt="" src="http://photos1.blogger.com/blogger/8006/1759/400/bad.jpg" border="0"&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In this case I walked to the OU : MowOU, I also used in former examples,&amp;nbsp;when the Active Directory Browser will Startup you will only see the Root Object with the DN of the AD Object it represents.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;for performance reasons, not the Whole AD-tree will be read when starting up, but only when you select a Node in the TreeView, the Children of the AD object it presents get enumerated and there DN's are&amp;nbsp;added to the TreeView, we will use events from the TreeView to do this.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;When you use the Select Button or hit Enter, the DirectoryEntry will be retrieved and Passed back to the pipeline so&amp;nbsp; you can Catch it in the PowerShell console and put it into a variable&amp;nbsp;for further&amp;nbsp;use.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I like this GUI form as a quick way to get to the Object I want in AD, it is much quicker then&amp;nbsp;getting there&amp;nbsp;from the commandline, or it also much&amp;nbsp;easier&amp;nbsp;to explore and look at the structure of the ActiveDirectory domain this way.&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;As already mentioned in &amp;nbsp;&lt;a href="http://mow001.blogspot.com/2006/08/powershell-and-active-directory-part-8.html"&gt;PowerShell and Active Directory Part 8 (ACL's) &lt;/a&gt;, I like to just use "loose lines of Code" or functions, that&amp;nbsp;you just can just past into the Commandline, so most of my examples are given that way&lt;/p&gt;&lt;br /&gt;&lt;p&gt;And I gave some more examples and explained a bit more about the difference with Scripts here :&lt;a href="http://mow001.blogspot.com/2006/08/powershell-has-my-dell-dangerous.html"&gt;PowerShell, Has my Dell a dangerous battery ? &lt;/a&gt;, &lt;/p&gt;&lt;br /&gt;&lt;p&gt;This script I made Hybrid, you can start it directly or start it to load the function, I&amp;nbsp;did add this function as a Switch Parameter,&lt;/p&gt;&lt;br /&gt;&lt;p&gt;so Next to Using&amp;nbsp;the script Directly like this :&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$De = .\ActiveDirectoryBrowser.Ps1&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$De = fl *&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$De = .\ActiveDirectoryBrowser.Ps1&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$De | fl * &lt;br /&gt;&lt;p&gt;objectClass : {top, organizationalUnit}&lt;br&gt;ou : {MowSubOu}&lt;br&gt;distinguishedName : {OU=MowSubOu,OU=MowOu,DC=mow,DC=local}&lt;br&gt;instanceType : {4}&lt;br&gt;whenCreated : {6/26/2006 6:59:59 PM}&lt;br&gt;whenChanged : {6/26/2006 6:59:59 PM}&lt;br&gt;uSNCreated : {System.__ComObject}&lt;br&gt;uSNChanged : {System.__ComObject}&lt;br&gt;name : {MowSubOu}&lt;br&gt;objectGUID : {162 13 61 122 139 39 201 72 161 216 129 101 53 217 180 114}&lt;br&gt;objectCategory : {CN=Organizational-Unit,CN=Schema,CN=Configuration,DC=mow,DC=local}&lt;br&gt;nTSecurityDescriptor : {System.__ComObject} &lt;br /&gt;&lt;p&gt;&lt;font color="#00ff00"&gt;# Use this as new Root&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;.\ActiveDirectoryBrowser.Ps1 $de&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;You can also use the Browse-ActiveDirectory Function that does all the&amp;nbsp;work in the Script, by &amp;nbsp;Loading it into your current session by dotSourcing the ActiveDirectoryBrowser.Ps1&amp;nbsp;script and&amp;nbsp;providing the -loadOnly Switch&lt;/p&gt;&lt;br /&gt;&lt;p&gt;then&amp;nbsp;you can use the Browse-ActiveDirectory function interactively from then on, so you can also use this script in your profile&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://photos1.blogger.com/blogger/8006/1759/1600/badStart.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; cursor: hand; text-align: center" alt="" src="http://photos1.blogger.com/blogger/8006/1759/400/badStart.jpg" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;If you use the -LoadOnly Switch but do not DotSource it the script will warn you like this :&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;.\ActiveDirectoryBrowser.Ps1 -l&lt;br&gt;&lt;font color="#ff8000"&gt;WARNING: LoadOnly Switch is given but you also need to 'dotsource' the script to load the function in the global scope&lt;/font&gt;&lt;br&gt;To Start a script in the global scope (DotSource) put a dot and a space in front of path to the script&lt;br&gt;If the script is in the current directory this would look like this :&lt;br&gt;. .\ActiveDirectoryBrowser.Ps1&lt;br&gt;then :&lt;br&gt;The Browse-ActiveDirectory Function is loaded and can be used like this :&lt;br&gt;$de = Browse-ActiveDirectory&lt;br&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;. .\ActiveDirectoryBrowser.Ps1 -l&lt;br&gt;The Browse-ActiveDirectory Function is loaded and can be used like this :&lt;br&gt;$de = Browse-ActiveDirectory&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;If&amp;nbsp;you use&amp;nbsp;the script&amp;nbsp;this way for loading the function, it also&amp;nbsp;will Define the&amp;nbsp;alias&amp;nbsp;&lt;strong&gt;Bad&lt;/strong&gt; for ease of use&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I hope this LoadOnly option example&amp;nbsp;also shows a bit how you can use the different forms of starting things in PowerShell.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The Script looks like this :&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;DIV style="FONT-FAMILY: Courier New"&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;ActiveDirectoryBrowser.Ps1&lt;/SPAN&gt; &lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&lt;/SPAN&gt; &lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;This&amp;nbsp;script&amp;nbsp;does&amp;nbsp;show&amp;nbsp;a&amp;nbsp;GUI&amp;nbsp;to&amp;nbsp;browse&amp;nbsp;ActiveDirectory&amp;nbsp;in&amp;nbsp;a&amp;nbsp;Treeview&lt;/SPAN&gt; &lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;and&amp;nbsp;Returns&amp;nbsp;the&amp;nbsp;DirectoryEntry&amp;nbsp;Selected&amp;nbsp;for&amp;nbsp;use&amp;nbsp;in&amp;nbsp;PowerShell&lt;/SPAN&gt; &lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;or&amp;nbsp;if&amp;nbsp;LoadOnly&amp;nbsp;Parameter&amp;nbsp;is&amp;nbsp;given&amp;nbsp;it&amp;nbsp;just&amp;nbsp;loads&amp;nbsp;the&amp;nbsp;Browse-ActiveDirectory&amp;nbsp;function,&amp;nbsp;&lt;/SPAN&gt; &lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;and&amp;nbsp;does&amp;nbsp;set&amp;nbsp;the&amp;nbsp;alias&amp;nbsp;bad,&amp;nbsp;for&amp;nbsp;loading&amp;nbsp;the&amp;nbsp;function&amp;nbsp;for&amp;nbsp;interactive&amp;nbsp;use&amp;nbsp;by&amp;nbsp;dotsourcing&amp;nbsp;the&amp;nbsp;script&lt;/SPAN&gt; &lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&lt;/SPAN&gt; &lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;/\/\o\/\/&amp;nbsp;2006&lt;/SPAN&gt; &lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&lt;/SPAN&gt; &lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;http://mow001.blogspot.com&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;param&amp;nbsp;( &lt;BR&gt;&amp;nbsp;&amp;nbsp;[directoryservices.directoryEntry]$root&amp;nbsp;=&amp;nbsp;(new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;system.directoryservices.directoryEntry), &lt;BR&gt;&amp;nbsp;&amp;nbsp;[&lt;SPAN style="COLOR: blue"&gt;Switch&lt;/SPAN&gt;]$LoadOnly &lt;BR&gt;) &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;the&amp;nbsp;Main&amp;nbsp;function&amp;nbsp;that&amp;nbsp;can&amp;nbsp;be&amp;nbsp;loaded&amp;nbsp;or&amp;nbsp;gets&amp;nbsp;started&amp;nbsp;at&amp;nbsp;the&amp;nbsp;end&amp;nbsp;of&amp;nbsp;the&amp;nbsp;script&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp; &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;Function&lt;/SPAN&gt;&amp;nbsp;Browse-ActiveDirectory&amp;nbsp;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp;param&amp;nbsp;([directoryservices.directoryEntry]$root&amp;nbsp;=&amp;nbsp;(new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;system.directoryservices.directoryEntry)) &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Try&amp;nbsp;to&amp;nbsp;connect&amp;nbsp;to&amp;nbsp;the&amp;nbsp;Domain&amp;nbsp;root&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;amp;{trap&amp;nbsp;{throw&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"$($_)"&lt;/SPAN&gt;};[&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;]$Root.get_Name()} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Make&amp;nbsp;the&amp;nbsp;form&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;$form&amp;nbsp;=&amp;nbsp;new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;Windows.Forms.form&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$form.Size&amp;nbsp;=&amp;nbsp;new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;System.Drawing.Size&amp;nbsp;@(&lt;SPAN style="COLOR: maroon"&gt;800&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;600&lt;/SPAN&gt;)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$form.text&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"/\/\o\/\/'s&amp;nbsp;PowerShell&amp;nbsp;ActiveDirectory&amp;nbsp;Browser"&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Make&amp;nbsp;TreeView&amp;nbsp;to&amp;nbsp;hold&amp;nbsp;the&amp;nbsp;Domain&amp;nbsp;Tree&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;$TV&amp;nbsp;=&amp;nbsp;new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;windows.forms.TreeView &lt;BR&gt;&amp;nbsp;&amp;nbsp;$TV.Location&amp;nbsp;=&amp;nbsp;new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;System.Drawing.Size(&lt;SPAN style="COLOR: maroon"&gt;10&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;30&lt;/SPAN&gt;)&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$TV.size&amp;nbsp;=&amp;nbsp;new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;System.Drawing.Size(&lt;SPAN style="COLOR: maroon"&gt;770&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;470&lt;/SPAN&gt;)&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$TV.Anchor&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"top,&amp;nbsp;left,&amp;nbsp;right"&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Add&amp;nbsp;the&amp;nbsp;Button&amp;nbsp;to&amp;nbsp;close&amp;nbsp;the&amp;nbsp;form&amp;nbsp;and&amp;nbsp;return&amp;nbsp;the&amp;nbsp;selected&amp;nbsp;DirectoryEntry&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$btnSelect&amp;nbsp;=&amp;nbsp;new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;System.Windows.Forms.Button&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$btnSelect.text&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"Select"&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$btnSelect.Location&amp;nbsp;=&amp;nbsp;new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;System.Drawing.Size(&lt;SPAN style="COLOR: maroon"&gt;710&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;510&lt;/SPAN&gt;)&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$btnSelect.size&amp;nbsp;=&amp;nbsp;new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;System.Drawing.Size(&lt;SPAN style="COLOR: maroon"&gt;70&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;30&lt;/SPAN&gt;)&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$btnSelect.Anchor&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"Bottom,&amp;nbsp;right"&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;If&amp;nbsp;Select&amp;nbsp;button&amp;nbsp;pressed&amp;nbsp;set&amp;nbsp;return&amp;nbsp;value&amp;nbsp;to&amp;nbsp;Selected&amp;nbsp;DirectoryEntry&amp;nbsp;and&amp;nbsp;close&amp;nbsp;form&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;$btnSelect.add_Click({ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$script:&lt;SPAN style="COLOR: blue"&gt;Return&lt;/SPAN&gt;&amp;nbsp;=&amp;nbsp;new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;system.directoryservices.directoryEntry(&lt;SPAN style="COLOR: maroon"&gt;"LDAP://$($TV.SelectedNode.text)"&lt;/SPAN&gt;)&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$form.close() &lt;BR&gt;&amp;nbsp;&amp;nbsp;}) &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Add&amp;nbsp;Cancel&amp;nbsp;button&amp;nbsp;&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;$btnCancel&amp;nbsp;=&amp;nbsp;new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;System.Windows.Forms.Button&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$btnCancel.text&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"Cancel"&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$btnCancel.Location&amp;nbsp;=&amp;nbsp;new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;System.Drawing.Size(&lt;SPAN style="COLOR: maroon"&gt;630&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;510&lt;/SPAN&gt;)&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$btnCancel.size&amp;nbsp;=&amp;nbsp;new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;System.Drawing.Size(&lt;SPAN style="COLOR: maroon"&gt;70&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;30&lt;/SPAN&gt;)&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$btnCancel.Anchor&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"Bottom,&amp;nbsp;right"&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;If&amp;nbsp;cancel&amp;nbsp;button&amp;nbsp;is&amp;nbsp;clicked&amp;nbsp;set&amp;nbsp;returnvalue&amp;nbsp;to&amp;nbsp;$False&amp;nbsp;and&amp;nbsp;close&amp;nbsp;form&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;$btnCancel.add_Click({$script:&lt;SPAN style="COLOR: blue"&gt;Return&lt;/SPAN&gt;&amp;nbsp;=&amp;nbsp;$&lt;SPAN style="COLOR: maroon"&gt;false&lt;/SPAN&gt;&amp;nbsp;;&amp;nbsp;$form.close()}) &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Create&amp;nbsp;a&amp;nbsp;TreeNode&amp;nbsp;for&amp;nbsp;the&amp;nbsp;domain&amp;nbsp;root&amp;nbsp;found&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;$TNRoot&amp;nbsp;=&amp;nbsp;new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;System.Windows.Forms.TreeNode(&lt;SPAN style="COLOR: maroon"&gt;"Root"&lt;/SPAN&gt;) &lt;BR&gt;&amp;nbsp;&amp;nbsp;$TNRoot.Name&amp;nbsp;=&amp;nbsp;$root.name &lt;BR&gt;&amp;nbsp;&amp;nbsp;$TNRoot.Text&amp;nbsp;=&amp;nbsp;$root.distinguishedName &lt;BR&gt;&amp;nbsp;&amp;nbsp;$TNRoot.tag&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"NotEnumerated"&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;First&amp;nbsp;time&amp;nbsp;a&amp;nbsp;Node&amp;nbsp;is&amp;nbsp;Selected,&amp;nbsp;enumerate&amp;nbsp;the&amp;nbsp;Children&amp;nbsp;of&amp;nbsp;the&amp;nbsp;selected&amp;nbsp;DirectoryEntry&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;$TV.add_AfterSelect({ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;($&lt;SPAN style="COLOR: blue"&gt;this&lt;/SPAN&gt;.SelectedNode.tag&amp;nbsp;-eq&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"NotEnumerated"&lt;/SPAN&gt;)&amp;nbsp;{ &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$de&amp;nbsp;=&amp;nbsp;new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;system.directoryservices.directoryEntry(&lt;SPAN style="COLOR: maroon"&gt;"LDAP://$($this.SelectedNode.text)"&lt;/SPAN&gt;) &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Add&amp;nbsp;all&amp;nbsp;Children&amp;nbsp;found&amp;nbsp;as&amp;nbsp;Sub&amp;nbsp;Nodes&amp;nbsp;to&amp;nbsp;the&amp;nbsp;selected&amp;nbsp;TreeNode&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$de.get_Children()&amp;nbsp;|&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;foreach&lt;/SPAN&gt;&amp;nbsp;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$TN&amp;nbsp;=&amp;nbsp;new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;System.Windows.Forms.TreeNode &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$TN.Name&amp;nbsp;=&amp;nbsp;$_.name &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$TN.Text&amp;nbsp;=&amp;nbsp;$_.distinguishedName &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$TN.tag&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"NotEnumerated"&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$&lt;SPAN style="COLOR: blue"&gt;this&lt;/SPAN&gt;.SelectedNode.Nodes.Add($TN) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Set&amp;nbsp;tag&amp;nbsp;to&amp;nbsp;show&amp;nbsp;this&amp;nbsp;node&amp;nbsp;is&amp;nbsp;already&amp;nbsp;enumerated&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$&lt;SPAN style="COLOR: blue"&gt;this&lt;/SPAN&gt;.SelectedNode.tag&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"Enumerated"&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&amp;nbsp;&amp;nbsp;}) &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Add&amp;nbsp;the&amp;nbsp;RootNode&amp;nbsp;to&amp;nbsp;the&amp;nbsp;Treeview&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;[&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;]$TV.Nodes.Add($TNRoot) &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Add&amp;nbsp;the&amp;nbsp;Controls&amp;nbsp;to&amp;nbsp;the&amp;nbsp;Form&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$form.Controls.Add($TV) &lt;BR&gt;&amp;nbsp;&amp;nbsp;$form.Controls.Add($btnSelect&amp;nbsp;)&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$form.Controls.Add($btnCancel&amp;nbsp;) &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Set&amp;nbsp;the&amp;nbsp;Select&amp;nbsp;Button&amp;nbsp;as&amp;nbsp;the&amp;nbsp;Default&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$form.AcceptButton&amp;nbsp;=&amp;nbsp;&amp;nbsp;$btnSelect &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;$Form.Add_Shown({$form.Activate()})&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;[&lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt;]$form.showdialog()&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Return&amp;nbsp;selected&amp;nbsp;DirectoryEntry&amp;nbsp;or&amp;nbsp;$false&amp;nbsp;as&amp;nbsp;Cancel&amp;nbsp;Button&amp;nbsp;is&amp;nbsp;Used&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;Return&lt;/SPAN&gt;&amp;nbsp;$script:&lt;SPAN style="COLOR: blue"&gt;Return&lt;/SPAN&gt; &lt;BR&gt;} &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;If&amp;nbsp;used&amp;nbsp;as&amp;nbsp;a&amp;nbsp;script&amp;nbsp;start&amp;nbsp;the&amp;nbsp;function&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;Set-PSDebug&amp;nbsp;-Strict:$&lt;SPAN style="COLOR: maroon"&gt;false&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;&amp;nbsp;Otherwise&amp;nbsp;Checking&amp;nbsp;the&amp;nbsp;Switch&amp;nbsp;parmeter&amp;nbsp;does&amp;nbsp;fail&amp;nbsp;(Bug&amp;nbsp;?)&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;($LoadOnly.IsPresent)&amp;nbsp;{ &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Only&amp;nbsp;load&amp;nbsp;the&amp;nbsp;Function&amp;nbsp;for&amp;nbsp;interactive&amp;nbsp;use&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;(-not&amp;nbsp;$MyInvocation.line.StartsWith(&lt;SPAN style="COLOR: maroon"&gt;'.&amp;nbsp;'&lt;/SPAN&gt;))&amp;nbsp;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Write-Warning&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"LoadOnly&amp;nbsp;Switch&amp;nbsp;is&amp;nbsp;given&amp;nbsp;but&amp;nbsp;you&amp;nbsp;also&amp;nbsp;need&amp;nbsp;to&amp;nbsp;'dotsource'&amp;nbsp;the&amp;nbsp;script&amp;nbsp;to&amp;nbsp;load&amp;nbsp;the&amp;nbsp;function&amp;nbsp;in&amp;nbsp;the&amp;nbsp;global&amp;nbsp;scope"&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Write-Host&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"To&amp;nbsp;Start&amp;nbsp;a&amp;nbsp;script&amp;nbsp;in&amp;nbsp;the&amp;nbsp;global&amp;nbsp;scope&amp;nbsp;(dotsource)&amp;nbsp;put&amp;nbsp;a&amp;nbsp;dot&amp;nbsp;and&amp;nbsp;a&amp;nbsp;space&amp;nbsp;in&amp;nbsp;front&amp;nbsp;of&amp;nbsp;path&amp;nbsp;to&amp;nbsp;the&amp;nbsp;script"&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Write-Host&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"If&amp;nbsp;the&amp;nbsp;script&amp;nbsp;is&amp;nbsp;in&amp;nbsp;the&amp;nbsp;current&amp;nbsp;directory&amp;nbsp;this&amp;nbsp;would&amp;nbsp;look&amp;nbsp;like&amp;nbsp;this&amp;nbsp;:"&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Write-Host&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;".&amp;nbsp;.\ActiveDirectoryBrowser.Ps1"&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Write-Host&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"then&amp;nbsp;:"&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;} &lt;BR&gt;&amp;nbsp;&amp;nbsp;Write-Host&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"The&amp;nbsp;Browse-ActiveDirectory&amp;nbsp;Function&amp;nbsp;is&amp;nbsp;loaded&amp;nbsp;and&amp;nbsp;can&amp;nbsp;be&amp;nbsp;used&amp;nbsp;like&amp;nbsp;this&amp;nbsp;:"&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;Write-Host&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;'$de&amp;nbsp;=&amp;nbsp;Browse-ActiveDirectory'&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;Set-alias&amp;nbsp;bad&amp;nbsp;Browse-ActiveDirectory &lt;BR&gt;} &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;Else&lt;/SPAN&gt;&amp;nbsp;{ &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;start&amp;nbsp;Function&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;.&amp;nbsp;Browse-ActiveDirectory&amp;nbsp;$root &lt;BR&gt;&lt;BR&gt;} &lt;BR&gt;&lt;/DIV&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Most of this Code is straight forward I think with the # comments( if you followed the AD series, and have seen some of my other PowerShell GUI Examples)&amp;nbsp;, just remember that the add_* methods are used to add scripts to events from the objects on the Form.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;here some remark by the main points of interest in the script (sorry Numbers Gone) :&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Line 24&lt;/strong&gt; : &amp;amp;{trap&amp;nbsp;{throw&amp;nbsp;&lt;span style="color: maroon"&gt;"$($_)"&lt;/span&gt;};[&lt;span style="color: blue"&gt;void&lt;/span&gt;]$Root.get_Name()} &lt;/p&gt;&lt;br /&gt;&lt;p&gt;This line does test the ActiveDirectory Connection by getting the name Property and use a Trap block to catch it and throwing the Error again so the script will stop if this fails.&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Line 49,64&lt;/strong&gt; :$btnCancel.add_Click({$script:Return = $false ; $form.close()})&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The add_Click methods handle the event when I button gets clicked you can give this funtion a Delegate ScriptBlock that gets executed every time the button get clicked.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Line 75-95&lt;/strong&gt; : $TV.add_AfterSelect({ &lt;/p&gt;&lt;br /&gt;&lt;p&gt;This whole Scriptblock is also an eventhandler delegate, this one from the Treeview object and it is called every time a TreeNode is selected,&lt;/p&gt;&lt;br /&gt;&lt;p&gt;you can see there is a variable with the name $This, this will contain the TreeView object so we can get the treenode&amp;nbsp;that is selected at that moment from that &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Line 76&lt;/strong&gt; : &lt;span style="color: blue"&gt;if&lt;/span&gt;&amp;nbsp;($&lt;span style="color: blue"&gt;this&lt;/span&gt;.SelectedNode.tag&amp;nbsp;-eq&amp;nbsp;&lt;span style="color: maroon"&gt;"NotEnumerated"&lt;/span&gt;)&lt;/p&gt;&lt;br /&gt;&lt;p&gt;we check if we already did get the children of this node, otherwise we will collect them and add SubNodes to the TreeView for them.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Line 109&lt;/strong&gt; : $form.AcceptButton&amp;nbsp;=&amp;nbsp;&amp;nbsp;$btnSelect&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Make The Select Button the Default so it will get a click event when [Enter] is pressed&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Line 111 :&lt;/strong&gt; $Form.Add_Shown({$form.Activate()})&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Used to give the form focus&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Line 120&lt;/strong&gt; : The logic to make the script "Hybrid"&lt;/p&gt;&lt;br /&gt;&lt;p&gt;For more info about the AD parts see the rest of the series, &lt;/p&gt;&lt;br /&gt;&lt;p&gt;For more info about building GUI's and placing and using Form elements&amp;nbsp;on them&amp;nbsp;in PowerShell See my Other GUI examples in former posts.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Using a DataGrid :&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://mow001.blogspot.com/2006/05/powershell-out-datagrid-up_114867790226603538.html"&gt;&lt;a href="http://mow001.blogspot.com/2006/05/powershell-out-datagrid-update-and.html"&gt;&lt;a href="http://mow001.blogspot.com/2006/05/powershell-out-datagrid-update-and.html"&gt;PowerShell out-DataGrid update and more DataSet utilities&lt;/a&gt;&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Using a Property Grid (Object Viewer)&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://mow001.blogspot.com/2006/04/powershell-out-propertygrid-msh-view.html"&gt;PowerShell-out-propertygrid-msh-view.html&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;about Focus the Form problem (updated version this script)&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://mow001.blogspot.com/2006/01/simple-show-image-function-for-monad.html"&gt;Simple Show-Image function for Monad&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Adding menus etc ,&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://mow001.blogspot.com/2006/02/msh-concentration-scripting-games-part.html"&gt;MSH Concentration (scripting games part 4)&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://mow001.blogspot.com/2005/11/msh-minesweeper-gui-game.html"&gt;MSH Minesweeper GUI &lt;b&gt;game&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Hosting PowerShell in it.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://mow001.blogspot.com/2006/03/hosting-msh-runspace-from-monad.html"&gt;&lt;b&gt;Hosting&lt;/b&gt; an MSH runspace from Monad&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Use For EventWatcher workaround (STA Thread ), and how to use Popup balloons.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://mow001.blogspot.com/2005/10/msh-directory-watcher-with-popup.html"&gt;MSH directory watcher with popup-balloon&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;There are a bit more posts to find,&amp;nbsp;if you search on GUI on my blog.&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;*Edit* as the lineNumbers do&amp;nbsp;stay&amp;nbsp;if you copy&amp;nbsp;the Code Above and pasting it, So I'm&amp;nbsp;posting the code another time without LineNumbers&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Enjoy,&lt;br&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;greetings /\/\o\/\/&lt;br&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/msh"&gt;msh&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Repost code from Notepad,without LineNumbers hope this works as well LiveWrite as Blogger hangs, on toughing this post ;-(&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-115748992942354350?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/115748992942354350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=115748992942354350' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115748992942354350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115748992942354350'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/09/powershell-active-directory-part-10-ad.html' title='PowerShell : Active Directory Part 10 (AD Browser)'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-115740607690961494</id><published>2006-09-04T23:41:00.000+02:00</published><updated>2006-09-04T23:41:17.146+02:00</updated><title type='text'>PowerShell</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;div style="font-family: courier new"&gt;"$([&lt;span style="color: blue"&gt;char&lt;/span&gt;[]](&amp;nbsp;(&lt;span style="color: maroon"&gt;2&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;40&lt;/span&gt;&amp;nbsp;&amp;nbsp;)&amp;nbsp;&amp;nbsp;, &lt;br&gt;(&lt;span style="color: maroon"&gt;100&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&amp;nbsp;, &lt;br&gt;(&lt;span style="color: maroon"&gt;99&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&amp;nbsp;&amp;nbsp;&amp;nbsp;, &lt;br&gt;(&lt;span style="color: maroon"&gt;10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;10&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;1&lt;/span&gt;&amp;nbsp;&amp;nbsp;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;, &lt;br&gt;(&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;114&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;), &lt;br&gt;(&amp;nbsp;&lt;span style="color: maroon"&gt;83&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&amp;nbsp;&amp;nbsp;&amp;nbsp;, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;100&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;4&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&amp;nbsp;&amp;nbsp;&amp;nbsp;, &lt;br&gt;(&lt;span style="color: maroon"&gt;50&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;50&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;1&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&amp;nbsp;&amp;nbsp;&amp;nbsp;, &lt;br&gt;(&lt;span style="color: maroon"&gt;30&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;+&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;70&lt;/span&gt;&amp;nbsp;&amp;nbsp;+&amp;nbsp;&lt;span style="color: maroon"&gt;8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&amp;nbsp;&amp;nbsp;&amp;nbsp;, &lt;br&gt;(&lt;span style="color: maroon"&gt;9&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+&amp;nbsp;&lt;span style="color: maroon"&gt;99&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&amp;nbsp;&amp;nbsp; &lt;br&gt;) &lt;br&gt;) &lt;br&gt;"&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-115740607690961494?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/115740607690961494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=115740607690961494' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115740607690961494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115740607690961494'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/09/powershell.html' title='PowerShell'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-115729246001728582</id><published>2006-09-03T16:07:00.000+02:00</published><updated>2006-09-03T16:15:38.506+02:00</updated><title type='text'>PowerShell : How Do I randomize a list, and remove some elements ?</title><content type='html'>&lt;p&gt;Going on from last 2 posts, &lt;/p&gt; &lt;p&gt;&lt;a href="http://mow001.blogspot.com/2006/09/powershell-how-can-i-tell-whitch.html"&gt;PowerShell : How can I tell whitch numbers are missing from a sequence of numbers found in a text file ? &lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://mow001.blogspot.com/2006/09/powershell-can-you-do-that-less.html"&gt;PowerShell : Can you do that less cryptic ? &lt;/a&gt;&lt;/p&gt; &lt;p&gt;about finding missing elements in a sequence, inspired by a Hey Scripting guy, article : &lt;a href="http://mow001.blogspot.com/2006/09/powershell-how-can-i-tell-whitch.html"&gt;PowerShell : How can I tell witch numbers are missing from a sequence of numbers found in a text file ? &lt;/a&gt;, and the &lt;a href="http://www.microsoft.com/technet/scriptcenter/resources/qanda/feb05/hey0225.mspx"&gt;&lt;b&gt;Sort&lt;/b&gt;&lt;/a&gt;&amp;nbsp;problem mentioned.&lt;/p&gt; &lt;p&gt;I came to another nice challenge, creating a test file for it, that is random and with some missing numbers,&lt;/p&gt; &lt;p&gt;&amp;nbsp;I made a remark about speed, (edit 3) in the second post, as on IRC we where comparing other methods and speed differences&amp;nbsp;between the Methods used, you can find the examples&amp;nbsp;at the end of&amp;nbsp;the second post. &lt;/p&gt; &lt;p&gt;But with so little numbers (10) in the original file, it is hard to test, &lt;/p&gt; &lt;p&gt;So I made up some PowerShell commands to make a bigger testfile for this, for example to test the speed of the filereading and the sort, so&amp;nbsp;if you past this code into the PowerShell console It will create a testfile of 1900 numbers from 1 to 2000 in Random&amp;nbsp;order&amp;nbsp;and with&amp;nbsp;100 missing numbers&amp;nbsp;:&lt;/p&gt; &lt;p&gt;Below the Code you will find the results when I did paste this code into my Console with some remarks to explain what is going on here&amp;nbsp;:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div style="font-family: courier new"&gt;&lt;span style="color: green"&gt;#&amp;nbsp;Write&amp;nbsp;the&amp;nbsp;test&amp;nbsp;Numbers&amp;nbsp;to&amp;nbsp;the&amp;nbsp;file&amp;nbsp;&lt;/span&gt; &lt;br&gt;&lt;br&gt;&lt;span style="color: maroon"&gt;1&lt;/span&gt;.&lt;span style="color: maroon"&gt;.2000&lt;/span&gt;&amp;nbsp;|&amp;nbsp;sc&amp;nbsp;c:\powershell\test.txt &lt;br&gt;&lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;Read&amp;nbsp;them&amp;nbsp;back&amp;nbsp;in&amp;nbsp;an&amp;nbsp;ArrayList&lt;/span&gt; &lt;br&gt;&lt;br&gt;[collections.arraylist]$a=[io.file]::ReadAllLines(&lt;span style="color: maroon"&gt;'c:\powershell\test.txt'&lt;/span&gt;) &lt;br&gt;&lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;put&amp;nbsp;them&amp;nbsp;in&amp;nbsp;random&amp;nbsp;order&amp;nbsp;and&amp;nbsp;remove&amp;nbsp;100&amp;nbsp;to&amp;nbsp;create&amp;nbsp;the&amp;nbsp;gaps&lt;/span&gt; &lt;br&gt;&lt;br&gt;$r&amp;nbsp;=&amp;nbsp;($a.count&amp;nbsp;-&amp;nbsp;&lt;span style="color: maroon"&gt;100&lt;/span&gt;).&lt;span style="color: maroon"&gt;.1&lt;/span&gt;&amp;nbsp;|%&amp;nbsp;{$R&amp;nbsp;=&amp;nbsp;new-&lt;span style="color: blue"&gt;object&lt;/span&gt;&amp;nbsp;random}{$R.next(&lt;span style="color: maroon"&gt;0&lt;/span&gt;,$a.count)&amp;nbsp;|%{$a[$_];$a.removeat($_)}}&amp;nbsp; &lt;br&gt;&lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;Test&amp;nbsp;the&amp;nbsp;Times&amp;nbsp;for&amp;nbsp;sorting&amp;nbsp;&lt;/span&gt; &lt;br&gt;&lt;br&gt;(measure-command&amp;nbsp;{$r&amp;nbsp;|&amp;nbsp;sort&amp;nbsp;{[&lt;span style="color: blue"&gt;int&lt;/span&gt;]$_}}).TotalMilliseconds &lt;br&gt;(measure-command&amp;nbsp;{[array]::sort($r)}).TotalMilliseconds &lt;br&gt;&lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;Write&amp;nbsp;the&amp;nbsp;Randomized&amp;nbsp;numbers&amp;nbsp;back&amp;nbsp;to&amp;nbsp;the&amp;nbsp;file&lt;/span&gt; &lt;br&gt;&lt;br&gt;$r&amp;nbsp;|&amp;nbsp;sc&amp;nbsp;c:\powershell\test.txt &lt;br&gt;&lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;Test&amp;nbsp;the&amp;nbsp;complete&amp;nbsp;Command&lt;/span&gt; &lt;br&gt;&lt;br&gt;(Measure-Command&amp;nbsp;{gc&amp;nbsp;test.txt&amp;nbsp;|&amp;nbsp;sort&amp;nbsp;{[&lt;span style="color: blue"&gt;int&lt;/span&gt;]$_}&amp;nbsp;|%&amp;nbsp;{$i&amp;nbsp;=&amp;nbsp;&lt;span style="color: maroon"&gt;1&lt;/span&gt;}{&lt;span style="color: blue"&gt;while&lt;/span&gt;&amp;nbsp;($i&amp;nbsp;-lt&amp;nbsp;$_){$i;$i++};$i++}}).TotalMilliseconds &lt;br&gt;&lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;Test&amp;nbsp;the&amp;nbsp;Alternate&amp;nbsp;Version&lt;/span&gt; &lt;br&gt;&lt;br&gt;(Measure-Command&amp;nbsp;{ &lt;br&gt;&amp;nbsp;&amp;nbsp;[&lt;span style="color: blue"&gt;int&lt;/span&gt;[]]$a=[io.file]::ReadAllLines(&lt;span style="color: maroon"&gt;'c:\powershell\test.txt'&lt;/span&gt;) &lt;br&gt;&amp;nbsp;&amp;nbsp;[array]::sort($a) &lt;br&gt;&amp;nbsp;&amp;nbsp;$a&amp;nbsp;|%&amp;nbsp;{$i&amp;nbsp;=&amp;nbsp;&lt;span style="color: maroon"&gt;1&lt;/span&gt;}{&lt;span style="color: blue"&gt;while&lt;/span&gt;&amp;nbsp;($i&amp;nbsp;-lt&amp;nbsp;$_){$i;$i++};$i++} &lt;br&gt;}).TotalMilliseconds &lt;br&gt;&lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt; &lt;p&gt;And here the results of this :&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;# Write the test Numbers to the file&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;1..2000 | sc c:\powershell\test.txt&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;# Read them back in an Array&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;[collections.arraylist]$a=[io.file]::ReadAllLines('c:\powershell\test.txt')&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;# put them in random order and remove 100 to create the gaps&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$r = ($a.count - 100)..1 |% {$R = new-object random}{$R.next(0,$a.count) |%{$a[$_];$a.removeat($_)}}&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;This last line is the most interesting line where the magic happens, but the start of this "magic" is in the line before already, not&amp;nbsp;the&amp;nbsp;method of reading the file but the&amp;nbsp;: &lt;strong&gt;[collections.arraylist]$a &lt;/strong&gt;that will cast the result into an arraylist,&amp;nbsp;In an arraylist&amp;nbsp;you can add and remove Items, we make use of that in the next line.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;$r&lt;/strong&gt; will take the results, as the &lt;strong&gt;$a&lt;/strong&gt; array will be empty at the&amp;nbsp;end of the command, next part is :&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;($a.count - 100)..1&lt;/strong&gt; this will make a range from 1900 to 1, as the first line created a file with 2000 lines, but we want 100 less, if you just want to randomize the list just remove the &lt;strong&gt;-100 &lt;/strong&gt;and all the numbers will stay and the list will only be randomized.&lt;/p&gt; &lt;p&gt;Next &lt;strong&gt;|%&lt;/strong&gt; The Foreach, then the&amp;nbsp;first scriptblock, &amp;nbsp;&lt;strong&gt;{$R = new-object random}&lt;/strong&gt; , this will generate a new random generator for more info see, &lt;a href="http://mow001.blogspot.com/2005/10/thow-dices-in-msh.html"&gt;Thow Dices in MSH&lt;/a&gt;&amp;nbsp;, and&amp;nbsp;2 GUI games I made before that use it : &amp;nbsp;&lt;a href="http://mow001.blogspot.com/2005/11/msh-minesweeper-gui-game.html"&gt;MSH Minesweeper GUI game&lt;/a&gt;&amp;nbsp;,&lt;a href="http://mow001.blogspot.com/2006/02/msh-concentration-scripting-games-part.html"&gt;MSH Concentration (scripting games part 4)&lt;/a&gt;&amp;nbsp;,&lt;/p&gt; &lt;p&gt;As this scriptblock is followed by another one the Foreach will treat this as&amp;nbsp;a Begin Block and only execute this once, then will execute the next&amp;nbsp;scriptblock as a process block, &lt;strong&gt;$R.next(0,$a.count) |%&lt;/strong&gt; &lt;/p&gt; &lt;p&gt;This will create a random number&amp;nbsp;from 0&amp;nbsp;to 1999 , and that is pipelined to the next scriptblock, note that the value on the pipeline is not used here, it just is used to determine the times to loop.&lt;/p&gt; &lt;p&gt;The random number is now passed on to the next scriptblock, &lt;strong&gt;$a[$_];$a.removeat($_) &lt;/strong&gt;it takes the random number from the pipeline (&lt;strong&gt;$_&lt;/strong&gt;), and outputs the item that is at that place in the Arraylist &lt;strong&gt;$a{$_}&lt;/strong&gt;, next it will remove the Item that it did output from the Arraylist &lt;strong&gt;$a.removeat($_)&lt;/strong&gt; that is where the base of the magic is hidden, &lt;/p&gt; &lt;p&gt;what, that's all remove an Item&amp;nbsp;?, Yep ;-), &lt;/p&gt; &lt;p&gt;As next, the loop will go on to the second pass, and will come here again &lt;strong&gt;$R.next(0,$a.count) &lt;/strong&gt;but as we did remove the item that we did output, this will be a number&amp;nbsp;from 0&amp;nbsp;to 1998, &lt;/p&gt; &lt;p&gt;So we will never output a double item, as we use the random number just as an Index, the trick with the 100 numbers to leave out is also based on that we just miss the last 100 numbers that remain AFTER we picked the numbers at random and that we did put in the &lt;strong&gt;$R&lt;/strong&gt; array already: &lt;/p&gt; &lt;p&gt;Lets&amp;nbsp;list the first 10 to show that this did work :&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$r[1..10]&lt;br&gt;61&lt;br&gt;1343&lt;br&gt;1108&lt;br&gt;1527&lt;br&gt;762&lt;br&gt;1039&lt;br&gt;277&lt;br&gt;295&lt;br&gt;475&lt;br&gt;1155 &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Now we can do out first test with the randomized list,&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;# Test the Times for sorting&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;(measure-command {$r | sort {[int]$_}}).TotalMilliseconds&lt;br&gt;1553.9698&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;(measure-command {[array]::sort($r)}).TotalMilliseconds&lt;br&gt;5.7518&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Hmm, we already see some difference, but for testing our solutions for the question,&amp;nbsp;we also want to test the reading of the file so we write the new list back to the file :&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;# Write the Randomized numbers back to the file&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$r | sc c:\powershell\test.txt&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Now that we are here, we have&amp;nbsp;created our testfile, and&amp;nbsp;&amp;nbsp;we can go on&amp;nbsp;test the complete solution against a 1900 records random file with 100 numbers missing (I removed&amp;nbsp;some of the output, but you can see the numbers are random missing&amp;nbsp;:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;[int[]]$a=[io.file]::ReadAllLines('c:\powershell\test.txt')&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;[array]::sort($a)&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$a |% {$i = 1}{while ($i -lt $_){$i;$i++};$i++}&lt;br&gt;6&lt;br&gt;23&lt;br&gt;29&lt;br&gt;61&lt;br&gt;73&lt;br&gt;129&lt;br&gt;207&lt;br&gt;234&lt;br&gt;241 &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;So Now we can go on and compare the speed of some different solutions for the question against a bigger file&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;# Test the complete Command&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;(Measure-Command {gc test.txt | sort {[int]$_} |% {$i = 1}{while ($i -lt $_){$i;$i++};$i++}}).TotalMilliseconds&lt;br&gt;1814.0741&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;(Measure-Command {&lt;br&gt;&amp;gt;&amp;gt; [int[]]$a=[io.file]::ReadAllLines('c:\powershell\test.txt')&lt;br&gt;&amp;gt;&amp;gt; [array]::sort($a)&lt;br&gt;&amp;gt;&amp;gt; $a |% {$i = 1}{while ($i -lt $_){$i;$i++};$i++}&lt;br&gt;&amp;gt;&amp;gt; }).TotalMilliseconds&lt;br&gt;&amp;gt;&amp;gt;&lt;br&gt;307.5865&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;As you can see there can be some differences here ;-)&lt;/p&gt; &lt;p&gt;If you like to do some more testing, also take a look in the &lt;a href="http://mow001.blogspot.com/2006/09/powershell-can-you-do-that-less.html"&gt;PowerShell : Can you do that less cryptic ? &lt;/a&gt;&amp;nbsp;post for some more different ways to solve the question &lt;/p&gt; &lt;p&gt;At the end of the post the 2 examples using &lt;strong&gt;Diff&lt;/strong&gt; (compare-Object), and 1 using&lt;strong&gt; for&lt;/strong&gt; to solve it, you can also compare them for speed&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Enjoy your testing and timing , &lt;/p&gt; &lt;p&gt;If you have other any interesting results (in speed or other&amp;nbsp;ways)&amp;nbsp;or&amp;nbsp;other methods&amp;nbsp;to handle the missing numbers problem, or randomize a list solution,&amp;nbsp; please leave them in the comments,&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Greetings, /\/\o\/\/&lt;br&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/msh"&gt;msh&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-115729246001728582?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/115729246001728582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=115729246001728582' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115729246001728582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115729246001728582'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/09/powershell-how-do-i-randomize-list-and.html' title='PowerShell : How Do I randomize a list, and remove some elements ?'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-115721643073038571</id><published>2006-09-02T19:00:00.000+02:00</published><updated>2006-09-02T20:12:48.153+02:00</updated><title type='text'>PowerShell : Can you do that less cryptic ?</title><content type='html'>&lt;p&gt;Ok,Oh, all right &lt;/p&gt; &lt;p&gt;the onliner from last post (" &lt;a href="http://mow001.blogspot.com/2006/09/powershell-how-can-i-tell-whitch.html"&gt;PowerShell : How can I tell witch numbers are missing from a sequence of numbers found in a text file ? &lt;/a&gt;&amp;nbsp;, &lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;gc test.txt | sort {[int]$_} |% {$i = 1}{while ($i -lt $_){$i;$i++};$i++}&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;was maybe a bit to tiny to post without any explanation.&lt;/p&gt; &lt;p&gt;you can do very powerfull things on the commandline like this, but for in a script or&amp;nbsp;example&amp;nbsp;this&amp;nbsp;might not very handy.&lt;/p&gt; &lt;p&gt;&amp;nbsp;I still not going to explain it, &lt;/p&gt; &lt;p&gt;but I will make it a lot more Clear what Happens, by showing&amp;nbsp;that&amp;nbsp;you do not &lt;strong&gt;have&lt;/strong&gt; too be&amp;nbsp;so tiny in PowerShell , you can write this in a more verbose and readable way , as the former one-liner Can also be written as Follows :&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div style="font-family: courier new"&gt;&lt;span style="color: green"&gt;#&amp;nbsp;Read&amp;nbsp;numbers&amp;nbsp;from&amp;nbsp;file&amp;nbsp;&lt;/span&gt; &lt;br&gt;&lt;br&gt;$numbers&amp;nbsp;=&amp;nbsp;get-content&amp;nbsp;test.txt &lt;br&gt;&lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;Sort&amp;nbsp;the&amp;nbsp;Numbers&lt;/span&gt; &lt;br&gt;&lt;br&gt;$Sortednumbers&amp;nbsp;=&amp;nbsp;$Numbers&amp;nbsp;|&amp;nbsp;Sort&amp;nbsp;{[&lt;span style="color: blue"&gt;int&lt;/span&gt;]$_} &lt;br&gt;&lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;start&amp;nbsp;comparing&amp;nbsp;numbers&amp;nbsp;in&amp;nbsp;file&amp;nbsp;to&amp;nbsp;counter&lt;/span&gt; &lt;br&gt;&lt;br&gt;$counter&amp;nbsp;=&amp;nbsp;&lt;span style="color: maroon"&gt;1&lt;/span&gt; &lt;br&gt;&lt;br&gt;&lt;span style="color: blue"&gt;foreach&lt;/span&gt;&amp;nbsp;($number&amp;nbsp;&lt;span style="color: blue"&gt;in&lt;/span&gt;&amp;nbsp;$Sortednumbers&amp;nbsp;)&amp;nbsp;{ &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: green"&gt;#&amp;nbsp;as&amp;nbsp;long&amp;nbsp;as&amp;nbsp;Number&amp;nbsp;in&amp;nbsp;file&amp;nbsp;is&amp;nbsp;higher&amp;nbsp;than&amp;nbsp;counter,&amp;nbsp;output&amp;nbsp;as&amp;nbsp;missing&amp;nbsp;and&amp;nbsp;raise&amp;nbsp;counter&amp;nbsp;&amp;nbsp;&lt;/span&gt; &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue"&gt;while&lt;/span&gt;&amp;nbsp;($counter&amp;nbsp;-lt&amp;nbsp;$Number){ &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;"$Counter&amp;nbsp;is&amp;nbsp;missing"&lt;/span&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$Counter++ &lt;br&gt;&amp;nbsp;&amp;nbsp;} &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: green"&gt;#&amp;nbsp;counter&amp;nbsp;is&amp;nbsp;the&amp;nbsp;same&amp;nbsp;as&amp;nbsp;Number,&amp;nbsp;hence&amp;nbsp;is&amp;nbsp;in&amp;nbsp;file&amp;nbsp;output&amp;nbsp;and&amp;nbsp;raise&amp;nbsp;counter&lt;/span&gt; &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;"$Counter&amp;nbsp;is&amp;nbsp;In&amp;nbsp;file"&lt;/span&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;$Counter++ &lt;br&gt;&lt;br&gt;}&lt;/div&gt; &lt;p&gt;&amp;nbsp;This code does exactly the same as the on-liner, is a bit more work, but much&amp;nbsp;more clear for code you or somebody else might have to read or change.&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;*Edit*&lt;/strong&gt; some other suggestions given on IRC for handling this&amp;nbsp;question&amp;nbsp;are :&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div style="font-family: courier new"&gt;&lt;span style="color: green"&gt;#&amp;nbsp;Other&amp;nbsp;suggestions&amp;nbsp;on&amp;nbsp;IRC&lt;/span&gt; &lt;br&gt;&amp;nbsp; &lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;&amp;lt;dreeschkind&amp;gt;&amp;nbsp;&lt;/span&gt; &lt;br&gt;&lt;br&gt;$n&amp;nbsp;=&amp;nbsp;gc&amp;nbsp;test.txt &lt;br&gt;$n|%{[&lt;span style="color: blue"&gt;int&lt;/span&gt;]$max&amp;nbsp;=&amp;nbsp;&lt;span style="color: maroon"&gt;1&lt;/span&gt;}{&lt;span style="color: blue"&gt;if&lt;/span&gt;&amp;nbsp;($max&amp;nbsp;-lt&amp;nbsp;$_){$max=$_}} &lt;br&gt;diff&amp;nbsp;-r&amp;nbsp;$(&lt;span style="color: maroon"&gt;1&lt;/span&gt;..$max)&amp;nbsp;$n &lt;br&gt;&lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;&amp;lt;mow001&amp;gt;&amp;nbsp;slower&lt;/span&gt; &lt;br&gt;&lt;br&gt;$n&amp;nbsp;=&amp;nbsp;gc&amp;nbsp;test.txt &lt;br&gt;$max&amp;nbsp;=&amp;nbsp;($n&amp;nbsp;|&amp;nbsp;Measure-&lt;span style="color: blue"&gt;Object&lt;/span&gt;&amp;nbsp;-max).maximum &lt;br&gt;diff&amp;nbsp;-r&amp;nbsp;$(&lt;span style="color: maroon"&gt;1&lt;/span&gt;..$max)&amp;nbsp;$n &lt;br&gt;&lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;&amp;lt;d2d&amp;gt;&amp;nbsp;faster&lt;/span&gt; ?&lt;br&gt;&amp;nbsp; &lt;br&gt;$result&amp;nbsp;=&amp;nbsp;@();&amp;nbsp;$arr&amp;nbsp;=&amp;nbsp;Get-Content&amp;nbsp;test.txt;&amp;nbsp;&lt;span style="color: blue"&gt;for&lt;/span&gt;&amp;nbsp;($i&amp;nbsp;=&amp;nbsp;&lt;span style="color: maroon"&gt;1&lt;/span&gt;;&amp;nbsp;$i&amp;nbsp;-lt&amp;nbsp;$arr[-&lt;span style="color: maroon"&gt;1&lt;/span&gt;];&amp;nbsp;$i++)&amp;nbsp;{&amp;nbsp;&lt;span style="color: blue"&gt;if&lt;/span&gt;&amp;nbsp;($arr&amp;nbsp;-notcontains&amp;nbsp;$i)&amp;nbsp;{&amp;nbsp;$result&amp;nbsp;+=&amp;nbsp;$i&amp;nbsp;}&amp;nbsp;};&amp;nbsp;$result&lt;/div&gt; &lt;p&gt;&lt;strong&gt;*Edit 2*&lt;/strong&gt;&amp;nbsp; Another tip : &lt;em&gt;Need for speed, use another cool feature from Powershell go&amp;nbsp;.NET directly :&amp;nbsp;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;[int[]]$a=[io.file]::ReadAllLines('c:\powershell\test.txt')&lt;br&gt;[array]::sort($a)&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Enjoy, &lt;/p&gt; &lt;p&gt;Greetings, /\/\o\/\/&lt;br&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/msh"&gt;msh&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-115721643073038571?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/115721643073038571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=115721643073038571' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115721643073038571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115721643073038571'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/09/powershell-can-you-do-that-less.html' title='PowerShell : Can you do that less cryptic ?'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-115720884264738099</id><published>2006-09-02T16:54:00.000+02:00</published><updated>2006-09-02T19:04:15.280+02:00</updated><title type='text'>PowerShell : How can I tell whitch numbers are missing from a sequence of numbers found in a text file ?</title><content type='html'>&lt;p&gt;&amp;nbsp;Another Hey Scripting Guy ! Question I could not refuse ;-)&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept06/hey0901.mspx"&gt;How Can I Tell Which Numbers Are Missing From a Sequence of Numbers Found in a Text File?&lt;/a&gt;&amp;nbsp;In Powershell ?&lt;/p&gt; &lt;p&gt;let’s&amp;nbsp;make a text file containing the following sequence of numbers:&lt;/p&gt; &lt;p&gt;&lt;span style="color: green"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;span style="color: green"&gt;#&amp;nbsp;Make&amp;nbsp;a&amp;nbsp;TextFile&amp;nbsp;with&amp;nbsp;the&amp;nbsp;Numbers&lt;/span&gt; &lt;br&gt;&lt;br&gt;@' &lt;br&gt;&lt;span style="color: maroon"&gt;2&lt;/span&gt; &lt;br&gt;&lt;span style="color: maroon"&gt;4&lt;/span&gt; &lt;br&gt;&lt;span style="color: maroon"&gt;8&lt;/span&gt; &lt;br&gt;&lt;span style="color: maroon"&gt;9&lt;/span&gt; &lt;br&gt;&lt;span style="color: maroon"&gt;10&lt;/span&gt; &lt;br&gt;'@&amp;nbsp;|&amp;nbsp;sc&amp;nbsp;test.txt&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;How are we going to determine which numbers (1, 3, 5, 6, and 7) are missing from the sequence? Like this:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;gc test.txt |% {$i = 1}{while ($i -lt $_){$i;$i++};$i++}&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;gc test.txt |% {$i = 1}{while ($i -lt $_){$i;$i++};$i++}&lt;br&gt;1&lt;br&gt;3&lt;br&gt;5&lt;br&gt;6&lt;br&gt;7&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;What’s that? Explain how this script works? Come on, SG; didn’t we mention that it was &lt;em&gt;Saturday&lt;/em&gt;? &lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;*Edit*&lt;/strong&gt; did I hear someone&amp;nbsp;say &lt;a href="http://www.microsoft.com/technet/scriptcenter/resources/qanda/feb05/hey0225.mspx"&gt;&lt;b&gt;Sort&lt;/b&gt;&lt;/a&gt; ? (thx Karl)&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;*Edit2* &lt;/strong&gt;Added from file with cast to INTEGER&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;gc test.txt | sort {[int]$_} |% {$i = 1}{while ($i -lt $_){$i;$i++};$i++}&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;2,9,4,8,10 | sort |% {$i = 1}{while ($i -lt $_){$i;$i++};$i++}&lt;br&gt;1&lt;br&gt;3&lt;br&gt;5&lt;br&gt;6&lt;br&gt;7&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;*Edit3*,&lt;/strong&gt; Ok, still no explanation but this might help understanding how this script works&amp;nbsp;: &amp;nbsp;&lt;/em&gt;&lt;a href="http://mow001.blogspot.com/2006/09/powershell-can-you-do-that-less.html"&gt;&lt;em&gt;PowerShell : Can you do that less cryptic ?&lt;/em&gt; &lt;/a&gt;&lt;/p&gt; &lt;p&gt;Enjoy, &lt;/p&gt; &lt;p&gt;Greetings, /\/\o\/\/&lt;br&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/msh"&gt;msh&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-115720884264738099?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/115720884264738099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=115720884264738099' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115720884264738099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115720884264738099'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/09/powershell-how-can-i-tell-whitch.html' title='PowerShell : How can I tell whitch numbers are missing from a sequence of numbers found in a text file ?'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-115715832207022617</id><published>2006-09-02T02:49:00.000+02:00</published><updated>2006-09-02T03:06:28.993+02:00</updated><title type='text'>PowerShell Active Directory Browser teaser</title><content type='html'>PowerShell Active Directory Browser teaser To test the upload of pictures in Live Writer Beta, a teaser for my next post in the AD series, &lt;a href="http://photos1.blogger.com/blogger/8006/1759/1600/badStart.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/8006/1759/400/badStart.jpg" border="0" /&gt;&lt;/a&gt; &lt;a href="http://photos1.blogger.com/blogger/8006/1759/1600/bad.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/8006/1759/400/bad.jpg" border="0" /&gt;&lt;/a&gt; &lt;p&gt; &lt;/p&gt;&lt;p&gt;Enjoy, &lt;p&gt;Greetings, /\/\o\/\/&lt;br /&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/msh"&gt;msh&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-115715832207022617?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/115715832207022617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=115715832207022617' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115715832207022617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115715832207022617'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/09/powershell-active-directory-browser.html' title='PowerShell Active Directory Browser teaser'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-115705284548014997</id><published>2006-08-31T21:34:00.000+02:00</published><updated>2006-09-06T22:10:24.913+02:00</updated><title type='text'>Powershell, Has my Dell a dangerous battery Part 2 ?</title><content type='html'>&lt;p&gt;Yesterday after I posted &amp;nbsp;&lt;a href="http://mow001.blogspot.com/2006/08/powershell-has-my-dell-dangerous.html"&gt;PowerShell, Has my Dell a dangerous battery ? &lt;/a&gt;, I did meet James Thruher&lt;/p&gt; &lt;p&gt;on IRC (&lt;b&gt;irc&lt;/b&gt;.freenode.net channel&amp;nbsp; #Powershell ), and while discussing the script he came to the idea to &amp;nbsp;get the serials direct from the Dell site.&lt;/p&gt; &lt;p&gt;&lt;em&gt;b.t.w. if you want to join us on IRC pleasy check it out, on that IRC channel you can also meet amongs others :&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Some other regulars on :&amp;nbsp;&lt;strong&gt;irc.freenode.net channel&amp;nbsp; #Powershell&lt;/strong&gt; are :&lt;/p&gt; &lt;p&gt;&lt;strong&gt;DbmwS&lt;/strong&gt; Don't Bother me with Spam (aka D2D, Dance to die ) from &amp;nbsp;&lt;a href="http://monadblog.blogspot.com/"&gt;monadblog&lt;/a&gt;&amp;nbsp; and &lt;a href="http://del.icio.us/powershell"&gt;http://del.icio.us/powershell&lt;/a&gt;&amp;nbsp;and very active on the PowerShell Newsgroup :&amp;nbsp;&lt;a href="http://www.microsoft.com/communities/newsgroups/en-us/default.aspx?dg=microsoft.public.windows.powershell&amp;amp;cat=en_US_3750E87B-4971-4A5C-A537-45F5D7ABBECC&amp;amp;lang=en&amp;amp;cr=US"&gt;Windows Powershell&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Karl Prosser&lt;/strong&gt;,&amp;nbsp;the guy behind PowerShell&amp;nbsp;Analyzer :&amp;nbsp;&lt;a href="http://www.karlprosser.com/coder/"&gt;Karl Prosser - Klumsy Geek&lt;/a&gt;&amp;nbsp;(note that he has a public Alpha release of PowerShell Analyzer (a great PowerShell editor) out now that you can download from his blog)&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Arild&lt;/strong&gt;&amp;nbsp;: from AnkhSVN and&amp;nbsp;also PowerShell fan see his&amp;nbsp;&lt;a href="http://arildf.spaces.live.com/blog/"&gt;Blog&lt;/a&gt;&amp;nbsp; &lt;em&gt;(see also (&lt;/em&gt;&lt;a href="http://www.hanselman.com/blog/PowerShellAnkhSVNAndSubversion.aspx"&gt;&lt;em&gt;PowerShell, AnkhSVN and Subversion&lt;/em&gt;&lt;/a&gt;&lt;em&gt;) on Scott Hanselman's blog)&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;So, as I did see the new Item on Jim's blog this morning I did think he posted it&amp;nbsp; as my last remark was :  &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;&amp;lt;jtruher&amp;gt; it's still doesn't seem to be quite right - it seems to miss a couple of numbers&lt;br&gt;* mow001 needs some sleep, see it on your blog ;-)&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;, but better yet, he posted an other&amp;nbsp;real cool script &lt;a href="http://jtruher.spaces.live.com/Blog/cns!7143DA6E51A2628D!130.entry"&gt;Background "jobs" and PowerShell&lt;/a&gt;.  &lt;p&gt;but as I did see also some differences between his (scraped from the Dell site) and my list, see the compare below,&amp;nbsp; and I think it is a very cool addition I will post it here also. &lt;p&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;MSH&amp;gt;&lt;/font&gt;compare-object ($AffectedSerials | sort) ($dell | sort)  &lt;p&gt;InputObject SideIndicator&lt;br&gt;----------- -------------&lt;br&gt;1K055 =&amp;gt;&lt;br&gt;5P474 =&amp;gt;&lt;br&gt;J1524 =&amp;gt;&lt;br&gt;OR331 =&amp;gt;&lt;br&gt;59474 &amp;lt;= &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Jim did post the solution as a comment &lt;a href="http://www.blogger.com/comment.g?blogID=18074818&amp;amp;postID=115697276141591933"&gt;2 comments&lt;/a&gt;&amp;nbsp;on last post, but I will post that example here also . and try to keep the &amp;amp;amp;nbsp  &lt;p&gt;&amp;nbsp; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;&amp;lt;jtruher&amp;gt; blast - the HTML renderer changed my &amp;amp;amp;nbsp; to a real space&lt;br&gt;&amp;lt;mow001&amp;gt; I will add it to my new post thanks&lt;/em&gt; &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;I will post a complete script again to check this I made 2 options, use the current list ( I made a fresh one with the latest list with the trick below for if yyou have no internet), or it can download it from the Dell site.  &lt;p&gt;&amp;nbsp;  &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;MSH&amp;gt;[&lt;/font&gt;string]::join("','",$AffectedSerials)&lt;br&gt;3K590','59474','6P922','C2603','C5339','C5340','C5446','C6269','C6270','D2961','D5555','D6024','D6025&lt;br&gt;','F2100','F5132','GD785','H3191','JD616','JD617','KD494','M3006','RD857','TD349','U5867','U5882','W5&lt;br&gt;915','X5308','X5329','X5332','X5333','X5875','X5877','Y1333','Y4500','Y5466  &lt;p&gt;# changed in notepad to :  &lt;p&gt;&amp;nbsp;  &lt;p&gt;$affectedSerials = '3K590','59474','6P922','C2603',&lt;br&gt;'C5339','C5340','C5446','C6269','C6270','D2961','D5555',&lt;br&gt;'D6024','D6025','F2100','F5132','GD785','H3191','JD616',&lt;br&gt;'JD617','KD494','M3006','RD857','TD349','U5867','U5882',&lt;br&gt;'W5915','X5308','X5329','X5332','X5333','X5875','X5877',&lt;br&gt;'Y1333','Y4500','Y5466' &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;  &lt;p&gt;So now it works like this :&amp;nbsp;  &lt;p&gt;&amp;nbsp;  &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;MSH&amp;gt;&lt;/font&gt;.\CheckBattery.msh&lt;br&gt;retrieved affected serials 1K055 C5446 F2100 KD494 W5915 Y1333 3K590 C6269 F5132 OR331 X5308 Y4500 5&lt;br&gt;P474 C6270 GD785 M3006 X5329 Y5466 6P922 D2961 H3191 RD857 X5332 C2603 D5555 J1524 TD349 X5333 C5339&lt;br&gt;D6024 JD616 U5867 X5875 C5340 D6025 JD617 U5882 X5877&lt;br&gt;Battery Model : DELL 4M0105&lt;br&gt;&lt;font color="#ff0000"&gt;MSH&amp;gt;&lt;/font&gt;.\CheckBattery.msh -internal&lt;br&gt;Battery Model : DELL 4M0105 &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;  &lt;p&gt;and the script looks like this :  &lt;p&gt;&amp;nbsp; &lt;div style="font-family: courier new"&gt;&lt;span style="color: green"&gt;#&amp;nbsp;CheckBattery.ps1&lt;/span&gt; &lt;br&gt;&lt;span style="color: green"&gt;#&lt;/span&gt; &lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;Check&amp;nbsp;Dell&amp;nbsp;Battery&amp;nbsp;for&amp;nbsp;Fire&amp;nbsp;Hazard&lt;/span&gt; &lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;Thanks&amp;nbsp;to&amp;nbsp;James&amp;nbsp;Thruher&amp;nbsp;for&amp;nbsp;the&amp;nbsp;Web&amp;nbsp;Part&lt;/span&gt; &lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;&lt;/span&gt; &lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;/\/\o\/\/&amp;nbsp;2006&lt;/span&gt; &lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;http://mow001.blogspot.com&lt;/span&gt; &lt;br&gt;&lt;br&gt;Param&amp;nbsp;($computer&amp;nbsp;=&amp;nbsp;&lt;span style="color: maroon"&gt;"."&lt;/span&gt;, &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span style="color: blue"&gt;switch&lt;/span&gt;]$internalList) &lt;br&gt;&lt;br&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&amp;nbsp;($internalList.IsPresent)&amp;nbsp;{&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;$script:affectedSerials&amp;nbsp;=&amp;nbsp;&lt;span style="color: maroon"&gt;'3K590'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'59474'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'6P922'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'C2603'&lt;/span&gt;, &lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;'C5339'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'C5340'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'C5446'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'C6269'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'C6270'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'D2961'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'D5555'&lt;/span&gt;, &lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;'D6024'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'D6025'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'F2100'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'F5132'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'GD785'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'H3191'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'JD616'&lt;/span&gt;, &lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;'JD617'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'KD494'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'M3006'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'RD857'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'TD349'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'U5867'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'U5882'&lt;/span&gt;, &lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;'W5915'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'X5308'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'X5329'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'X5332'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'X5333'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'X5875'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'X5877'&lt;/span&gt;, &lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;'Y1333'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'Y4500'&lt;/span&gt;,&lt;span style="color: maroon"&gt;'Y5466'&lt;/span&gt; &lt;br&gt;}&amp;nbsp; &lt;br&gt;&lt;span style="color: blue"&gt;Else&lt;/span&gt;&amp;nbsp;{&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;$wc&amp;nbsp;=&amp;nbsp;new&amp;nbsp;net.webclient &lt;br&gt;&amp;nbsp;&amp;nbsp;$bat&amp;nbsp;=&amp;nbsp;$wc.downloadstring(&lt;span style="color: maroon"&gt;"https://www.dellbatteryprogram.com/"&lt;/span&gt;) &lt;br&gt;&amp;nbsp;&amp;nbsp;$r&amp;nbsp;=&amp;nbsp;[regex]&lt;span style="color: maroon"&gt;"&amp;amp;nbsp;([A-Z0-9][A-Z0-9][0-9][0-9][0-9])"&lt;/span&gt; &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;$matches&amp;nbsp;=&amp;nbsp;$r.matches($bat) &lt;br&gt;&amp;nbsp;&amp;nbsp;$script:AffectedSerials&amp;nbsp;=&amp;nbsp;$matches&amp;nbsp;|&amp;nbsp;&lt;span style="color: blue"&gt;foreach&lt;/span&gt;&amp;nbsp;{&amp;nbsp;$_.groups[&lt;span style="color: maroon"&gt;1&lt;/span&gt;].captures[&lt;span style="color: maroon"&gt;0&lt;/span&gt;].value&amp;nbsp;} &lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;"retrieved&amp;nbsp;&amp;nbsp;affected&amp;nbsp;serials&amp;nbsp;$($script:AffectedSerials)"&lt;/span&gt; &lt;br&gt;}&amp;nbsp; &lt;br&gt;&lt;br&gt;get-WmiObject&amp;nbsp;win32_battery&amp;nbsp;|&amp;nbsp;&lt;span style="color: blue"&gt;Foreach&lt;/span&gt;&amp;nbsp;{&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;$Name&amp;nbsp;=&amp;nbsp;$_.name&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;write-host&amp;nbsp;&lt;span style="color: maroon"&gt;"Battery&amp;nbsp;Model&amp;nbsp;:&amp;nbsp;$name"&lt;/span&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;$script:AffectedSerials&amp;nbsp;|&amp;nbsp;&lt;span style="color: blue"&gt;Where&lt;/span&gt;&amp;nbsp;{$name&amp;nbsp;-match&amp;nbsp;$_}&amp;nbsp;|&amp;nbsp;&lt;span style="color: blue"&gt;Foreach&lt;/span&gt;&amp;nbsp;{&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Write-Warning&amp;nbsp;&lt;span style="color: maroon"&gt;"Affected&amp;nbsp;:&amp;nbsp;Battery&amp;nbsp;$Name&amp;nbsp;matches&amp;nbsp;:&amp;nbsp;*$_*"&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp; &lt;br&gt;} &lt;br&gt;&lt;/div&gt; &lt;p&gt;Note as in the other post (I forgot to mention it but )you can give also a computername to connect to a remote system. &lt;/p&gt; &lt;p&gt;And this time I made it as a script that you can run .&lt;/p&gt; &lt;p&gt;Enjoy,&lt;/p&gt; &lt;p&gt;Greetings, /\/\o\/\/&lt;br&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/msh"&gt;msh&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-115705284548014997?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/115705284548014997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=115705284548014997' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115705284548014997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115705284548014997'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/08/powershell-has-my-dell-dan_115705284548014997.html' title='Powershell, Has my Dell a dangerous battery Part 2 ?'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-115697276141591933</id><published>2006-08-30T23:19:00.000+02:00</published><updated>2006-08-31T21:40:46.260+02:00</updated><title type='text'>PowerShell, Has my Dell a dangerous battery ?</title><content type='html'>&lt;p&gt;Some Dell Batteries can become to hot&amp;nbsp; see : &lt;a href="http://www.gizmodo.com/gadgets/laptops/dell-laptop-explodes-in-flames-182257.php"&gt;&lt;b&gt;Dell&lt;/b&gt; Laptop Explodes in Flames - Gizmodo&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Dell has started a Recall of Notebook Computer Batteries,&lt;a href="http://www.dell.com/content/topics/global.aspx/corp/pressoffice/en/2005/2005_12_16_dc_000?c=us&amp;amp;l=en&amp;amp;s=corp"&gt;CPSC, &lt;b&gt;Dell&lt;/b&gt; Announce Recall of Notebook Computer Batteries&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Not all Dell Batteries are Affected,&amp;nbsp;so &amp;nbsp;I made&amp;nbsp;a PowerShell script to&amp;nbsp;get the Battery Model and check it against the list of batteries so that you can check your battery easy.&amp;nbsp;&lt;em&gt;For more information and pointers to instructions on how to inspect your battery, and how to begin the battery exchange process, see Dell's &lt;/em&gt;&lt;a href="https://www.dellbatteryprogram.com/"&gt;&lt;em&gt;Battery Return Program&lt;/em&gt;&lt;/a&gt;&lt;em&gt; page.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;I also will use this example, to show again how to start different kinds of examples in PowerShell as there are a couple of different ways to make and start the examples, making it very flexible, but for beginning users in PowerShell&amp;nbsp;it is not always that clear how to start the examples on my blog, I noticed from some comments and questions, I mentioned this before a couple of times before on my blog e.g. in &lt;a href="http://mow001.blogspot.com/2006/08/powershell-and-active-directory-part-8.html"&gt;PowerShell and Active Directory Part 8 (ACL's)&lt;/a&gt;, but I will use this example to show some of the different forms again and how to use them as I think it is an important issue and&amp;nbsp;of course want everyone to be able to start and use the examples I provide on my blog ;-)&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;*Edit*&lt;/strong&gt; in the next post &lt;/em&gt;&lt;a href="http://mow001.blogspot.com/2006/08/powershell-has-my-dell-dan_115705284548014997.html"&gt;&lt;em&gt;Powershell, Has my Dell a dangerous battery Part 2 ? &lt;/em&gt;&lt;/a&gt;&lt;em&gt;&amp;nbsp;you find an example that gets te serials from the Dell site directly, also I have a new list of serials &lt;strong&gt;with some changes !&lt;/strong&gt;&amp;nbsp;so check out the next post also !&lt;/em&gt;&lt;/p&gt; &lt;p&gt;The first Example you can just paste onto your Console&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div style="font-family: courier new"&gt;&lt;span style="color: green"&gt;#&amp;nbsp;Lines&amp;nbsp;of&amp;nbsp;code&amp;nbsp;that&amp;nbsp;can&amp;nbsp;just&amp;nbsp;be&amp;nbsp;pasted&amp;nbsp;onto&amp;nbsp;the&amp;nbsp;PowerShell&amp;nbsp;Console&lt;/span&gt; &lt;br&gt;&lt;br&gt;$AffectedSerials&amp;nbsp;=&amp;nbsp;&lt;span style="color: maroon"&gt;"3K590"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"59474"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"6P922"&lt;/span&gt;,&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;"C2603"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"C5339"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"C5340"&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;"C5446"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"C6269"&lt;/span&gt;,&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;"C6270"&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;"D2961"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"D5555"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"D6024"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"D6025"&lt;/span&gt;,&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;"F2100"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"F5132"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"GD785"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"H3191"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"JD616"&lt;/span&gt;,&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;"JD617"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"KD494"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"M3006"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"RD857"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"TD349"&lt;/span&gt;,&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;"U5867"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"U5882"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"W5915"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"X5308"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"X5329"&lt;/span&gt;,&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;"X5332"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"X5333"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"X5875"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"X5877"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"Y1333"&lt;/span&gt;,&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;"Y4500"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"Y5466"&lt;/span&gt;&amp;nbsp; &lt;br&gt;&lt;br&gt;&lt;font color="#0080c0"&gt;get-WmiObject&lt;/font&gt;&amp;nbsp;win32_battery&amp;nbsp;|&amp;nbsp;&lt;span style="color: blue"&gt;Foreach&lt;/span&gt;&amp;nbsp;{&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;$Name&amp;nbsp;=&amp;nbsp;$_.name&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#0080c0"&gt;write-host&lt;/font&gt;&amp;nbsp;&lt;span style="color: maroon"&gt;"Battery&amp;nbsp;Model&amp;nbsp;:&amp;nbsp;$name"&lt;/span&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;$AffectedSerials&amp;nbsp;|&amp;nbsp;&lt;span style="color: blue"&gt;Where&lt;/span&gt;&amp;nbsp;{$name&amp;nbsp;-match&amp;nbsp;$_}&amp;nbsp;|&amp;nbsp;&lt;span style="color: blue"&gt;Foreach&lt;/span&gt;&amp;nbsp;{&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0080c0"&gt;Write-Warning&lt;/font&gt;&amp;nbsp;&lt;span style="color: maroon"&gt;"Affected&amp;nbsp;:&amp;nbsp;Battery&amp;nbsp;$Name&amp;nbsp;matches&amp;nbsp;:&amp;nbsp;*$_*"&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp; &lt;br&gt;} &lt;br&gt;&lt;/div&gt; &lt;div style="font-family: courier new"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="font-family: courier new"&gt;&amp;nbsp;&lt;/div&gt; &lt;div style="font-family: courier new"&gt;Ok&amp;nbsp; Lets see how that does look,Let's past in the first line &lt;/div&gt; &lt;div style="font-family: courier new"&gt;&amp;nbsp;&lt;/div&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$AffectedSerials = "3K590","59474","6P922",&lt;br&gt;&amp;gt;&amp;gt; "C2603","C5339","C5340", "C5446","C6269",&lt;br&gt;&amp;gt;&amp;gt; "C6270", "D2961","D5555","D6024","D6025",&lt;br&gt;&amp;gt;&amp;gt; "F2100","F5132","GD785","H3191","JD616",&lt;br&gt;&amp;gt;&amp;gt; "JD617","KD494","M3006","RD857","TD349",&lt;br&gt;&amp;gt;&amp;gt; "U5867","U5882","W5915","X5308","X5329",&lt;br&gt;&amp;gt;&amp;gt; "X5332","X5333","X5875","X5877","Y1333",&lt;br&gt;&amp;gt;&amp;gt; "Y4500","Y5466"&lt;br&gt;&amp;gt;&amp;gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;this is also the way I created the list from the Dell website and pasted it in from notepad , next to that it started with this oneliner I created interactively&amp;nbsp;:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;Posh&amp;gt;&lt;/font&gt;gwmi win32_battery |% {$AffectedSerials |% {$name -match $_}}&lt;br&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;As you could see from the first line, filling the Affected serials variable, PowerShell detects that a line is not ready when you past it in and will continue the&amp;nbsp;&amp;nbsp;line &lt;em&gt;(showing &lt;strong&gt;&amp;gt;&amp;gt;&lt;/strong&gt;)&lt;/em&gt;&lt;/p&gt; &lt;p&gt;So I copied that line into notepad did format it more lines, after that I cleaned out the code a bit, while pasting to code back into the console to check&amp;nbsp;until I liked the result&lt;/p&gt; &lt;p&gt;I really love to work on the console by pasting in and out of the console like this while testing as its really quick as you &lt;strong&gt;&lt;font size="6"&gt;use quickedit !!&lt;/font&gt;&lt;/strong&gt;&amp;nbsp;the console works great&amp;nbsp;see also :&amp;nbsp;&lt;a href="http://mow001.blogspot.com/2006/01/commandline-editing-with-msh.html"&gt;Commandline editing with MSH.&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;em&gt;(as my VM has not battery and my base OS on my laptop runs still MSH you see the prompt change ;-))&lt;/em&gt;,&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;Posh&amp;gt;&lt;/font&gt;gwmi win32_battery |% {$AffectedSerials |% {$name -match $_}}  &lt;p&gt;&lt;font color="#ff0000"&gt;MSH&amp;gt;&lt;/font&gt;$AffectedSerials = "3K590","59474","6P922",&lt;br&gt;&amp;gt;&amp;gt; "C2603","C5339","C5340", "C5446","C6269",&lt;br&gt;&amp;gt;&amp;gt; "C6270", "D2961","D5555","D6024","D6025",&lt;br&gt;&amp;gt;&amp;gt; "F2100","F5132","GD785","H3191","JD616",&lt;br&gt;&amp;gt;&amp;gt; "JD617","KD494","M3006","RD857","TD349",&lt;br&gt;&amp;gt;&amp;gt; "U5867","U5882","W5915","X5308","X5329",&lt;br&gt;&amp;gt;&amp;gt; "X5332","X5333","X5875","X5877","Y1333",&lt;br&gt;&amp;gt;&amp;gt; "Y4500","Y5466"&lt;br&gt;&amp;gt;&amp;gt;&lt;br&gt;&lt;font color="#ff0000"&gt;MSH&amp;gt;&lt;/font&gt;get-WmiObject win32_battery | Foreach {&lt;br&gt;&amp;gt;&amp;gt; $Name = $_.name&lt;br&gt;&amp;gt;&amp;gt; write-host "Battery Model : $name"&lt;br&gt;&amp;gt;&amp;gt; $AffectedSerials | Where {$name -match $_} | Foreach {&lt;br&gt;&amp;gt;&amp;gt; Write-Warning "Affected : Battery $Name matches : *$_*"&lt;br&gt;&amp;gt;&amp;gt; }&lt;br&gt;&amp;gt;&amp;gt;&lt;br&gt;&amp;gt;&amp;gt; }&lt;br&gt;&amp;gt;&amp;gt;&lt;br&gt;Battery Model : DELL 4M0105&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Note that with this method all is loaded in the $global (interactive) scope, so that I can also interact with the variables in between, in this case I use this to add part of my found serial to the $Affected serials HashTable&amp;nbsp;to test the Warning &amp;nbsp;:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font color="#00ff40"&gt;# I add part of my model to the array with serials to check, to show the output with a affected battery&lt;/font&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;MSH&amp;gt;&lt;/font&gt;$affectedSerials += "4M010"&lt;br&gt;&lt;font color="#ff0000"&gt;MSH&amp;gt;&lt;/font&gt;get-WmiObject win32_battery | Foreach {&lt;br&gt;&amp;gt;&amp;gt; $Name = $_.name&lt;br&gt;&amp;gt;&amp;gt; write-host "Battery Model : $name"&lt;br&gt;&amp;gt;&amp;gt; $AffectedSerials | Where {$name -match $_} | Foreach {&lt;br&gt;&amp;gt;&amp;gt; Write-Warning "Affected : Battery $Name matches : *$_*"&lt;br&gt;&amp;gt;&amp;gt; }&lt;br&gt;&amp;gt;&amp;gt; }&lt;br&gt;&amp;gt;&amp;gt;&lt;br&gt;Battery Model : DELL 4M0105&lt;br&gt;&lt;font color="#ff8040"&gt;WARNING: Affected : Battery DELL 4M0105 matches : *4M010*&lt;/font&gt; &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;You can see that I do not have to paste the HashTable back in as I have it still loaded in my $global Scope, and I can just change it and past in the second line again, and now it will show the error as it will match against my battery.  &lt;p&gt;This method is very handy while working interactively developing or testing as you can test parts of the script just by pasting them in, as I work like this almost always you can do this with almost every example on my blog.  &lt;p&gt;Another version you will find often on my blog is a function,  &lt;p&gt; &lt;div style="font-family: courier new"&gt;&lt;span style="color: green"&gt;#&amp;nbsp;check-Battery&amp;nbsp;function&lt;/span&gt; &lt;br&gt;&lt;br&gt;&lt;span style="color: blue"&gt;function&lt;/span&gt;&amp;nbsp;Check-Battery&amp;nbsp;($computer&amp;nbsp;=&amp;nbsp;&lt;span style="color: maroon"&gt;'.'&lt;/span&gt;)&amp;nbsp;{ &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;$AffectedSerials&amp;nbsp;=&amp;nbsp;&lt;span style="color: maroon"&gt;"3K590"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"59474"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"6P922"&lt;/span&gt;,&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;"C2603"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"C5339"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"C5340"&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;"C5446"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"C6269"&lt;/span&gt;,&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;"C6270"&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;"D2961"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"D5555"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"D6024"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"D6025"&lt;/span&gt;,&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;"F2100"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"F5132"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"GD785"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"H3191"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"JD616"&lt;/span&gt;,&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;"JD617"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"KD494"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"M3006"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"RD857"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"TD349"&lt;/span&gt;,&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;"U5867"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"U5882"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"W5915"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"X5308"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"X5329"&lt;/span&gt;,&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;"X5332"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"X5333"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"X5875"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"X5877"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"Y1333"&lt;/span&gt;,&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: maroon"&gt;"Y4500"&lt;/span&gt;,&lt;span style="color: maroon"&gt;"Y5466"&lt;/span&gt;&amp;nbsp; &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#0080c0"&gt;get-WmiObject&lt;/font&gt;&amp;nbsp;win32_battery&amp;nbsp;-computer&amp;nbsp;$computer&amp;nbsp;|&amp;nbsp;&lt;span style="color: blue"&gt;Foreach&lt;/span&gt;&amp;nbsp;{&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$Name&amp;nbsp;=&amp;nbsp;$_.name&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0080c0"&gt;write-host&lt;/font&gt;&amp;nbsp;&lt;span style="color: maroon"&gt;"Battery&amp;nbsp;Model&amp;nbsp;:&amp;nbsp;$name"&lt;/span&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$AffectedSerials&amp;nbsp;|&amp;nbsp;&lt;span style="color: blue"&gt;Where&lt;/span&gt;&amp;nbsp;{$name&amp;nbsp;-match&amp;nbsp;$_}&amp;nbsp;|&amp;nbsp;&lt;span style="color: blue"&gt;Foreach&lt;/span&gt;&amp;nbsp;{&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0080c0"&gt;Write-Warning&lt;/font&gt;&amp;nbsp;&lt;span style="color: maroon"&gt;"Affected&amp;nbsp;:&amp;nbsp;Battery&amp;nbsp;$Name&amp;nbsp;matches&amp;nbsp;:&amp;nbsp;*$_*"&lt;/span&gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;} &lt;br&gt;}&lt;/div&gt; &lt;p&gt;you can also use those examples just by pasting them onto the Console, but after that you need to start them  &lt;blockquote&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;MSH&amp;gt;&lt;/font&gt;# check-Battery function&lt;br&gt;&lt;font color="#ff0000"&gt;MSH&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;MSH&amp;gt;&lt;/font&gt;function Check-Battery ($computer = '.') {&lt;br&gt;&amp;gt;&amp;gt;&lt;br&gt;&amp;gt;&amp;gt; $AffectedSerials = "3K590","59474","6P922",&lt;br&gt;&amp;gt;&amp;gt; "C2603","C5339","C5340", "C5446","C6269",&lt;br&gt;&amp;gt;&amp;gt; "C6270", "D2961","D5555","D6024","D6025",&lt;br&gt;&amp;gt;&amp;gt; "F2100","F5132","GD785","H3191","JD616",&lt;br&gt;&amp;gt;&amp;gt; "JD617","KD494","M3006","RD857","TD349",&lt;br&gt;&amp;gt;&amp;gt; "U5867","U5882","W5915","X5308","X5329",&lt;br&gt;&amp;gt;&amp;gt; "X5332","X5333","X5875","X5877","Y1333",&lt;br&gt;&amp;gt;&amp;gt; "Y4500","Y5466"&lt;br&gt;&amp;gt;&amp;gt;&lt;br&gt;&amp;gt;&amp;gt; get-WmiObject win32_battery -computer $computer | Foreach {&lt;br&gt;&amp;gt;&amp;gt; $Name = $_.name&lt;br&gt;&amp;gt;&amp;gt; write-host "Battery Model : $name"&lt;br&gt;&amp;gt;&amp;gt; $AffectedSerials | Where {$name -match $_} | Foreach {&lt;br&gt;&amp;gt;&amp;gt; Write-Warning "Affected : Battery $Name matches : *$_*"&lt;br&gt;&amp;gt;&amp;gt; }&lt;br&gt;&amp;gt;&amp;gt; }&lt;br&gt;&amp;gt;&amp;gt; }&lt;br&gt;&amp;gt;&amp;gt;&lt;br&gt;&lt;font color="#ff0000"&gt;MSH&amp;gt;&lt;/font&gt;Check-Battery&lt;br&gt;Battery Model : DELL 4M0105&lt;br&gt;&lt;font color="#ff0000"&gt;MSH&amp;gt;&lt;/font&gt;Check-Battery foo&lt;br&gt;get-WMIObject : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)&lt;br&gt;At line:10 char:16&lt;br&gt;+ get-WmiObject &amp;lt;&amp;lt;&amp;lt;&amp;lt; win32_battery -computer $computer | Foreach {&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#ff0000"&gt;MSH&amp;gt;&lt;/font&gt;$AffectedSerials -contains '4M010'&lt;br&gt;True&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;em&gt;Note that as I declare the $AffectedSerials in the function, my modified $AffectedSerials is not used so my computer will not show up as affected, but my $global scope is not changed it still contains the added value as the function runs in his own scope.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;A common misunderstanding is that an example like this is copied from my blog into notepad and then saved in a file.&lt;/p&gt; &lt;p&gt;as this is the declaration of a function this function gets loaded not executed, also after you run the script you can not use the function if you want to load it in the interactive ($global) scope to keep it handy you need to start the script with a dot (called Dot Sourcing to be able to use it after running the script) as with the function&lt;/p&gt; &lt;p&gt;some examples of this:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;a href="http://mow001.blogspot.com/2006/05/powershell-out-datagrid-update-and.html"&gt;PowerShell out-DataGrid update and more Dataset utilities&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://mow001.blogspot.com/2006/03/working-with-csv-files-in-msh-part-one.html"&gt;working with CSV files in MSH (part one)&lt;/a&gt;&lt;/p&gt; &lt;p&gt;this way of loading functions is great for use in a profile see also :&lt;/p&gt; &lt;p&gt;&lt;a href="http://mow001.blogspot.com/2006/01/commandline-editing-with-msh.html"&gt;&lt;a href="http://mow001.blogspot.com/2005/11/tuning-msh-in-your-profile.html"&gt;Tuning MSH in your Profile&lt;/a&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I hope this shows a bit how easy it is to test by pasting code into the console, how to work with the different examples and how the different ways of starting code differ. in later posts more about how to work with scripts.&lt;/p&gt; &lt;p&gt;If you still have problems starting one of my examples please let me know.&lt;/p&gt; &lt;p&gt;Enjoy,  &lt;p&gt;Greetings, /\/\o\/\/&lt;br&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/msh"&gt;msh&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-115697276141591933?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/115697276141591933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=115697276141591933' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115697276141591933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115697276141591933'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/08/powershell-has-my-dell-dangerous.html' title='PowerShell, Has my Dell a dangerous battery ?'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-115679862476654590</id><published>2006-08-28T22:57:00.000+02:00</published><updated>2006-08-29T00:14:52.020+02:00</updated><title type='text'>PowerShell Adding -verbose switch to functions</title><content type='html'>&lt;p&gt;&lt;strong&gt;*Remark*&lt;/strong&gt; this is a post to test Live Writer so it will change a couple of times. &lt;em&gt;&lt;strong&gt;(*Edit 5 *&lt;/strong&gt;for now it looks good I can edit my posts without losing formatting, and offline)&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;*Edit 2*&lt;/strong&gt;&amp;nbsp; there will be some double posts for testing,&amp;nbsp;I will remove those later&amp;nbsp;(this link will stay others will be removed)&lt;/em&gt;&lt;/p&gt; &lt;p&gt;In the last post you did see that I used the verbose-switch&lt;/p&gt; &lt;p&gt;here I will show an example on how to set this for the function itself, or to use the preference variables to set this:&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;*Edit*&lt;/strong&gt; note that&amp;nbsp;all the Write Messages do&amp;nbsp;not get passed to the pipeline so&amp;nbsp;only will display on the host.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;*see this examples in normal text look if pipeline chars&amp;nbsp;do stay&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;font size="3"&gt;&lt;font face="Arial"&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$test = "pipeline" ; write-host "Host"&lt;br&gt;Host&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="3"&gt;&lt;font face="Arial"&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$test&lt;br&gt;pipeline&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="3"&gt;&lt;font face="Arial"&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;1,2 |% {out-host "pipeline $_" ; write-host "Host $_"}&lt;br&gt;Host 1&lt;br&gt;Host 2&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="3"&gt;&lt;font face="Arial"&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;1,2 |% {"pipeline $_" ; write-host "Host $_"}&lt;br&gt;pipeline 1&lt;br&gt;Host 1&lt;br&gt;pipeline 2&lt;br&gt;Host 2&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font size="3"&gt;&lt;font face="Arial"&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;1,2 |% {"pipeline $_" ; write-host "Host $_"} |% {"second foreach : $_"}&lt;br&gt;second foreach : pipeline 1&lt;br&gt;Host 1&lt;br&gt;second foreach : pipeline 2&lt;br&gt;Host 2&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;PoSH&amp;gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;*End Edit*&lt;/em&gt;&lt;/strong&gt;  &lt;p&gt;&amp;nbsp;  &lt;p&gt;In the former examples you could see what is the difference between outputting to the host and to the pipeline, the last example shows that&amp;nbsp;in the second foreach there is only the output from out-object (out-object is used by default if you just put a string on a line as I&amp;nbsp;did in the example)&amp;nbsp;&amp;nbsp;  &lt;p&gt;an example how to add a switch to a funtion, so you can override&amp;nbsp;it&amp;nbsp;for a function like you can with a CMDlet :  &lt;p&gt;&amp;nbsp;  &lt;div style="font-family: courier new"&gt;&lt;span style="color: green"&gt;#&amp;nbsp;WriteExample.ps1&lt;/span&gt; &lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;add&amp;nbsp;a&amp;nbsp;verbose&amp;nbsp;switch&amp;nbsp;to&amp;nbsp;a&amp;nbsp;PowerShell&amp;nbsp;Function&lt;/span&gt; &lt;br&gt;&lt;br&gt;param&amp;nbsp;([&lt;span style="color: blue"&gt;switch&lt;/span&gt;]$Verbose) &lt;br&gt;&lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;Check&amp;nbsp;verbose&amp;nbsp;Switch&lt;/span&gt; &lt;br&gt;&lt;br&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt;&amp;nbsp;($verbose.IsPresent)&amp;nbsp;{ &lt;br&gt;&amp;nbsp;&amp;nbsp;$VerbosePreference&amp;nbsp;=&amp;nbsp;&lt;span style="color: maroon"&gt;'Continue'&lt;/span&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;Write-Verbose&amp;nbsp;&lt;span style="color: maroon"&gt;"Verbose&amp;nbsp;Mode&amp;nbsp;Enabled"&lt;/span&gt; &lt;br&gt;} &lt;br&gt;&lt;span style="color: blue"&gt;Else&lt;/span&gt;&amp;nbsp;{ &lt;br&gt;&amp;nbsp;&amp;nbsp;$VerbosePreference&amp;nbsp;=&amp;nbsp;&lt;span style="color: maroon"&gt;'SilentlyContinue'&lt;/span&gt; &lt;br&gt;} &lt;br&gt;&lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;Rest&amp;nbsp;of&amp;nbsp;script&lt;/span&gt; &lt;br&gt;&lt;br&gt;write-host&amp;nbsp;&lt;span style="color: maroon"&gt;"only&amp;nbsp;Host&amp;nbsp;output"&lt;/span&gt; &lt;br&gt;write-verbose&amp;nbsp;&lt;span style="color: maroon"&gt;"only&amp;nbsp;Host&amp;nbsp;output&amp;nbsp;verbose&amp;nbsp;mode"&lt;/span&gt; &lt;br&gt;write-warning&amp;nbsp;&lt;span style="color: maroon"&gt;"Warning&amp;nbsp;only&amp;nbsp;host"&lt;/span&gt; &lt;br&gt;write-error&amp;nbsp;&lt;span style="color: maroon"&gt;"error,&amp;nbsp;will&amp;nbsp;raise&amp;nbsp;error"&lt;/span&gt; &lt;/div&gt; &lt;p&gt;now you can change the behavior by setting the preference in the $global scope or overrule it on a Function base this like this : &lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;strong&gt;&amp;nbsp;*Edit 4 *&lt;/strong&gt;Note that the -verbose switch will set it only for the script it leaves the global setting alone&lt;/em&gt;&lt;/p&gt; &lt;div style="font-family: courier new"&gt;&lt;span style="color: green"&gt;#&amp;nbsp;Examples&amp;nbsp;working&amp;nbsp;with&amp;nbsp;the&amp;nbsp;different&amp;nbsp;preferences&lt;/span&gt; &lt;br&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$VerbosePreference &lt;br&gt;SilentlyContinue &lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$WarningPreference &lt;br&gt;&lt;font color="#000000"&gt;&lt;span style="color: blue"&gt;C&lt;font color="#000000"&gt;ontinu&lt;/font&gt;e&lt;/span&gt; &lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$ErrorActionPreference &lt;br&gt;&lt;span style="color: blue"&gt;C&lt;font color="#000000"&gt;ontinu&lt;/font&gt;e&lt;/span&gt;&lt;/font&gt; &lt;br&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;\WriteExample.ps1 &lt;br&gt;only&amp;nbsp;Host&amp;nbsp;output &lt;br&gt;&lt;font color="#ff8040"&gt;WARNING:&amp;nbsp;Warning&amp;nbsp;only&amp;nbsp;host &lt;br&gt;&lt;/font&gt;C:\PowerShell\WriteExample.ps1&amp;nbsp;:&amp;nbsp;error,&amp;nbsp;will&amp;nbsp;raise&amp;nbsp;error &lt;br&gt;At&amp;nbsp;line:&lt;span style="color: maroon"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;c&lt;font color="#000000"&gt;ha&lt;/font&gt;r&lt;/span&gt;:&lt;span style="color: maroon"&gt;19&lt;/span&gt; &lt;br&gt;+&amp;nbsp;.\WriteExample.ps1&amp;nbsp;&amp;nbsp;&amp;lt;&amp;lt;&amp;lt;&amp;lt; &lt;br&gt;&lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;verbose&lt;/span&gt; &lt;br&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;\WriteExample.ps1&amp;nbsp;-v &lt;br&gt;&lt;font color="#0080ff"&gt;VERBOSE:&amp;nbsp;Verbose&amp;nbsp;Mode&amp;nbsp;Enabled&lt;/font&gt; &lt;br&gt;only&amp;nbsp;Host&amp;nbsp;output &lt;br&gt;&lt;font color="#0080ff"&gt;VERBOSE:&amp;nbsp;only&amp;nbsp;Host&amp;nbsp;output&amp;nbsp;verbose&amp;nbsp;mode&lt;/font&gt; &lt;br&gt;&lt;font color="#ff8040"&gt;WARNING:&amp;nbsp;Warning&amp;nbsp;only&amp;nbsp;host&lt;/font&gt; &lt;br&gt;C:\PowerShell\WriteExample.ps1&amp;nbsp;:&amp;nbsp;error,&amp;nbsp;will&amp;nbsp;raise&amp;nbsp;error &lt;br&gt;At&amp;nbsp;line:&lt;span style="color: maroon"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue"&gt;c&lt;font color="#000000"&gt;ha&lt;/font&gt;r&lt;/span&gt;:&lt;span style="color: maroon"&gt;19&lt;/span&gt; &lt;br&gt;+&amp;nbsp;.\WriteExample.ps1&amp;nbsp;&amp;nbsp;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;nbsp;-v &lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt; &lt;br&gt;&lt;br&gt;&lt;span style="color: green"&gt;#&amp;nbsp;changing&amp;nbsp;also&amp;nbsp;warning&amp;nbsp;and&amp;nbsp;error&amp;nbsp;preference&lt;/span&gt; &lt;br&gt;&lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$ErrorActionPreference&amp;nbsp;=&amp;nbsp;&lt;span style="color: maroon"&gt;'SilentlyContinue'&lt;/span&gt; &lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;$WarningPreference&amp;nbsp;=&amp;nbsp;&lt;span style="color: maroon"&gt;'SilentlyContinue'&lt;/span&gt; &lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;.\WriteExample.ps1 &lt;br&gt;only&amp;nbsp;Host&amp;nbsp;output &lt;br&gt;&lt;font color="#ff0000"&gt;PoSH&amp;gt;&lt;/font&gt;.\WriteExample.ps1&amp;nbsp;-v &lt;br&gt;&lt;font color="#0080ff"&gt;VERBOSE:&amp;nbsp;Verbose&amp;nbsp;Mode&amp;nbsp;Enabled&lt;/font&gt; &lt;br&gt;only&amp;nbsp;Host&amp;nbsp;output &lt;br&gt;&lt;font color="#0080ff"&gt;VERBOSE:&amp;nbsp;only&amp;nbsp;Host&amp;nbsp;output&amp;nbsp;verbose&amp;nbsp;mode&lt;/font&gt; &lt;br&gt;PoSH&amp;gt;&lt;/div&gt; &lt;p&gt;Enjoy,&lt;br&gt;&lt;/p&gt; &lt;p&gt;Greetings, /\/\o\/\/&lt;br&gt;Tags : &lt;a href="http://technorati.com/tag/Monad"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/msh"&gt;msh&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-115679862476654590?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/115679862476654590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=115679862476654590' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115679862476654590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115679862476654590'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/08/powershell-adding-verbose-switch-to.html' title='PowerShell Adding -verbose switch to functions'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-115678262078295546</id><published>2006-08-28T18:09:00.000+02:00</published><updated>2006-08-28T18:38:07.246+02:00</updated><title type='text'>PowerShell and Active Directory Part 9 (nested groups)</title><content type='html'>In this entry I will show how you can use a recursive script to get the all members of a group, including the members that are in nested groups.&lt;br /&gt;&lt;br /&gt;Note that the script will not handle groups with more as 1000 (W2K) or 1500 (W2K3) users,&lt;br /&gt;as this is the maximum the Members property will enumerate.&lt;br /&gt;If you have groups that are bigger you need to adapt the script to do a paged search for examples how to do this see :&lt;a href="http://mow001.blogspot.com/2006/04/large-ad-queries-in-monad.html"&gt;&lt;b&gt;Large&lt;/b&gt; AD &lt;b&gt;queries&lt;/b&gt; in Monad &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The script looks like this :&lt;br /&gt;&lt;br /&gt;&lt;div style='font-family: Courier New'&gt;&lt;span style=' color: Green;'&gt;#&amp;nbsp;Function&amp;nbsp;get-NestedMembers&lt;/span&gt; &lt;BR /&gt;&lt;span style=' color: Green;'&gt;#&amp;nbsp;List&amp;nbsp;the&amp;nbsp;members&amp;nbsp;of&amp;nbsp;a&amp;nbsp;group&amp;nbsp;including&amp;nbsp;all&amp;nbsp;nested&amp;nbsp;members&amp;nbsp;of&amp;nbsp;subgroups&lt;/span&gt; &lt;BR /&gt;&lt;span style=' color: Green;'&gt;#&amp;nbsp;/\/\o\/\/&amp;nbsp;2006&lt;/span&gt; &lt;BR /&gt; &lt;BR /&gt;&lt;span style=' color: Blue;'&gt;function&lt;/span&gt;&amp;nbsp;get-NestedMembers&amp;nbsp;($group){&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=' color: Blue;'&gt;if&lt;/span&gt;&amp;nbsp;($group.objectclass[&lt;span style=' color: Maroon;'&gt;1&lt;/span&gt;]&amp;nbsp;-eq&amp;nbsp;&lt;span style=' color: Maroon;'&gt;'group'&lt;/span&gt;)&amp;nbsp;{&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;write-verbose&amp;nbsp;&lt;span style=' color: Maroon;'&gt;"Group&amp;nbsp;$($group.cn)"&lt;/span&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$Group.member&amp;nbsp;|%&amp;nbsp;{&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$de&amp;nbsp;=&amp;nbsp;new-&lt;span style=' color: Blue;'&gt;object&lt;/span&gt;&amp;nbsp;directoryservices.directoryentry(&lt;span style=' color: Maroon;'&gt;"LDAP://$_"&lt;/span&gt;)&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=' color: Blue;'&gt;if&lt;/span&gt;&amp;nbsp;($de.objectclass[&lt;span style=' color: Maroon;'&gt;1&lt;/span&gt;]&amp;nbsp;-eq&amp;nbsp;&lt;span style=' color: Maroon;'&gt;'group'&lt;/span&gt;)&amp;nbsp;{&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;get-NestedMembers&amp;nbsp;$de&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=' color: Blue;'&gt;Else&lt;/span&gt;&amp;nbsp;{&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$de.sAMAccountName&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;} &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=' color: Blue;'&gt;Else&lt;/span&gt;&amp;nbsp;{ &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Throw&amp;nbsp;&lt;span style=' color: Maroon;'&gt;"$group&amp;nbsp;is&amp;nbsp;not&amp;nbsp;a&amp;nbsp;group"&lt;/span&gt; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp; &lt;BR /&gt;}&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Note that I did add the groupname as a Write-Verbose, so it will only show in verbose mode and in verbose mode will only be displayed not passed on to the pipeline , also it will show users that are member of more groups as often as they get found, as show in the examples below you can use group or sort -unique to get a list of them or to only show the users / computers found in more groups once.&lt;br /&gt;&lt;br /&gt;&lt;div style='font-family: Courier New'&gt;&lt;span style=' color: Green;'&gt;#&amp;nbsp;get-NestedMembers&amp;nbsp;usage&amp;nbsp;examples&amp;nbsp;:&lt;/span&gt; &lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&lt;span style=' color: Green;'&gt;#&amp;nbsp;get&amp;nbsp;a&amp;nbsp;group&lt;/span&gt; &lt;BR /&gt; &lt;BR /&gt;$group&amp;nbsp;=&amp;nbsp;new-&lt;span style=' color: Blue;'&gt;object&lt;/span&gt;&amp;nbsp;directoryservices.directoryentry(&lt;span style=' color: Maroon;'&gt;"LDAP://cn=MainGroup,OU=Groups,DC=mow,DC=Local"&lt;/span&gt;) &lt;BR /&gt; &lt;BR /&gt;&lt;span style=' color: Green;'&gt;#&amp;nbsp;Get&amp;nbsp;all&amp;nbsp;nested&amp;nbsp;members&lt;/span&gt; &lt;BR /&gt; &lt;BR /&gt;get-NestedMembers&amp;nbsp;$group &lt;BR /&gt; &lt;BR /&gt;User1 &lt;BR /&gt;User2 &lt;BR /&gt;User2 &lt;BR /&gt;User3 &lt;BR /&gt; &lt;BR /&gt;&lt;span style=' color: Green;'&gt;#&amp;nbsp;Show&amp;nbsp;current&amp;nbsp;verbose&amp;nbsp;mode&amp;nbsp;:&lt;/span&gt; &lt;BR /&gt; &lt;BR /&gt;MowPS&amp;gt;$VerbosePreference &lt;BR /&gt;SilentlyContinue &lt;BR /&gt; &lt;BR /&gt;&lt;span style=' color: Green;'&gt;#&amp;nbsp;Enable&amp;nbsp;Verbose&amp;nbsp;Mode&amp;nbsp;:&lt;/span&gt; &lt;BR /&gt; &lt;BR /&gt;$VerbosePreference&amp;nbsp;=&amp;nbsp;&lt;span style=' color: Maroon;'&gt;'continue'&lt;/span&gt; &lt;BR /&gt; &lt;BR /&gt;get-NestedMembers&amp;nbsp;$group &lt;BR /&gt; &lt;BR /&gt;VERBOSE:&amp;nbsp;Group&amp;nbsp;MainGroup &lt;BR /&gt;User1 &lt;BR /&gt;User2 &lt;BR /&gt;VERBOSE:&amp;nbsp;Group&amp;nbsp;SubGroup &lt;BR /&gt;User2 &lt;BR /&gt;User3 &lt;BR /&gt; &lt;BR /&gt;&lt;span style=' color: Green;'&gt;#&amp;nbsp;Disable&amp;nbsp;Verbose&amp;nbsp;Mode&amp;nbsp;again&amp;nbsp;:&lt;/span&gt; &lt;BR /&gt; &lt;BR /&gt;$VerbosePreference&amp;nbsp;=&amp;nbsp;&lt;span style=' color: Maroon;'&gt;'SilentlyContinue'&lt;/span&gt; &lt;BR /&gt; &lt;BR /&gt;&lt;span style=' color: Green;'&gt;#&amp;nbsp;Group&amp;nbsp;the&amp;nbsp;output&amp;nbsp;to&amp;nbsp;get&amp;nbsp;the&amp;nbsp;doubles&lt;/span&gt; &lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;get-NestedMembers&amp;nbsp;$group&amp;nbsp;|&amp;nbsp;group &lt;BR /&gt; &lt;BR /&gt;Count&amp;nbsp;Name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Group &lt;BR /&gt;-----&amp;nbsp;----&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;----- &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=' color: Maroon;'&gt;1&lt;/span&gt;&amp;nbsp;User1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{User1} &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=' color: Maroon;'&gt;2&lt;/span&gt;&amp;nbsp;User2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{User2,&amp;nbsp;User2} &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=' color: Maroon;'&gt;1&lt;/span&gt;&amp;nbsp;User3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{User3} &lt;BR /&gt; &lt;BR /&gt;&lt;span style=' color: Green;'&gt;#&amp;nbsp;Use&amp;nbsp;sort&amp;nbsp;-Unique&amp;nbsp;to&amp;nbsp;get&amp;nbsp;every&amp;nbsp;user&amp;nbsp;only&amp;nbsp;once&lt;/span&gt; &lt;BR /&gt; &lt;BR /&gt;get-NestedMembers&amp;nbsp;$group&amp;nbsp;|&amp;nbsp;sort&amp;nbsp;-Unique &lt;BR /&gt; &lt;BR /&gt;User1 &lt;BR /&gt;User2 &lt;BR /&gt;User3&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Enjoy,&lt;br /&gt;&lt;br /&gt;Greetings, /\/\o\/\/&lt;br /&gt;Tags : &lt;a href="http://technorati.com/tag/Monad" rel="tag"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/msh" rel="tag"&gt;msh&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell" rel="tag"&gt;PowerShell&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-115678262078295546?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/115678262078295546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=115678262078295546' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115678262078295546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115678262078295546'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/08/powershell-and-active-directory-part-9_28.html' title='PowerShell and Active Directory Part 9 (nested groups)'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-115644888469654767</id><published>2006-08-24T21:47:00.000+02:00</published><updated>2006-08-24T21:48:05.486+02:00</updated><title type='text'>Powershell and hey Scripting guy !</title><content type='html'>one of my most favorite scripting sites is the &lt;a href="http://www.microsoft.com/technet/scriptcenter/default.mspx"&gt;Script Center&lt;/a&gt; on Microsoft teched.&lt;br /&gt;&lt;br /&gt;As I said often before on my blog especialy the scripting guys items I like very much, I follow it for a long time and and I did learn a lot from it.&lt;br /&gt;&lt;br /&gt;the first powershell examples on the scriptingcenter in the &lt;a href="http://www.microsoft.com/technet/scriptcenter/scripts/msh/default.mspx"&gt;Windows PowerShell Script Repository&lt;/a&gt; where a bit dissapointing&lt;br /&gt;see also : &lt;a href="http://mow001.blogspot.com/2006/01/first-monad-b3-impression-and-please.html"&gt;First Monad B3 impression and please help the scripting guys&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;but after some complaining : see also : &lt;a id="bp____ctl0___RecentPosts___postlist___EntryItems__ctl11_PostTitle" href="http://blogs.msdn.com/powershell/archive/2006/05/11/595583.aspx"&gt;PowerShell's Script Center problem&lt;/a&gt;&lt;br /&gt;the Scripting guy made it all up see :&lt;br /&gt;&lt;br /&gt;&lt;a title="Site: New Additions to the TechNet Script Center" href="http://www.microsoft.com/technet/scriptcenter/resources/qanda/jun06/hey0621.mspx" target="_blank"&gt;How Can I Use Windows PowerShell to Start a Service on a Remote Computer?&lt;/a&gt;&lt;br /&gt;&lt;a onclick="trackInfo(this)" href="http://www.microsoft.com/technet/scriptcenter/topics/msh/cmdlets/index.mspx" linkarea="Highlights" linkid="Windows PowerShell"&gt;What Can I Do With Windows PowerShell?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Yesterday the scripting guy answered a Powershell Question again :&lt;br /&gt;&lt;a href="http://www.microsoft.com/technet/scriptcenter/resources/qanda/aug06/hey0823.mspx"&gt;How Can I Use Windows PowerShell to Determine the Status of the Guest Account?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For the question of today in powershell see also :&lt;br /&gt;&lt;a href="http://www.microsoft.com/technet/scriptcenter/resources/qanda/aug06/hey0824.mspx"&gt;How Can I Add or Subtract Two Hexadecimal Numbers? &lt;/a&gt;&lt;br /&gt;for Powershell this looks like this :&lt;br /&gt;&lt;br /&gt;&lt;PRE&gt;# Add some hex numbers :&lt;br /&gt;&lt;br /&gt;MSH&amp;gt;&lt;SPAN style="COLOR: maroon"&gt;0x1C8&lt;/SPAN&gt; + &lt;SPAN style="COLOR: maroon"&gt;0xD201&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN style="COLOR: maroon"&gt;54217&lt;/SPAN&gt;&lt;br /&gt;&lt;br /&gt;# use the format &lt;SPAN style="COLOR: blue"&gt;operator&lt;/SPAN&gt; :&lt;br /&gt;&lt;br /&gt;MSH&amp;gt;&lt;SPAN style="COLOR: maroon"&gt;"{0:x}"&lt;/SPAN&gt; -f (&lt;SPAN style="COLOR: maroon"&gt;0x1C8&lt;/SPAN&gt; + &lt;SPAN style="COLOR: maroon"&gt;0xD201&lt;/SPAN&gt;)&lt;br /&gt;d3c9&lt;br /&gt;&lt;br /&gt;# use the tostring overload&lt;br /&gt;&lt;br /&gt;MSH&amp;gt;(&lt;SPAN style="COLOR: maroon"&gt;0x1C8&lt;/SPAN&gt; + &lt;SPAN style="COLOR: maroon"&gt;0xD201&lt;/SPAN&gt;).tostring(&lt;SPAN style="COLOR: maroon"&gt;'x'&lt;/SPAN&gt;)&lt;br /&gt;d3c9&lt;br /&gt;&lt;/PRE&gt;&lt;br /&gt;&lt;br /&gt;need I say more ?&lt;br /&gt;&lt;br /&gt;&lt;em&gt;for more examples of formatting on the powershellconsole see also &lt;/em&gt;&lt;a href="http://mow001.blogspot.com/2006/02/2006-winter-scripting-games-part-2.html"&gt;&lt;em&gt;2006 Winter Scripting Games (part 2)&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;So you see that its also nice to follow the examples not in Powershell and try to find a PowerShell way, I have a lot of examples of doing that, in the series about the Scripting Games I did compete in on my blog where I did al the questions also in powerShell form (MSH at the time) as all the material and origional answers are still online here : &lt;a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/default.mspx"&gt;Scripting Games Home&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The PowerShell versions a made for the events you can find here : (from first to last)&lt;br /&gt;&lt;a href="http://mow001.blogspot.com/2006/02/2006-winter-scripting-games.html"&gt;2006 Winter Scripting Games &lt;/a&gt;&lt;br /&gt;&lt;a href="http://mow001.blogspot.com/2006/02/2006-winter-scripting-games-part-2.html"&gt;2006 Winter Scripting Games (part 2) &lt;/a&gt;&lt;br /&gt;&lt;a href="http://mow001.blogspot.com/2006/02/scripting-games-part-3.html"&gt;scripting games part 3 &lt;/a&gt;&lt;br /&gt;&lt;a href="http://mow001.blogspot.com/2006/02/msh-concentration-scripting-games-part.html"&gt;MSH Concentration (scripting games part 4) &lt;/a&gt;&lt;br /&gt;&lt;a href="http://mow001.blogspot.com/2006/02/scripting-games-week-2.html"&gt;Scripting Games week 2 &lt;/a&gt;&lt;br /&gt;&lt;a href="http://mow001.blogspot.com/2006/02/scripting-games-event-6-in-msh.html"&gt;The Scripting Games Event 6 in MSH &lt;/a&gt;&lt;br /&gt;&lt;a href="http://mow001.blogspot.com/2006/02/scripting-games-almost-over.html"&gt;Scripting Games almost over &lt;/a&gt;&lt;br /&gt;&lt;a href="http://mow001.blogspot.com/2006/02/scripting-games-last-day-msh-answers.html"&gt;scripting games Last Day MSH answers for event 7 and 8&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;but as you see the "Hey scripting guy !" series is also nice to check fo the VbSScript examples as a lot of the techniques also can be used in powershell,&lt;br /&gt;you can theck the archive here : &lt;a href="http://www.microsoft.com/technet/scriptcenter/resources/qanda/all.mspx"&gt;Hey, Scripting Guy! Archive by Date&lt;/a&gt;&lt;br /&gt;and the Script center has also a "what is new" &lt;a href="http://www.microsoft.com/technet/scriptcenter/whatsnew.xml"&gt;RSS feed&lt;/a&gt; that you can use to be triggered when new examples get posted as they get metioned in the feed, hence its one of favorite feeds as well.&lt;br /&gt;&lt;br /&gt;I need a bit more time on the next part of the AD series as I still don't like the version as I have it at the moment&lt;br /&gt;As also I had a very busy Weekend doing a big migration at a customer last weekend, (powershell was very usefull there , not to say that it did make/save my weekend, as it enabled me to quickly do some large AD / Exchange changes and other checks of logfiles from robocopy etc .&lt;br /&gt;I made some powershell scripts on the fly to :&lt;br /&gt;&lt;br /&gt;checking list of emailadresses agains the adresses in AD etc.&lt;br /&gt;scanning (grep-ping) logfiles etc.&lt;br /&gt;changing Email aliases,&lt;br /&gt;setting primiary aliases&lt;br /&gt;removing double primairy adresses&lt;br /&gt;setting forwarding on mailboxes&lt;br /&gt;setting Permissions on Mailboxes.&lt;br /&gt;list the mailboxes I did disable the mailbox restrictions on&lt;br /&gt;setting some redirections on group mailboxes etc.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;As I do think that I could have done the status reports asked, lastminute changes, and fixes  needed during the migration that quick and in a situation that was, as Jeffrey Snover would say "With my hair on fire" &lt;br /&gt;&lt;br /&gt;I did had to replace someone at the last minute on this project, hence did not know the situation wel, and the large (large) Vbscripts and tooling used for it I did not realy know , so to make these changes/fixes with the origional scripts, as mostly there was only need to do a small part of the complete migration script to run again, or needed some tuning, or I was not completly sure if all siteeffects where covered if I did run the script and also I did some things as setting send-As security on mailboxes that is not that easy, &lt;br /&gt;&lt;br /&gt;So I was realy glad I could do a lot on the fly on the powershell commandline, and make small scripts on the fly to do the changes, to do that in VbScripts would be way to much work to even have tried.&lt;br /&gt;&lt;br /&gt;So in this situation I realy did feel the "Power" of powershell during big migrations,  As is that much more easy to make this kind of changes and checks, &lt;br /&gt;&lt;br /&gt;I think a lot of times last weekend about how difficult that would have been in VbScript and how much time I would have taken.&lt;br /&gt;&lt;br /&gt;and that I realy could not miss PowerShell anymore.&lt;br /&gt;&lt;br /&gt;I will also make a post with some examples I did use for this as I clear them up and sort them out, for a later post in the AD series.&lt;br /&gt;&lt;br /&gt;Enjoy,&lt;br /&gt;&lt;br /&gt;Greetings, /\/\o\/\/&lt;br /&gt;Tags : &lt;a href="http://technorati.com/tag/Monad" rel="tag"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/msh" rel="tag"&gt;msh&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell" rel="tag"&gt;PowerShell&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-115644888469654767?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/115644888469654767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=115644888469654767' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115644888469654767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115644888469654767'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/08/powershell-and-hey-scripting-guy.html' title='Powershell and hey Scripting guy !'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-115557026915524192</id><published>2006-08-14T17:44:00.000+02:00</published><updated>2006-08-14T17:44:30.326+02:00</updated><title type='text'>PowerShell Orphan share remover Tool (Update)</title><content type='html'>I needed to clean some Orphan Shares on our servers,&lt;br /&gt;but when I did lookup the MSH script, I make last year I found that the stats did not work anymore in PowerShell, also it had a boolean parameter, since we have a Switch argument now in PowerShell that would be better,&lt;br /&gt; &lt;br /&gt;So I Updated the &lt;a href="http://mow001.blogspot.com/2005/12/msh-orphan-share-remover-tool.html"&gt;MSH &lt;b&gt;Orphan&lt;/b&gt; share remover Tool &lt;/a&gt;To PowerShell,&lt;br /&gt;I changed the $doChange Bool to a [Switch], (new in powerShell RC1&lt;br /&gt;&lt;a href="http://mow001.blogspot.com/2006/04/powershell-ad-site-finder.html"&gt; see PowerShell AD site Finder&lt;/a&gt;) also the -eq behavour when checking an array changed,&lt;br /&gt;so I needed to change the to -contains (for the example I did leave them in but I switched also to keeping count in the script)&lt;br /&gt;&lt;br /&gt;The Update script looks like this :&lt;br /&gt;&lt;br /&gt;&lt;div style='font-family: Courier New'&gt;&lt;span style=' color: Green;'&gt;#&amp;nbsp;OrphanShares.PS1&lt;/span&gt; &lt;BR /&gt;&lt;span style=' color: Green;'&gt;#&amp;nbsp;Checks&amp;nbsp;/&amp;nbsp;Removes&amp;nbsp;Orphan&amp;nbsp;Shares&lt;/span&gt; &lt;BR /&gt;&lt;span style=' color: Green;'&gt;#&amp;nbsp;/\/\o\/\/&amp;nbsp;2005&lt;/span&gt; &lt;BR /&gt;&lt;span style=' color: Green;'&gt;#&amp;nbsp;V2&amp;nbsp;updated&amp;nbsp;to&amp;nbsp;PowerShell&amp;nbsp;RC1&lt;/span&gt; &lt;BR /&gt; &lt;BR /&gt;param&amp;nbsp;( &lt;BR /&gt;&amp;nbsp;&amp;nbsp;[&lt;span style=' color: Blue;'&gt;string&lt;/span&gt;]&amp;nbsp;$Computer&amp;nbsp;=&amp;nbsp;&lt;span style=' color: Maroon;'&gt;"."&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;[&lt;span style=' color: Blue;'&gt;Switch&lt;/span&gt;]&amp;nbsp;$Remove &lt;BR /&gt;) &lt;BR /&gt; &lt;BR /&gt;&lt;span style=' color: Green;'&gt;#&amp;nbsp;Connect&amp;nbsp;to&amp;nbsp;registry&lt;/span&gt; &lt;BR /&gt; &lt;BR /&gt;$Reg&amp;nbsp;=&amp;nbsp;[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey(&lt;span style=' color: Maroon;'&gt;'LocalMachine'&lt;/span&gt;,&amp;nbsp;$Computer) &lt;BR /&gt;$key&amp;nbsp;=&amp;nbsp;$Reg.OpenSubKey(&lt;span style=' color: Maroon;'&gt;"SYSTEM\CurrentControlSet\Services\LanmanServer\Shares"&lt;/span&gt;,&amp;nbsp;$True) &lt;BR /&gt; &lt;BR /&gt;&lt;span style=' color: Green;'&gt;#&amp;nbsp;get&amp;nbsp;shares&amp;nbsp;in&amp;nbsp;Registry&amp;nbsp;:&lt;/span&gt; &lt;BR /&gt; &lt;BR /&gt;$Regshares&amp;nbsp;=&amp;nbsp;$Key.GetValueNames() &lt;BR /&gt; &lt;BR /&gt;&lt;span style=' color: Green;'&gt;#&amp;nbsp;get&amp;nbsp;Existing&amp;nbsp;shares&amp;nbsp;:&lt;/span&gt; &lt;BR /&gt; &lt;BR /&gt;$shares&amp;nbsp;=&amp;nbsp;@();get-WMIObject&amp;nbsp;-computer&amp;nbsp;$Computer&amp;nbsp;win32_share&amp;nbsp;|&amp;nbsp;&lt;span style=' color: Blue;'&gt;foreach&lt;/span&gt;&amp;nbsp;{$shares&amp;nbsp;+=&amp;nbsp;$_.name} &lt;BR /&gt; &lt;BR /&gt;&lt;span style=' color: Green;'&gt;#&amp;nbsp;Compare&amp;nbsp;the&amp;nbsp;Lists&amp;nbsp;:&lt;/span&gt; &lt;BR /&gt; &lt;BR /&gt;$Exist&amp;nbsp;=&amp;nbsp;&lt;span style=' color: Maroon;'&gt;0&lt;/span&gt; &lt;BR /&gt;$Orphan&amp;nbsp;=&amp;nbsp;&lt;span style=' color: Maroon;'&gt;0&lt;/span&gt; &lt;BR /&gt;$deleted&amp;nbsp;=&amp;nbsp;&lt;span style=' color: Maroon;'&gt;0&lt;/span&gt; &lt;BR /&gt; &lt;BR /&gt;$RegShares&amp;nbsp;|&amp;nbsp;&lt;span style=' color: Blue;'&gt;foreach&lt;/span&gt;&amp;nbsp;{ &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;span style=' color: Blue;'&gt;if&lt;/span&gt;&amp;nbsp;($shares&amp;nbsp;-eq&amp;nbsp;$_)&amp;nbsp;{ &lt;BR /&gt; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=' color: Maroon;'&gt;"$_&amp;nbsp;Exists"&lt;/span&gt; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$Exists&amp;nbsp;+=&amp;nbsp;&lt;span style=' color: Maroon;'&gt;1&lt;/span&gt; &lt;BR /&gt; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;}&lt;span style=' color: Blue;'&gt;Else&lt;/span&gt;&amp;nbsp;{ &lt;BR /&gt; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=' color: Maroon;'&gt;"$_&amp;nbsp;is&amp;nbsp;an&amp;nbsp;Orphan"&lt;/span&gt; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$Orphan&amp;nbsp;+=&amp;nbsp;&lt;span style=' color: Maroon;'&gt;1&lt;/span&gt; &lt;BR /&gt; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=' color: Green;'&gt;#&amp;nbsp;Only&amp;nbsp;if&amp;nbsp;DoChange&amp;nbsp;is&amp;nbsp;True&amp;nbsp;Delete&amp;nbsp;The&amp;nbsp;Orphan&amp;nbsp;Share&lt;/span&gt; &lt;BR /&gt; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=' color: Blue;'&gt;if&lt;/span&gt;&amp;nbsp;($Remove.IsPresent)&amp;nbsp;{$Key.DeleteValue($_);&lt;span style=' color: Maroon;'&gt;"$_&amp;nbsp;Deleted&amp;nbsp;!!"&lt;/span&gt;;$deleted&amp;nbsp;+=&lt;span style=' color: Maroon;'&gt;1&lt;/span&gt;} &lt;BR /&gt;&amp;nbsp;&amp;nbsp;} &lt;BR /&gt;} &lt;BR /&gt; &lt;BR /&gt;&lt;span style=' color: Green;'&gt;#&amp;nbsp;show&amp;nbsp;some&amp;nbsp;statistics&amp;nbsp;:&lt;/span&gt; &lt;BR /&gt; &lt;BR /&gt;&lt;span style=' color: Maroon;'&gt;"Existing&amp;nbsp;:&amp;nbsp;$Exists"&lt;/span&gt; &lt;BR /&gt;&lt;span style=' color: Maroon;'&gt;"Orphan&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;$Orphan"&lt;/span&gt; &lt;BR /&gt;&lt;span style=' color: Maroon;'&gt;"Deleted&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;$Deleted"&lt;/span&gt; &lt;BR /&gt; &lt;BR /&gt;&lt;span style=' color: Green;'&gt;#&amp;nbsp;changed&amp;nbsp;-eq&amp;nbsp;to&amp;nbsp;-contains&amp;nbsp;but&amp;nbsp;not&amp;nbsp;used&amp;nbsp;anymore&amp;nbsp;&lt;/span&gt; &lt;BR /&gt; &lt;BR /&gt;&lt;span style=' color: Green;'&gt;#&amp;nbsp;"Orphan&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;";($RegShares&amp;nbsp;|&amp;nbsp;foreach&amp;nbsp;{"$_&amp;nbsp;$($shares&amp;nbsp;-contains&amp;nbsp;$_)"}&amp;nbsp;|&amp;nbsp;findstr&amp;nbsp;"False"&amp;nbsp;|&amp;nbsp;measure-object).count&lt;/span&gt; &lt;BR /&gt;&lt;span style=' color: Green;'&gt;#&amp;nbsp;"Existing&amp;nbsp;:&amp;nbsp;";($RegShares&amp;nbsp;|&amp;nbsp;foreach&amp;nbsp;{"$_&amp;nbsp;$($shares&amp;nbsp;-contains&amp;nbsp;$_)"}&amp;nbsp;|&amp;nbsp;findstr&amp;nbsp;"True"&amp;nbsp;|&amp;nbsp;measure-object).count&lt;/span&gt; &lt;BR /&gt; &lt;BR /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;For more information about Orphan shares and the script see the old post,&lt;br /&gt;Enjoy,&lt;br /&gt;&lt;br /&gt;Greetings /\/\o\/\/&lt;br /&gt;&lt;br /&gt;Tags : &lt;a href="http://technorati.com/tag/Monad" rel="tag"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/msh" rel="tag"&gt;msh&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell" rel="tag"&gt;PowerShell&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-115557026915524192?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/115557026915524192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=115557026915524192' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115557026915524192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115557026915524192'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/08/powershell-orphan-share-remover-tool.html' title='PowerShell Orphan share remover Tool (Update)'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-115533175454526876</id><published>2006-08-11T23:28:00.000+02:00</published><updated>2006-08-11T23:31:10.276+02:00</updated><title type='text'>PowerShell and Active Directory Part 8 (ACL's)</title><content type='html'>This eighth part of the AD series is the &lt;em&gt;*Edit* change of plans, see rest of blogentry, there will be one more&lt;/em&gt;, (one before) last about creating users in Active Directory,&lt;br /&gt;in this post we will transform the filter used in last post to a more robust function, and transform it in a more production quality script.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;strong&gt;*Note*&lt;/strong&gt; Disclaimer, while I discus the posibilities for making a production quality script the example script I provide in this post is only a example on how to start, not complete and tested script, so only use this in a test environment also be sure to have a basic understanding&lt;br /&gt;of how the script works, better yet read the other posts in this series first!&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;&lt;strong&gt;Part 1 to 3&lt;/strong&gt; of this series handle the making of a user from the start from the commandline, an overview what you can find where you can find in the beginning of part 4 ,&lt;br /&gt;&lt;strong&gt;Part 5 - 7&lt;/strong&gt; handle the way to use CSV files or any other way to fill the PSObject with the needed properties, and this function.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mow001.blogspot.com/2006/08/powershell-and-active-directory-part-7.html"&gt;PowerShell and Active Directory Part 7 &lt;/a&gt;&lt;br /&gt;&lt;a href="http://mow001.blogspot.com/2006/08/powershell-and-active-directory-part-6.html"&gt;PowerShell and Active Directory Part 6 &lt;/a&gt;&lt;br /&gt;&lt;a href="http://mow001.blogspot.com/2006/08/powershell-and-active-directory-part-5.html"&gt;PowerShell and Active Directory Part 5 &lt;/a&gt;&lt;br /&gt;&lt;a href="http://mow001.blogspot.com/2006/07/powershell-and-active-directory-part-4.html"&gt;PowerShell and Active Directory Part 4 (TypeData) &lt;/a&gt;&lt;br /&gt;&lt;a href="http://mow001.blogspot.com/2006/07/powershell-and-active-directory-part-3.html"&gt;PowerShell and Active Directory Part 3 (UserProperties) &lt;/a&gt;&lt;br /&gt;&lt;a href="http://mow001.blogspot.com/2006/06/powershell-and-active-directory-part-2.html"&gt;PowerShell and Active Directory Part 2 &lt;/a&gt;&lt;br /&gt;&lt;a href="http://mow001.blogspot.com/2006/06/powershel-and-active-directory-part-1.html"&gt;PowerShel and Active Directory Part 1 &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;First about the change to a script, the Filter I used is easy to test with as you can just past it to the commandline, this version is a script that you can run directly.&lt;br /&gt;&lt;br /&gt;for another example see the changes &lt;a class="blines3" title="Link outside of this blog" href="http://blogs.inetium.com/blogs/mhodnick/default.aspx" target="_blank"&gt;Mike Hodnick&lt;/a&gt; made to an out-zip function I made before &lt;a href="http://mow001.blogspot.com/2006/01/msh-out-zip-function.html"&gt;MSH out-zip Function&lt;/a&gt; in his blogpost here &lt;a class="bl_itemtitle" title="Site: Technorati Search for: PowerShell" href="http://blogs.inetium.com/blogs/mhodnick/archive/2006/08/07/295.aspx" target="_blank"&gt;Create zip/compressed folders with Powershell&lt;/a&gt; to make it into a scriptas it was &lt;em&gt;"but it wasn't exactly 100% usable out of the box".&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;The only thing that needed changing is the extension (MSH to PS1) and it works,&lt;br /&gt;only this script was made to create / load the function :&lt;br /&gt;&lt;br /&gt;. c:\powershell\fuctions\out-zip.ps1&lt;br /&gt;&lt;br /&gt;note the [dot][space] before the scriptpath, that makes that the function is loaded into the $global scope, otherwise it is gone again after the script ends.&lt;br /&gt;It is gone also if you close the PowerShell console but I load this in my profile to keep it handy.&lt;br /&gt;As I mostly test by pasting code into the console most of my examples are like this, so you can just past them in from my blog to test.&lt;br /&gt;&lt;br /&gt;So it both handy out-of-the box I think but in an other way and / or a different purpose.&lt;br /&gt;it's good to compare the 2 scripts to see wat I mean.&lt;br /&gt;In this case I also did choose to switch to a scriptfile to run and let it call internal functions.&lt;br /&gt;for some more info and another example see also : &lt;a href="http://mow001.blogspot.com/2006/04/powershell-ad-site-finder.html"&gt;PowerShell AD site Finder&lt;/a&gt; this script has the same form, also the switch parameter and byRef I discuss there.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For the setting "User can not change password" I did not yet discuss that in Part 3 about setting the special properties, this is actualy a ACL on the directoryentry and you can not set it using ADSI, only with the NT provider.&lt;br /&gt;You can not use the WinNT provider with a DirectoryEntry Object, but there are some workarounds see also : &lt;a class="bl_itemtitle" title="Site: del.icio.us/tag/powershell" href="http://mow001.blogspot.com/2006/04/access-adsi-winnt-provider-from-monad.html" target="_blank"&gt;Access ADSI WinNT provider from Monad Part 2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You see there are 2 workarounds,&lt;br /&gt;The First I found was inline VB.NET code &lt;a href="http://mow001.blogspot.com/2005/10/msh-access-nt-provider.html"&gt;MSH access NT provider&lt;/a&gt;&lt;br /&gt;The second was the Reflection example in part 2,that way, Importing the VisualBasic namespace , I show here :&lt;br /&gt;&lt;br /&gt;&lt;DIV style="FONT-FAMILY: Courier New"&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Setting&amp;nbsp;User&amp;nbsp;can&amp;nbsp;not&amp;nbsp;change&amp;nbsp;password&amp;nbsp;with&amp;nbsp;NT&amp;nbsp;provider&amp;nbsp;using&amp;nbsp;the&amp;nbsp;VisualBasic&amp;nbsp;namespace&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;[System.Reflection.Assembly]::LoadWithPartialName(&lt;SPAN style="COLOR: maroon"&gt;'microsoft.visualbasic'&lt;/SPAN&gt;) &lt;BR&gt;&lt;BR&gt;$winNT&amp;nbsp;=&amp;nbsp;[microsoft.visualbasic.interaction]::GetObject(&lt;SPAN style="COLOR: maroon"&gt;"WinNT://mow/mow"&lt;/SPAN&gt;,$&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;) &lt;BR&gt;$Type&amp;nbsp;=&amp;nbsp;$winNT.gettype() &lt;BR&gt;$Type.invokemember(&lt;SPAN style="COLOR: maroon"&gt;"userFlags"&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;'GetProperty'&lt;/SPAN&gt;,$&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;,$winNT,$&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;)&amp;nbsp;-band&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;0x40&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;$new&amp;nbsp;=&amp;nbsp;$Type.invokemember(&lt;SPAN style="COLOR: maroon"&gt;"userFlags"&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;'GetProperty'&lt;/SPAN&gt;,$&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;,$winNT,$&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;)&amp;nbsp;-bor&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;0x40&lt;/SPAN&gt; &lt;BR&gt;$Type.invokemember(&lt;SPAN style="COLOR: maroon"&gt;"userFlags"&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;'SetProperty'&lt;/SPAN&gt;,$&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;,$winNT,$new) &lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Save&amp;nbsp;the&amp;nbsp;changes&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;$Type.invokemember(&lt;SPAN style="COLOR: maroon"&gt;"setinfo"&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;'invokemethod'&lt;/SPAN&gt;,$&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;,$winNT,$&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;)&lt;/DIV&gt;&lt;br /&gt;&lt;br /&gt;But as it is actualy an ACL on the directory object we can also change the security on the User object ourself, see for more information here : &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adsi/adsi/user_cannot_change_password.asp"&gt;MDSN User Cannot Change Password (LDAP Provider)&lt;/a&gt; (Be sure to follow the links to the different examples )&lt;br /&gt;for a VbScript see example : &lt;a href="http://www.rlmueller.net/Cannot%20Change%20PW.htm"&gt;HilltopLabs : cannot Change Password&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This looks very difficult and big scripts are needed, but we have powershell ;-)&lt;br /&gt;So this looks like this in the script :&lt;br /&gt;&lt;br /&gt;&lt;DIV style="FONT-FAMILY: Courier New"&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Set&amp;nbsp;User&amp;nbsp;Cannot&amp;nbsp;Change&amp;nbsp;Password&amp;nbsp;Property&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;&amp;nbsp;($_.CantChangePassword)&amp;nbsp;{ &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$everyOne&amp;nbsp;=&amp;nbsp;[System.Security.Principal.SecurityIdentifier]&lt;SPAN style="COLOR: maroon"&gt;'S-1-1-0'&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$EveryoneDeny&amp;nbsp;=&amp;nbsp;new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;System.DirectoryServices.ActiveDirectoryAccessRule&amp;nbsp;($Everyone,&lt;SPAN style="COLOR: maroon"&gt;'ExtendedRight'&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;'Deny'&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;'ab721a53-1e2f-11d0-9819-00aa0040529b'&lt;/SPAN&gt;) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$self&amp;nbsp;=&amp;nbsp;[System.Security.Principal.SecurityIdentifier]&lt;SPAN style="COLOR: maroon"&gt;'S-1-5-10'&lt;/SPAN&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$SelfDeny&amp;nbsp;=&amp;nbsp;new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;System.DirectoryServices.ActiveDirectoryAccessRule&amp;nbsp;($self,&lt;SPAN style="COLOR: maroon"&gt;'ExtendedRight'&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;'Deny'&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;'ab721a53-1e2f-11d0-9819-00aa0040529b'&lt;/SPAN&gt;) &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$newUser.get_ObjectSecurity().AddAccessRule($selfDeny) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$newUser.get_ObjectSecurity().AddAccessRule($EveryoneDeny) &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$newUser.CommitChanges() &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;/DIV&gt;&lt;br /&gt;&lt;br /&gt;Not to Bad right, but note that the other examples do some more checking and can set it back also, as we create new users here we do not need all this.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;strong&gt;*Edit*&lt;/strong&gt; I decided this subject was important enough to get his own blogentry and found back some old material from when I did not have internet I did not post yet, so I will post that material here and will continue the script in next post.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;In the samples below you can also see how to explore the AD security from the commandline and also to check the current ACL's and remove the Access denied rules.&lt;br /&gt;you can see that it is also very easy, also I will discuss the User must change password at next logon property in this examples, setting pwdLastset to -1 or 0 &lt;br /&gt;will switch that (it can not be set in combination the the User can not change password)&lt;br /&gt;&lt;br /&gt;&lt;DIV style="FONT-FAMILY: Courier New"&gt;&lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Remove&amp;nbsp;Access&amp;nbsp;denied&amp;nbsp;from&amp;nbsp;commandline&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;$mow.get_ObjectSecurity().GetAccessRules($&lt;SPAN style="COLOR: maroon"&gt;true&lt;/SPAN&gt;,$&lt;SPAN style="COLOR: maroon"&gt;false&lt;/SPAN&gt;,&amp;nbsp;[System.Security.Principal.SecurityIdentifier]&amp;nbsp;) &lt;BR&gt;&lt;BR&gt;$mow.get_ObjectSecurity().GetAccessRules($&lt;SPAN style="COLOR: maroon"&gt;true&lt;/SPAN&gt;,$&lt;SPAN style="COLOR: maroon"&gt;false&lt;/SPAN&gt;,&amp;nbsp;[System.Security.Principal.NTAccount])&amp;nbsp;|?&amp;nbsp;{$_.ObjectType&amp;nbsp;-eq&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;'ab721a53-1e2f-11d0-9819-00aa0040529b'&lt;/SPAN&gt;} &lt;BR&gt;$mr&amp;nbsp;=&amp;nbsp;$mow.get_ObjectSecurity().GetAccessRules($&lt;SPAN style="COLOR: maroon"&gt;true&lt;/SPAN&gt;,$&lt;SPAN style="COLOR: maroon"&gt;false&lt;/SPAN&gt;,&amp;nbsp;[System.Security.Principal.NTAccount])&amp;nbsp;|?&amp;nbsp;{$_.ObjectType&amp;nbsp;-eq&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;'ab721a53-1e2f-11d0-9819-00aa0040529b'&lt;/SPAN&gt;}&amp;nbsp;|?&amp;nbsp;{$_.AccessControlType&amp;nbsp;-eq&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;'Deny'&lt;/SPAN&gt;} &lt;BR&gt;&lt;BR&gt;$mow.get_ObjectSecurity().RemoveAccessRule($mr[&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&gt;]) &lt;BR&gt;&lt;BR&gt;$mow.get_ObjectSecurity().RemoveAccessRule($mr[&lt;SPAN style="COLOR: maroon"&gt;1&lt;/SPAN&gt;]) &lt;BR&gt;&lt;BR&gt;$mow.CommitChanges() &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;########################################&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&lt;BR&gt;PoSH&amp;gt;$mr[&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&gt;].IdentityReference&amp;nbsp;|&amp;nbsp;gm &lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;TypeName:&amp;nbsp;System.Security.Principal.NTAccount &lt;BR&gt;&lt;BR&gt;&lt;BR&gt;[System.Security.Principal.SecurityIdentifier].GetConstructors()&amp;nbsp;|%&amp;nbsp;{&lt;SPAN style="COLOR: maroon"&gt;"$_"&lt;/SPAN&gt;} &lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;##############&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Make&amp;nbsp;SID&amp;nbsp;Objects&amp;nbsp;&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;$everyOne&amp;nbsp;=&amp;nbsp;[System.Security.Principal.SecurityIdentifier]&lt;SPAN style="COLOR: maroon"&gt;'S-1-1-0'&lt;/SPAN&gt; &lt;BR&gt;$self&amp;nbsp;=&amp;nbsp;[System.Security.Principal.SecurityIdentifier]&lt;SPAN style="COLOR: maroon"&gt;'S-1-5-10'&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;you&amp;nbsp;can&amp;nbsp;use&amp;nbsp;NTAccount&amp;nbsp;but&amp;nbsp;thats&amp;nbsp;localized&amp;nbsp;&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;translate&amp;nbsp;&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;PoSH&amp;gt;$self.Translate(&amp;nbsp;[System.Security.Principal.NTAccount]) &lt;BR&gt;&lt;BR&gt;Value &lt;BR&gt;----- &lt;BR&gt;NT&amp;nbsp;AUTHORITY\SELF &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;get&amp;nbsp;the&amp;nbsp;consructors&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;[System.DirectoryServices.ActiveDirectoryAccessRule].GetConstructors()&amp;nbsp;|%&amp;nbsp;{&lt;SPAN style="COLOR: maroon"&gt;"$_"&lt;/SPAN&gt;} &lt;BR&gt;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;we&amp;nbsp;are&amp;nbsp;going&amp;nbsp;to&amp;nbsp;use&amp;nbsp;this&amp;nbsp;one&amp;nbsp;:&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;Void&lt;/SPAN&gt;&amp;nbsp;.ctor(System.Security.Principal.IdentityReference,&amp;nbsp;System.DirectoryServices.ActiveDirectoryRights,&amp;nbsp;System.Security &lt;BR&gt;.AccessControl.AccessControlType,&amp;nbsp;System.Guid) &lt;BR&gt;&lt;BR&gt;new&amp;nbsp;System.DirectoryServices.ActiveDirectoryAccessRule&amp;nbsp;($self,&lt;SPAN style="COLOR: maroon"&gt;'ExtendedRight'&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;'Deny'&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;'ab721a53-1e2f-11d0-9819-00aa0040529b'&lt;/SPAN&gt;) &lt;BR&gt;&lt;BR&gt;ActiveDirectoryRights&amp;nbsp;:&amp;nbsp;ExtendedRight &lt;BR&gt;InheritanceType&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;None &lt;BR&gt;ObjectType&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;ab721a53-&lt;SPAN style="COLOR: maroon"&gt;1&lt;/SPAN&gt;e2f-&lt;SPAN style="COLOR: maroon"&gt;11&lt;/SPAN&gt;d0-&lt;SPAN style="COLOR: maroon"&gt;9819&lt;/SPAN&gt;-&lt;SPAN style="COLOR: maroon"&gt;00&lt;/SPAN&gt;aa0040529b &lt;BR&gt;InheritedObjectType&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;00000000&lt;/SPAN&gt;-&lt;SPAN style="COLOR: maroon"&gt;0000&lt;/SPAN&gt;-&lt;SPAN style="COLOR: maroon"&gt;0000&lt;/SPAN&gt;-&lt;SPAN style="COLOR: maroon"&gt;0000&lt;/SPAN&gt;-&lt;SPAN style="COLOR: maroon"&gt;000000000000&lt;/SPAN&gt; &lt;BR&gt;ObjectFlags&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;ObjectAceTypePresent &lt;BR&gt;AccessControlType&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;Deny &lt;BR&gt;IdentityReference&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;S-&lt;SPAN style="COLOR: maroon"&gt;1&lt;/SPAN&gt;-&lt;SPAN style="COLOR: maroon"&gt;5&lt;/SPAN&gt;-&lt;SPAN style="COLOR: maroon"&gt;10&lt;/SPAN&gt; &lt;BR&gt;IsInherited&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;False &lt;BR&gt;InheritanceFlags&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;None &lt;BR&gt;PropagationFlags&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;None &lt;BR&gt;&lt;BR&gt;&lt;BR&gt;$SelfDeny&amp;nbsp;=&amp;nbsp;new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;System.DirectoryServices.ActiveDirectoryAccessRule&amp;nbsp;($self,&lt;SPAN style="COLOR: maroon"&gt;'ExtendedRight'&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;'Deny'&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;'ab721a53-1e2f-11d0-9819-00aa0040529b'&lt;/SPAN&gt;) &lt;BR&gt;$SelfAllow&amp;nbsp;=&amp;nbsp;new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;System.DirectoryServices.ActiveDirectoryAccessRule&amp;nbsp;($self,&lt;SPAN style="COLOR: maroon"&gt;'ExtendedRight'&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;'Allow'&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;'ab721a53-1e2f-11d0-9819-00aa0040529b'&lt;/SPAN&gt;) &lt;BR&gt;$EveryoneDeny&amp;nbsp;=&amp;nbsp;new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;System.DirectoryServices.ActiveDirectoryAccessRule&amp;nbsp;($Everyone,&lt;SPAN style="COLOR: maroon"&gt;'ExtendedRight'&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;'Deny'&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;'ab721a53-1e2f-11d0-9819-00aa0040529b'&lt;/SPAN&gt;) &lt;BR&gt;$EveryOneAllow&amp;nbsp;=&amp;nbsp;new-&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt;&amp;nbsp;System.DirectoryServices.ActiveDirectoryAccessRule&amp;nbsp;($Everyone,&lt;SPAN style="COLOR: maroon"&gt;'ExtendedRight'&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;'Allow'&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;'ab721a53-1e2f-11d0-9819-00aa0040529b'&lt;/SPAN&gt;) &lt;BR&gt;&lt;BR&gt;$mow.get_ObjectSecurity().AddAccessRule($selfDeny) &lt;BR&gt;$mow.get_ObjectSecurity().AddAccessRule($EveryoneDeny) &lt;BR&gt;&lt;BR&gt;$mow.CommitChanges() &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#########################################&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Setting&amp;nbsp;User&amp;nbsp;must&amp;nbsp;change&amp;nbsp;password&amp;nbsp;at&amp;nbsp;next&amp;nbsp;Logon&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;$user.pwdLastSet&amp;nbsp;=&amp;nbsp;-&lt;SPAN style="COLOR: maroon"&gt;1&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Reading&amp;nbsp;password&amp;nbsp;last&amp;nbsp;set&amp;nbsp;value&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;$ds&amp;nbsp;=&amp;nbsp;New-&lt;SPAN style="COLOR: blue"&gt;Object&lt;/SPAN&gt;&amp;nbsp;directoryservices.directorysearcher($user) &lt;BR&gt;&lt;BR&gt;MowPS&amp;gt;[datetime]::fromfiletime(($ds.findone().properties.pwdlastset)[&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&gt;]) &lt;BR&gt;&lt;BR&gt;Monday,&amp;nbsp;July&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;17&lt;/SPAN&gt;,&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;2006&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;5&lt;/SPAN&gt;:&lt;SPAN style="COLOR: maroon"&gt;07&lt;/SPAN&gt;:&lt;SPAN style="COLOR: maroon"&gt;05&lt;/SPAN&gt;&amp;nbsp;PM &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;Un-setting&amp;nbsp;user&amp;nbsp;must&amp;nbsp;chage&amp;nbsp;password&amp;nbsp;at&amp;nbsp;next&amp;nbsp;logon&lt;/SPAN&gt; &lt;BR&gt;$user.pwdLastSet&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;MowPS&amp;gt;$user.InvokeGet(&lt;SPAN style="COLOR: maroon"&gt;'PasswordLastChanged'&lt;/SPAN&gt;) &lt;BR&gt;&lt;BR&gt;*************************** &lt;BR&gt;&lt;BR&gt;MowPS&amp;gt;[datetime]::fromfiletime(($ds.findone().properties.pwdlastset)[&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&gt;])&lt;/DIV&gt;&lt;br /&gt;&lt;br /&gt;Next post I will go on with the script, but I'm still a bit thinging about it and as said did think the ACL material was worth a own "extra" part in this series.&lt;br /&gt;&lt;br /&gt;Enjoy,&lt;br /&gt;&lt;br /&gt;Greetings /\/\o\/\/&lt;br /&gt;Tags : &lt;a href="http://technorati.com/tag/Monad" rel="tag"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/msh" rel="tag"&gt;msh&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell" rel="tag"&gt;PowerShell&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-115533175454526876?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/115533175454526876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=115533175454526876' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115533175454526876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115533175454526876'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/08/powershell-and-active-directory-part-8.html' title='PowerShell and Active Directory Part 8 (ACL&apos;s)'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-115515687236693636</id><published>2006-08-09T22:47:00.000+02:00</published><updated>2006-08-09T22:54:33.110+02:00</updated><title type='text'>Signing PowerShell Scripts</title><content type='html'>&lt;p&gt;Scott Hanselmann, posted an excelent &lt;a class="bl_itemtitle" title="Site: Scott Hanselman's Computer Zen" href="http://www.hanselman.com/blog/SigningPowerShellScripts.aspx" target="_blank"&gt;Signing PowerShell Scripts&lt;/a&gt; tutorial,&lt;/p&gt;&lt;p&gt;after the bogus "powershell worm" (next is the virusscanner removing xcopy as a virus ;-))&lt;/p&gt;&lt;p&gt;&lt;em&gt;for more info see &lt;/em&gt;&lt;a class="bl_itemtitle" title="Site: Windows PowerShell" href="http://blogs.msdn.com/powershell/archive/2006/08/03/687838.aspx" target="_blank"&gt;&lt;em&gt;Windows PowerShell and the “PowerShell Worm”&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;this is a great tutorial about the security features of powershell.&lt;/p&gt;&lt;p&gt;enjoy,&lt;/p&gt;&lt;p&gt;greetings /\/\o\/\/&lt;/p&gt;&lt;p&gt;Tags : &lt;a href="http://technorati.com/tag/Monad" rel="tag"&gt;Monad&lt;/a&gt; &lt;a href="http://technorati.com/tag/msh" rel="tag"&gt;msh&lt;/a&gt; &lt;a href="http://technorati.com/tag/PowerShell" rel="tag"&gt;PowerShell&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18074818-115515687236693636?l=mow001.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mow001.blogspot.com/feeds/115515687236693636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18074818&amp;postID=115515687236693636' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115515687236693636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18074818/posts/default/115515687236693636'/><link rel='alternate' type='text/html' href='http://mow001.blogspot.com/2006/08/signing-powershell-scripts.html' title='Signing PowerShell Scripts'/><author><name>/\/\o\/\/</name><uri>http://www.blogger.com/profile/03539433998729829679</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18074818.post-115515029888901677</id><published>2006-08-09T21:04:00.000+02:00</published><updated>2006-09-27T23:34:01.440+02:00</updated><title type='text'>PowerShell and Active Directory Part 7</title><content type='html'>&lt;p&gt;&lt;em&gt;&lt;strong&gt;*Warning*&lt;/strong&gt; As you have RC2 Installed all my AD posts will not work anymore, it is verry confusing, but fixable&amp;nbsp;if you read explaination here &lt;a href="http://mow001.blogspot.com/2006/09/powershell-rc2-and-active-directory.html"&gt;PowerShell RC2 and Active Directory &lt;/a&gt;: &lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;As I did switch back on all my work PC's (I did call all my colleagues not to upgrade as all our AD tools are messed up, I will not update them, as I would not recommend to upgrade to RC2 of you work with AD a lot.&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;In this seventh part of this AD series, we will expand the filter a little,but first we need to provide the properties,so we need to fill the CSV file a bit more with the fields needed.&lt;br /&gt;You can just start-up excel to edit it but here I will use some more powershell onliners to fill them from the results of the export I did of some of the users I created from the adventureworks sample DB for my demosetup and did export in in &lt;a href="http://mow001.blogspot.com/2006/08/powershell-and-active-directory-part-5.html"&gt;PowerShell and Active Directory Part 5 &lt;/a&gt;, I did place get content to show what the current content is and will go on from there, using the onliners on the commandline to fill them, but you can also use the Ken Meyer user we created also in that post with the MMC and exported that onle is allready complete(for now). for more about CSV handling see &lt;a href="http://mow001.blogspot.com/2006/04/more-monad-scripts-and-bit-more-csv.html"&gt;more Monad scripts, and a bit more CSV&lt;/a&gt; and the links there for my CSV series.&lt;br /&gt;&lt;br /&gt;&lt;DIV style="FONT-FAMILY: Courier New"&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;use&amp;nbsp;invoke-item&amp;nbsp;(ii)&amp;nbsp;to&amp;nbsp;invoke&amp;nbsp;Excel&amp;nbsp;to&amp;nbsp;edit&amp;nbsp;&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;PoSH&amp;gt;ii&amp;nbsp;modUsers.csv &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;the&amp;nbsp;file&amp;nbsp;with&amp;nbsp;six&amp;nbsp;test&amp;nbsp;users&amp;nbsp;i&amp;nbsp;have&amp;nbsp;now&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;PoSH&amp;gt;cat&amp;nbsp;modUsers.csv &lt;BR&gt;Name,displayName,Description,Room,Telephone,FirstName,Initials,LastName,Department,Company,HomeDir,HomeDrive,LogonScript,Accountname,Mai &lt;BR&gt;&lt;BR&gt;l,OU &lt;BR&gt;NewUser0003,&lt;SPAN style="COLOR: maroon"&gt;"Roberto&amp;nbsp;&amp;nbsp;Tamburello"&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;"Engineering&amp;nbsp;-&amp;nbsp;Roberto&amp;nbsp;&amp;nbsp;Tamburello"&lt;/SPAN&gt;,,,Roberto,,Tamburello,Engineering,,,,,,, &lt;BR&gt;NewUser0009,&lt;SPAN style="COLOR: maroon"&gt;"Gail&amp;nbsp;A&amp;nbsp;Erickson"&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;"Engineering&amp;nbsp;-&amp;nbsp;Gail&amp;nbsp;A&amp;nbsp;Erickson"&lt;/SPAN&gt;,,,Gail,,Erickson,Engineering,,,,,,, &lt;BR&gt;NewUser0011,&lt;SPAN style="COLOR: maroon"&gt;"Jossef&amp;nbsp;H&amp;nbsp;Goldberg"&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;"Engineering&amp;nbsp;-&amp;nbsp;Jossef&amp;nbsp;H&amp;nbsp;Goldberg"&lt;/SPAN&gt;,,,Jossef,,Goldberg,Engineering,,,,,,, &lt;BR&gt;NewUser0012,&lt;SPAN style="COLOR: maroon"&gt;"Terri&amp;nbsp;Lee&amp;nbsp;Duffy"&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;"Engineering&amp;nbsp;-&amp;nbsp;Terri&amp;nbsp;Lee&amp;nbsp;Duffy"&lt;/SPAN&gt;,,,Terri,,Duffy,Engineering,,,,,,, &lt;BR&gt;NewUser0267,&lt;SPAN style="COLOR: maroon"&gt;"Michael&amp;nbsp;I&amp;nbsp;Sullivan"&lt;/SPAN&gt;,&lt;SPAN style="COLOR: maroon"&gt;"Engineering&amp;nbsp;-&amp;nbsp;Michael&amp;nbsp;I&amp;nbsp;Sullivan"&lt;/SPAN&gt;,,,Michael,,Sullivan,Engineering,,,,,,, &lt;BR&gt;NewUser0270,&lt;SPAN style="COLOR: maroon"&gt;"Sharon&amp;nbsp;B&amp;nbsp;Salavaria"&lt;/SPAN&gt;,"Engineering&amp;nbsp;-&amp;nbsp;Sharon&amp;nbsp;B&amp;nbsp; &lt;BR&gt;&lt;BR&gt;Salavaria&lt;SPAN style="COLOR: maroon"&gt;",,,Sharon,,Salavaria,Engineering,,,,,,,"&lt;/SPAN&gt;OU=MowOtherOU,DC=mow,DC=local" &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;set&amp;nbsp;some&amp;nbsp;properties&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;PoSH&amp;gt;$newusers&amp;nbsp;|%&amp;nbsp;{$_.HomeDir&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"H:"&lt;/SPAN&gt;} &lt;BR&gt;PoSH&amp;gt;$newusers&amp;nbsp;|%&amp;nbsp;{$_.Company&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"PoSH&amp;nbsp;works"&lt;/SPAN&gt;} &lt;BR&gt;PoSH&amp;gt;$newusers&amp;nbsp;|%&amp;nbsp;{$_.LogonScript&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"Logon.cmd"&lt;/SPAN&gt;} &lt;BR&gt;PoSH&amp;gt;$newusers&amp;nbsp;|%&amp;nbsp;{$_.HomeDrive&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"H:"&lt;/SPAN&gt;} &lt;BR&gt;PoSH&amp;gt;$newusers&amp;nbsp;|%&amp;nbsp;{$_.HomeDir&amp;nbsp;=&amp;nbsp;&lt;SPAN style="COLOR: maroon"&gt;"\\mowdc001\home$\$($_.name)"&lt;/SPAN&gt;} &lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR: green"&gt;#&amp;nbsp;show&amp;nbsp;first&amp;nbsp;user&lt;/SPAN&gt; &lt;BR&gt;&lt;BR&gt;PoSH&amp;gt;$newusers[&lt;SPAN style="COLOR: maroon"&gt;0&lt;/SPAN&gt;]
