<?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-6295138065817477735</id><updated>2011-11-28T01:08:03.689+01:00</updated><category term='WSUS'/><category term='MBSA'/><category term='Powershell'/><title type='text'>The Admin Guy's SandBox</title><subtitle type='html'>Random thoughts from the system administrator</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://theadminguy.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6295138065817477735/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://theadminguy.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>The Admin Guy</name><uri>http://www.blogger.com/profile/03648335659283707124</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>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6295138065817477735.post-4027807757176507159</id><published>2009-05-16T16:15:00.001+02:00</published><updated>2009-05-16T16:46:25.086+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Powershell'/><title type='text'>Portscan with Powershell</title><content type='html'>&lt;p&gt;So I found myself in need of a tool which could check whether or not one or more ports are open on a large amount of servers.    &lt;br /&gt;I ended up with this in powershell:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;font color="blue"&gt;param&lt;/font&gt;&lt;font color="black"&gt;([&lt;/font&gt;&lt;font color="teal"&gt;string&lt;/font&gt;&lt;font color="black"&gt;]&lt;/font&gt;&lt;font color="purple"&gt;$list1&lt;/font&gt;&lt;font color="black"&gt;,[&lt;/font&gt;&lt;font color="teal"&gt;string&lt;/font&gt;&lt;font color="black"&gt;]&lt;/font&gt;&lt;font color="purple"&gt;$list2&lt;/font&gt;&lt;font color="black"&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;if &lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="purple"&gt;$list1 &lt;/font&gt;&lt;font color="red"&gt;-eq &lt;/font&gt;&lt;font color="maroon"&gt;&amp;quot;&amp;quot;&lt;/font&gt;&lt;font color="black"&gt;){&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/font&gt;&lt;font color="#5f9ea0"&gt;Write-Host &lt;/font&gt;&lt;font color="maroon"&gt;&amp;quot;Please supply Host-list!!&amp;quot; &lt;/font&gt;&lt;font color="#5f9ea0"&gt;-ForegroundColor &lt;/font&gt;&lt;font color="maroon"&gt;Red&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/font&gt;&lt;font color="blue"&gt;break&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/font&gt;&lt;font color="black"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;If &lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="purple"&gt;$list2 &lt;/font&gt;&lt;font color="red"&gt;-eq &lt;/font&gt;&lt;font color="maroon"&gt;&amp;quot;&amp;quot;&lt;/font&gt;&lt;font color="black"&gt;){&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/font&gt;&lt;font color="#5f9ea0"&gt;Write-Host &lt;/font&gt;&lt;font color="maroon"&gt;&amp;quot;Please supply Port-List!!&amp;quot; &lt;/font&gt;&lt;font color="#5f9ea0"&gt;-ForegroundColor &lt;/font&gt;&lt;font color="maroon"&gt;Red&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/font&gt;&lt;font color="blue"&gt;break&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/font&gt;&lt;font color="black"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[&lt;/font&gt;&lt;font color="teal"&gt;Array&lt;/font&gt;&lt;font color="black"&gt;]&lt;/font&gt;&lt;font color="purple"&gt;$hostlist &lt;/font&gt;&lt;font color="red"&gt;= &lt;/font&gt;&lt;font color="#5f9ea0"&gt;Get-Content &lt;/font&gt;&lt;font color="purple"&gt;$list1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;[&lt;/font&gt;&lt;font color="teal"&gt;Array&lt;/font&gt;&lt;font color="black"&gt;]&lt;/font&gt;&lt;font color="purple"&gt;$ports &lt;/font&gt;&lt;font color="red"&gt;= &lt;/font&gt;&lt;font color="#5f9ea0"&gt;Get-Content &lt;/font&gt;&lt;font color="purple"&gt;$list2&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="navy"&gt;$ErrorActionPreference &lt;/font&gt;&lt;font color="red"&gt;= &lt;/font&gt;&lt;font color="maroon"&gt;&amp;quot;SilentlyContinue&amp;quot;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="purple"&gt;$ping &lt;/font&gt;&lt;font color="red"&gt;= &lt;/font&gt;&lt;font color="#5f9ea0"&gt;new-object &lt;/font&gt;&lt;font color="maroon"&gt;System.Net.NetworkInformation.Ping&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;foreach &lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="purple"&gt;$ip &lt;/font&gt;&lt;font color="blue"&gt;in &lt;/font&gt;&lt;font color="purple"&gt;$hostlist&lt;/font&gt;&lt;font color="black"&gt;) {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/font&gt;&lt;font color="purple"&gt;$rslt &lt;/font&gt;&lt;font color="red"&gt;= &lt;/font&gt;&lt;font color="purple"&gt;$ping&lt;/font&gt;&lt;font color="black"&gt;.send(&lt;/font&gt;&lt;font color="purple"&gt;$ip&lt;/font&gt;&lt;font color="black"&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/font&gt;&lt;font color="blue"&gt;if &lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="red"&gt;! &lt;/font&gt;&lt;font color="navy"&gt;$?&lt;/font&gt;&lt;font color="black"&gt;){&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/font&gt;&lt;font color="#5f9ea0"&gt;Write-Host &lt;/font&gt;&lt;font color="maroon"&gt;&amp;quot;Host: $ip - not found&amp;quot; &lt;/font&gt;&lt;font color="#5f9ea0"&gt;-ForegroundColor &lt;/font&gt;&lt;font color="maroon"&gt;Red&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/font&gt;&lt;font color="black"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/font&gt;&lt;font color="blue"&gt;else &lt;/font&gt;&lt;font color="black"&gt;{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/font&gt;&lt;font color="blue"&gt;if &lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="purple"&gt;$rslt&lt;/font&gt;&lt;font color="black"&gt;.status.tostring() –eq &lt;/font&gt;&lt;font color="maroon"&gt;“Success”&lt;/font&gt;&lt;font color="black"&gt;) {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;            &lt;/font&gt;&lt;font color="#5f9ea0"&gt;write-host &lt;/font&gt;&lt;font color="maroon"&gt;&amp;quot;Host: $ip - Ports: &amp;quot; &lt;/font&gt;&lt;font color="#5f9ea0"&gt;-foregroundColor &lt;/font&gt;&lt;font color="maroon"&gt;Green &lt;/font&gt;&lt;font color="#5f9ea0"&gt;-NoNewline&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;            &lt;/font&gt;&lt;font color="blue"&gt;foreach &lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="purple"&gt;$port &lt;/font&gt;&lt;font color="blue"&gt;in &lt;/font&gt;&lt;font color="purple"&gt;$ports&lt;/font&gt;&lt;font color="black"&gt;){&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                &lt;/font&gt;&lt;font color="purple"&gt;$socket &lt;/font&gt;&lt;font color="red"&gt;= &lt;/font&gt;&lt;font color="#5f9ea0"&gt;new-object &lt;/font&gt;&lt;font color="maroon"&gt;System.Net.Sockets.TcpClient&lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="purple"&gt;$ip&lt;/font&gt;&lt;font color="black"&gt;, &lt;/font&gt;&lt;font color="purple"&gt;$port&lt;/font&gt;&lt;font color="black"&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                &lt;/font&gt;&lt;font color="blue"&gt;if &lt;/font&gt;&lt;font color="black"&gt;(&lt;/font&gt;&lt;font color="purple"&gt;$socket &lt;/font&gt;&lt;font color="black"&gt;–eq &lt;/font&gt;&lt;font color="purple"&gt;$null&lt;/font&gt;&lt;font color="black"&gt;) {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                    &lt;/font&gt;&lt;font color="#5f9ea0"&gt;write-host &lt;/font&gt;&lt;font color="maroon"&gt;&amp;quot;$port,&amp;quot; &lt;/font&gt;&lt;font color="#5f9ea0"&gt;-ForegroundColor &lt;/font&gt;&lt;font color="maroon"&gt;Red &lt;/font&gt;&lt;font color="#5f9ea0"&gt;-NoNewline&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                &lt;/font&gt;&lt;font color="black"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                &lt;/font&gt;&lt;font color="blue"&gt;else &lt;/font&gt;&lt;font color="black"&gt;{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                    &lt;/font&gt;&lt;font color="#5f9ea0"&gt;write-host &lt;/font&gt;&lt;font color="maroon"&gt;&amp;quot;$port,&amp;quot;&lt;/font&gt;&lt;font color="#5f9ea0"&gt;-foregroundcolor &lt;/font&gt;&lt;font color="maroon"&gt;Green &lt;/font&gt;&lt;font color="#5f9ea0"&gt;-NoNewline&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                    &lt;/font&gt;&lt;font color="purple"&gt;$socket &lt;/font&gt;&lt;font color="red"&gt;= &lt;/font&gt;&lt;font color="purple"&gt;$null&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                &lt;/font&gt;&lt;font color="black"&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;/font&gt;&lt;font color="blue"&gt;else &lt;/font&gt;&lt;font color="black"&gt;{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;            &lt;/font&gt;&lt;font color="#5f9ea0"&gt;write-host &lt;/font&gt;&lt;font color="maroon"&gt;&amp;quot;Host: $ip - down&amp;quot; &lt;/font&gt;&lt;font color="#5f9ea0"&gt;-ForegroundColor &lt;/font&gt;&lt;font color="maroon"&gt;Red&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/font&gt;&lt;font color="black"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="#5f9ea0"&gt;Write-Host &lt;/font&gt;&lt;font color="maroon"&gt;&amp;quot;&amp;quot;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="purple"&gt;$ping &lt;/font&gt;&lt;font color="red"&gt;= &lt;/font&gt;&lt;font color="purple"&gt;$null&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The script is executed in the following manner:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;[ ] PS&amp;gt; .\script.ps1 hostlist.txt portlist.txt&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In this version, the output of the script is not suited to be piped to a file, as port status is indicated with color.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6295138065817477735-4027807757176507159?l=theadminguy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theadminguy.blogspot.com/feeds/4027807757176507159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://theadminguy.blogspot.com/2009/05/portscan-with-powershell.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6295138065817477735/posts/default/4027807757176507159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6295138065817477735/posts/default/4027807757176507159'/><link rel='alternate' type='text/html' href='http://theadminguy.blogspot.com/2009/05/portscan-with-powershell.html' title='Portscan with Powershell'/><author><name>The Admin Guy</name><uri>http://www.blogger.com/profile/03648335659283707124</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-6295138065817477735.post-5796036432365274468</id><published>2009-05-16T16:13:00.002+02:00</published><updated>2009-05-16T16:51:39.695+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Powershell'/><category scheme='http://www.blogger.com/atom/ns#' term='MBSA'/><category scheme='http://www.blogger.com/atom/ns#' term='WSUS'/><title type='text'>Run MBSA against all machines in WSUS</title><content type='html'>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;As a WSUS administrator, I often find the various views and reports frustrating. &lt;/p&gt;  &lt;p&gt;Say you have a number of machines, which you want to see the status of from a OS security perspective, but you are not interested in the various other MS products (office, Exchange etc.) – No joy. &lt;/p&gt;  &lt;p&gt;WSUS will show the machines overall status including &lt;em&gt;everything&lt;/em&gt;. Handing report based on that, over to others will surely guarantee that all sorts of time will have to spent explaining all sorts of stuff.&lt;/p&gt;  &lt;p&gt;Now, I’m sure that some may say that all the information can be gathered from the SQL database in one form or another, in that case, please let me know &lt;img alt=":-)" src="http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif" /&gt;&lt;/p&gt;  &lt;p&gt;From another perspective, the WSUS also acts like a good database of machines in scope. It provides various key information about the environment, which can surely be used for something..&lt;/p&gt;  &lt;p&gt;The result of the above was a powershell script to get all the machines in WSUS and perform an MBSA scan against all of them.&lt;/p&gt;  &lt;p&gt;The MBSA scan’s have the nice, self-explanatory reports and as a bonus they are also able to check for other things than patch status.&lt;/p&gt;  &lt;p&gt;The script: &lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: green"&gt;#We need a date to append to the log files&lt;br /&gt;&lt;/span&gt;&lt;span style="color: purple"&gt;$date &lt;/span&gt;&lt;span style="color: red"&gt;= &lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;Get-Date&lt;/span&gt;&lt;span style="color: black"&gt;).toshortdatestring()&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green"&gt;#Connect to WSUS, if needed load assembly&lt;br /&gt;&lt;/span&gt;&lt;span style="color: purple"&gt;$wsusrv &lt;/span&gt;&lt;span style="color: red"&gt;= &lt;/span&gt;&lt;span style="color: black"&gt;[Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer()&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;If &lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;! &lt;/span&gt;&lt;span style="color: navy"&gt;$?&lt;/span&gt;&lt;span style="color: black"&gt;){&lt;br /&gt;    [&lt;/span&gt;&lt;span style="color: teal"&gt;Reflection.Assembly&lt;/span&gt;&lt;span style="color: black"&gt;]::&lt;/span&gt;&lt;span style="color: #8b4513"&gt;LoadWithPartialName&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: maroon"&gt;&amp;quot;Microsoft.UpdateServices.Administration&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: purple"&gt;$wsusrv &lt;/span&gt;&lt;span style="color: red"&gt;= &lt;/span&gt;&lt;span style="color: black"&gt;[Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer()&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;&lt;/span&gt;&lt;span style="color: green"&gt;#Get all machines in WSUS&lt;br /&gt;&lt;/span&gt;&lt;span style="color: purple"&gt;$wsusrv&lt;/span&gt;&lt;span style="color: black"&gt;.getcomputertargets() | &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;select &lt;/span&gt;&lt;span style="color: maroon"&gt;FullDomainName&lt;/span&gt;&lt;span style="color: black"&gt;,&lt;/span&gt;&lt;span style="color: maroon"&gt;IPAddress&lt;/span&gt;&lt;span style="color: black"&gt;,&lt;/span&gt;&lt;span style="color: maroon"&gt;RequestedTargetGroupName &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;`&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: black"&gt;| &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;tee -Variable &lt;/span&gt;&lt;span style="color: maroon"&gt;wsustargets &lt;/span&gt;&lt;span style="color: black"&gt;| &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;Export-Csv -NoTypeInformation &lt;/span&gt;&lt;span style="color: maroon"&gt;&amp;quot;$pwd\WSUSTargets-$date.csv&amp;quot;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green"&gt;#Part to remove certain machines which we cannot scan &lt;br /&gt;#(like machines with different permissions than the bulk)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;foreach &lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: purple"&gt;$target &lt;/span&gt;&lt;span style="color: blue"&gt;in &lt;/span&gt;&lt;span style="color: purple"&gt;$wsustargets&lt;/span&gt;&lt;span style="color: black"&gt;){&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;if &lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: purple"&gt;$target&lt;/span&gt;&lt;span style="color: black"&gt;.RequestedTargetGroupName &lt;/span&gt;&lt;span style="color: red"&gt;-eq &lt;/span&gt;&lt;span style="color: maroon"&gt;&amp;quot;SomeFolder&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;){&lt;br /&gt;        }&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;ElseIf &lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: purple"&gt;$target&lt;/span&gt;&lt;span style="color: black"&gt;.RequestedTargetGroupName &lt;/span&gt;&lt;span style="color: red"&gt;-like &lt;/span&gt;&lt;span style="color: maroon"&gt;&amp;quot;*SomeOtherFolder*&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;){&lt;br /&gt;        }&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: blue"&gt;Else &lt;/span&gt;&lt;span style="color: black"&gt;{&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: green"&gt;#create array of machines to be scanned&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: black"&gt;[&lt;/span&gt;&lt;span style="color: teal"&gt;Array&lt;/span&gt;&lt;span style="color: black"&gt;]&lt;/span&gt;&lt;span style="color: purple"&gt;$MBSAList &lt;/span&gt;&lt;span style="color: red"&gt;+= &lt;/span&gt;&lt;span style="color: purple"&gt;$target&lt;/span&gt;&lt;span style="color: black"&gt;.IPAddress&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: purple"&gt;$MBSAList &lt;/span&gt;&lt;span style="color: black"&gt;| &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;Out-File &lt;/span&gt;&lt;span style="color: maroon"&gt;&amp;quot;$pwd\MBSATargets-$date.csv&amp;quot;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: black"&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green"&gt;#execute MBSA against the array created. This array must have been loaded to a file&lt;br /&gt;&lt;/span&gt;&lt;span style="color: purple"&gt;$mbsacli &lt;/span&gt;&lt;span style="color: red"&gt;= &lt;/span&gt;&lt;span style="color: maroon"&gt;&amp;quot;C:\Program Files\Microsoft Baseline Security Analyzer 2\mbsacli.exe&amp;quot;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: purple"&gt;$cmdline &lt;/span&gt;&lt;span style="color: red"&gt;= &lt;/span&gt;&lt;span style="color: maroon"&gt;&amp;quot;/listfile &amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;+ &lt;/span&gt;&lt;span style="color: maroon"&gt;'&amp;quot;' &lt;/span&gt;&lt;span style="color: red"&gt;+ &lt;/span&gt;&lt;span style="color: maroon"&gt;&amp;quot;$pwd\MBSATargets-$date.csv&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;+ &lt;/span&gt;&lt;span style="color: maroon"&gt;'&amp;quot;' &lt;/span&gt;&lt;span style="color: red"&gt;+ &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;`&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: maroon"&gt;&amp;quot; /n OS+SQL+IIS+Password /nvc /wa /o &amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;+ &lt;/span&gt;&lt;span style="color: maroon"&gt;'&amp;quot;%d% - %c% - %IP% (%t%)&amp;quot;' &lt;/span&gt;&lt;span style="color: red"&gt;+ &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;`&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: maroon"&gt;&amp;quot; /qe /qr /rd D:\MBSA_scan_auto&amp;quot;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: purple"&gt;$cmdline&lt;br /&gt;$process &lt;/span&gt;&lt;span style="color: red"&gt;= &lt;/span&gt;&lt;span style="color: black"&gt;[&lt;/span&gt;&lt;span style="color: teal"&gt;System.Diagnostics.Process&lt;/span&gt;&lt;span style="color: black"&gt;]::&lt;/span&gt;&lt;span style="color: #8b4513"&gt;Start&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: purple"&gt;$mbsacli&lt;/span&gt;&lt;span style="color: black"&gt;,&lt;/span&gt;&lt;span style="color: purple"&gt;$cmdline&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: purple"&gt;$process&lt;/span&gt;&lt;span style="color: black"&gt;.WaitForExit()&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;  &lt;br /&gt;Now, very off character for me, I have added some comments in the script, but it is fairly straight forward. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;A list of machines is gathered from the WSUS server and stuffed in a file. The MBSAcli.exe utility is then executed using that file. It is of course possible to execute the MBSAcli.exe using the powershell array:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: purple"&gt;$mbsacli &lt;/span&gt;&lt;span style="color: red"&gt;= &lt;/span&gt;&lt;span style="color: maroon"&gt;&amp;quot;C:\Program Files\Microsoft Baseline Security Analyzer 2\mbsacli.exe&amp;quot;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;foreach &lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: purple"&gt;$target &lt;/span&gt;&lt;span style="color: blue"&gt;in &lt;/span&gt;&lt;span style="color: purple"&gt;$MBSAList&lt;/span&gt;&lt;span style="color: black"&gt;){&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: purple"&gt;$cmdline &lt;/span&gt;&lt;span style="color: red"&gt;= &lt;/span&gt;&lt;span style="color: maroon"&gt;&amp;quot;/target $target /n OS+SQL+IIS+Password /nvc /wa /o &amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;+ &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;`&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: maroon"&gt;'&amp;quot;%d% - %c% - %IP% (%t%)&amp;quot;' &lt;/span&gt;&lt;span style="color: red"&gt;+ &lt;/span&gt;&lt;span style="color: maroon"&gt;&amp;quot; /qe /qr /rd D:\MBSA_scan_auto&amp;quot;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: purple"&gt;$process &lt;/span&gt;&lt;span style="color: red"&gt;= &lt;/span&gt;&lt;span style="color: black"&gt;[&lt;/span&gt;&lt;span style="color: teal"&gt;System.Diagnostics.Process&lt;/span&gt;&lt;span style="color: black"&gt;]::&lt;/span&gt;&lt;span style="color: #8b4513"&gt;Start&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: purple"&gt;$mbsacli&lt;/span&gt;&lt;span style="color: black"&gt;,&lt;/span&gt;&lt;span style="color: purple"&gt;$cmdline&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: purple"&gt;$process&lt;/span&gt;&lt;span style="color: black"&gt;.WaitForExit()&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;But the load of MBSA before each scan will lengthen the scan and will consume more resources (it’s not friendly as it is &lt;img alt=":-)" src="http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif" /&gt; ) &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;But of course there will be machines which cannot be scanned for whatever reason. Above I excluded the once I was sure would fail (due to other permissions) , but some machines may be offline, some with special permissions may hide somewhere etc. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;So in order to get an overview of which machines that do not have a report, I did the following script: &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;param&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: purple"&gt;$mbsareportstore &lt;/span&gt;&lt;span style="color: red"&gt;= &lt;/span&gt;&lt;span style="color: maroon"&gt;&amp;quot;SomeFolder&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green"&gt;#Connect to WSUS, if needed load assembly&lt;br /&gt;&lt;/span&gt;&lt;span style="color: purple"&gt;$wsusrv &lt;/span&gt;&lt;span style="color: red"&gt;= &lt;/span&gt;&lt;span style="color: black"&gt;[Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer()&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;If &lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: red"&gt;! &lt;/span&gt;&lt;span style="color: navy"&gt;$?&lt;/span&gt;&lt;span style="color: black"&gt;){&lt;br /&gt;    [&lt;/span&gt;&lt;span style="color: teal"&gt;Reflection.Assembly&lt;/span&gt;&lt;span style="color: black"&gt;]::&lt;/span&gt;&lt;span style="color: #8b4513"&gt;LoadWithPartialName&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: maroon"&gt;&amp;quot;Microsoft.UpdateServices.Administration&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: purple"&gt;$wsusrv &lt;/span&gt;&lt;span style="color: red"&gt;= &lt;/span&gt;&lt;span style="color: black"&gt;[Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer()&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green"&gt;#Get all machines in WSUS&lt;br /&gt;&lt;/span&gt;&lt;span style="color: purple"&gt;$wsusrv&lt;/span&gt;&lt;span style="color: black"&gt;.getcomputertargets() | &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;select &lt;/span&gt;&lt;span style="color: maroon"&gt;FullDomainName&lt;/span&gt;&lt;span style="color: black"&gt;,&lt;/span&gt;&lt;span style="color: maroon"&gt;IPAddress &lt;/span&gt;&lt;span style="color: black"&gt;|&lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;tee -Variable &lt;/span&gt;&lt;span style="color: maroon"&gt;wsustargets &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;`&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: black"&gt;| &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;Export-Csv -NoTypeInformation &lt;/span&gt;&lt;span style="color: maroon"&gt;&amp;quot;$pwd\NewWSUSTargets-$date.csv&amp;quot;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green"&gt;#Get all reports in the scanfile store&lt;br /&gt;&lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;Get-ChildItem &lt;/span&gt;&lt;span style="color: purple"&gt;$mbsareportstore &lt;/span&gt;&lt;span style="color: black"&gt;| &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;select &lt;/span&gt;&lt;span style="color: maroon"&gt;name &lt;/span&gt;&lt;span style="color: black"&gt;| &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;tee -Variable &lt;/span&gt;&lt;span style="color: maroon"&gt;reports&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green"&gt;#Create the status csv file&lt;br /&gt;&lt;/span&gt;&lt;span style="color: maroon"&gt;&amp;quot;Machine,Status,Reportname&amp;quot; &lt;/span&gt;&lt;span style="color: black"&gt;| &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;out-file &lt;/span&gt;&lt;span style="color: maroon"&gt;&amp;quot;$PWD\FindReportStatus.txt&amp;quot;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: green"&gt;#Do something...&lt;br /&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;foreach &lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: purple"&gt;$target &lt;/span&gt;&lt;span style="color: blue"&gt;in &lt;/span&gt;&lt;span style="color: purple"&gt;$wsustargets&lt;/span&gt;&lt;span style="color: black"&gt;){&lt;br /&gt;        &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: green"&gt;#because the targets are reurned from WSUS in FQDN format, but reports are stored &lt;br /&gt;        #with hostname the domain name is cut of.&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: purple"&gt;$b &lt;/span&gt;&lt;span style="color: red"&gt;= &lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: purple"&gt;$target&lt;/span&gt;&lt;span style="color: black"&gt;.FullDomainName.ToString()).Split(&lt;/span&gt;&lt;span style="color: maroon"&gt;&amp;quot;.&amp;quot;&lt;/span&gt;&lt;span style="color: black"&gt;)&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: purple"&gt;$c &lt;/span&gt;&lt;span style="color: red"&gt;= &lt;/span&gt;&lt;span style="color: purple"&gt;$b&lt;/span&gt;&lt;span style="color: black"&gt;[0]&lt;br /&gt;        &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: green"&gt;#Using Select-string to look for the hostname ($c) in each of the filenames&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: purple"&gt;$reports &lt;/span&gt;&lt;span style="color: black"&gt;| &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;% &lt;/span&gt;&lt;span style="color: black"&gt;{&lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;select-String -pattern &lt;/span&gt;&lt;span style="color: purple"&gt;$c &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;-inputobject &lt;/span&gt;&lt;span style="color: navy"&gt;$_ &lt;/span&gt;&lt;span style="color: black"&gt;| &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;tee -variable &lt;/span&gt;&lt;span style="color: maroon"&gt;slct&lt;/span&gt;&lt;span style="color: black"&gt;}&lt;br /&gt;        &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: green"&gt;#If the hostname is not found in any filename, this is logged in the status file &lt;br /&gt;        #and added to a new targetfile for MBSA to use&lt;br /&gt;        #Write-Host lines can be removed if script is not executed interactively&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;if &lt;/span&gt;&lt;span style="color: black"&gt;(&lt;/span&gt;&lt;span style="color: purple"&gt;$slct &lt;/span&gt;&lt;span style="color: red"&gt;-eq &lt;/span&gt;&lt;span style="color: purple"&gt;$null&lt;/span&gt;&lt;span style="color: black"&gt;){&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;Write-Host &lt;/span&gt;&lt;span style="color: maroon"&gt;&amp;quot;Report Not found for &amp;quot; &lt;/span&gt;&lt;span style="color: purple"&gt;$target&lt;/span&gt;&lt;span style="color: black"&gt;.FullDomainName &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;-foregroundcolor &lt;/span&gt;&lt;span style="color: maroon"&gt;red&lt;br /&gt;            &amp;quot;$c,ReportNotFound,N/A&amp;quot; &lt;/span&gt;&lt;span style="color: black"&gt;| &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;out-file -append &lt;/span&gt;&lt;span style="color: maroon"&gt;&amp;quot;$PWD\FindReportStatus.txt&amp;quot;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: purple"&gt;$target&lt;/span&gt;&lt;span style="color: black"&gt;.FullDomainName | &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;Out-File -Append &lt;/span&gt;&lt;span style="color: maroon"&gt;&amp;quot;$PWD\MBSAScanMissing.txt&amp;quot;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: black"&gt;}&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;Else &lt;/span&gt;&lt;span style="color: black"&gt;{&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;Write-Host &lt;/span&gt;&lt;span style="color: maroon"&gt;&amp;quot;Report found for &amp;quot; &lt;/span&gt;&lt;span style="color: purple"&gt;$target&lt;/span&gt;&lt;span style="color: black"&gt;.FullDomainName &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;-foregroundcolor &lt;/span&gt;&lt;span style="color: maroon"&gt;green&lt;br /&gt;            &amp;quot;$c,ReportFound,$slct&amp;quot; &lt;/span&gt;&lt;span style="color: black"&gt;| &lt;/span&gt;&lt;span style="color: #5f9ea0"&gt;out-file -append &lt;/span&gt;&lt;span style="color: maroon"&gt;&amp;quot;$PWD\FindReportStatus.txt&amp;quot;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: purple"&gt;$slct &lt;/span&gt;&lt;span style="color: red"&gt;= &lt;/span&gt;&lt;span style="color: purple"&gt;$Null&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: black"&gt;}&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This script simply gets the list from WSUS and checks whether a report of each machine exists in the report store. The 2 scripts could be fused into one, but for my purposes, where I need to run script 1 on a regular basis and script 2 on demand, this is the best way.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6295138065817477735-5796036432365274468?l=theadminguy.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://theadminguy.blogspot.com/feeds/5796036432365274468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://theadminguy.blogspot.com/2009/05/run-mbsa-against-all-machines-in-wsus.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6295138065817477735/posts/default/5796036432365274468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6295138065817477735/posts/default/5796036432365274468'/><link rel='alternate' type='text/html' href='http://theadminguy.blogspot.com/2009/05/run-mbsa-against-all-machines-in-wsus.html' title='Run MBSA against all machines in WSUS'/><author><name>The Admin Guy</name><uri>http://www.blogger.com/profile/03648335659283707124</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></feed>
