document.write('\
<div class="poshcode code posh">\
<style type="text/css">\
');
document.write("/**\
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann\
 * (http://qbnz.com/highlighter/ and http://geshi.org/)\
 */\
.posh .de1, .posh .de2 {font: normal normal 1em/1.2em Consolas, 'Bitstream Vera Sans Mono', 'Courier New', monospace; margin:0; padding:0; background:none; vertical-align:top;}\
.posh  {font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', monospace;}\
.posh .imp {font-weight: bold; color: red;}\
.posh li, .posh .li1 {background: #ffffff;}\
.posh .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}\
.posh .kw1 {color: #666699; font-weight: bold;}\
.posh .kw2 {color: #333399; font-weight: bold; font-style: italic;}\
.posh .kw3 {color: #003366; font-weight: bold;}\
.posh .kw4 {color: #660033;}\
.posh .co1 {color: #666666; font-style: italic;}\
.posh .coMULTI {color: #666666; font-style: italic;}\
.posh .es0 {color: #000099; font-weight: bold;}\
.posh .br0 {color: #333;}\
.posh .sy0 {color: #66cc66;}\
.posh .st0 {color: #009900;}\
.posh .nu0 {color: #cc66cc;}\
.posh .me1 {color: #003366;}\
.posh .me2 {color: #003366;}\
.posh .re0 {color: #0066cc; font-style: italic;}\
.posh .re1 {font-style: normal;}\
.posh .re2 {color: #000066;}\
.posh .re3 {color: #660033; font-weight: bold;}\
.posh .re4 {color: #003366; font-weight: bold;}\
.posh .ln-xtra, .posh li.ln-xtra, .posh div.ln-xtra {color:black;background:#FFFF88;}\
.posh span.xtra { display:block; }\
");
document.write(".posh ol {float:left; margin: 0px !important; padding: 0px; min-width:100% !important; list-style-position: inside;}\
.posh li.li2, .posh li.li1 {list-style-type:decimal-leading-zero; white-space:nowrap; padding:0 1em 0 0.5em;}\
.posh li {color: #ccc;}\
.posh li div {color: #000; display: inline;}\
.syntax {background:none repeat scroll 0 0 #eee; border:0.5em solid #ccc;}\
.syntax .posh {overflow: auto;}\
.syntax .poshcredit {\
background-color:#eaeaea; color:#666;\
padding:0.5em 1em; clear:both;\
font-size:85%;\
}");
document.write("\n</style>");
document.write('<div class="syntax"><div class="posh" style="font-family: Consolas, \'Bitstream Vera Sans Mono\', \'Courier New\', monospace;"><ol><li class="li1"><div class="de1"><span class="co1"># AutoMount.psm1 v1.0 &nbsp; </span></div></li>\
<li class="li1"><div class="de1"><span class="co1"># Oisin &quot;x0n&quot; Grehan (MVP) &nbsp; </span></div></li>\
<li class="li1"><div class="de1">&nbsp; </div></li>\
<li class="li1"><div class="de1"><span class="re3">$query</span> <span class="sy0">=</span> <span class="re0">new-<span class="re1">object</span></span> <span class="kw3">System</span>.<span class="me1">Management</span>.<span class="me1">WqlEventQuery</span> &nbsp; </div></li>\
<li class="li1"><div class="de1"><span class="re3">$query</span>.<span class="me1">EventClassName</span> <span class="sy0">=</span> <span class="st0">&quot;__InstanceOperationEvent&quot;</span> &nbsp;</div></li>\
<li class="li1"><div class="de1">&nbsp; </div></li>\
<li class="li1"><div class="de1"><span class="co1"># default to every 2 seconds &nbsp; </span></div></li>\
<li class="li1"><div class="de1"><span class="re3">$query</span>.<span class="me1">WithinInterval</span> <span class="sy0">=</span> <span class="re0">new-<span class="re1">object</span></span> <span class="kw3">System</span>.<span class="me1">TimeSpan</span> <span class="nu0">0</span>,<span class="nu0">0</span>,<span class="nu0">2</span> &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; </div></li>\
<li class="li1 ln-xtra"><div class="de1"><span class="co1"># this WMI is only available with Windows 2003 and Vista (not XP it appears).</span></div></li>\
<li class="li1"><div class="de1"><span class="co1"># this could be rewritten to use different WMI queries to support 2000/NT/XP also. &nbsp; </span></div></li>\
<li class="li1"><div class="de1"><span class="re3">$query</span>.<span class="me1">QueryString</span> <span class="sy0">=</span> <span class="st0">&quot;Select * from Win32_VolumeChangeEvent&quot;</span> &nbsp;</div></li>\
<li class="li1"><div class="de1">&nbsp; </div></li>\
<li class="li1"><div class="de1"><span class="co1"># attach a watcher &nbsp; </span></div></li>\
<li class="li1"><div class="de1"><span class="re3">$watcher</span> <span class="sy0">=</span> <span class="re0">new-<span class="re1">object</span></span> <span class="kw3">System</span>.<span class="me1">Management</span>.<span class="me1">ManagementEventWatcher</span> <span class="re3">$query</span> &nbsp;</div></li>\
<li class="li1"><div class="de1">&nbsp; </div></li>\
<li class="li1"><div class="de1"><span class="co1"># here we use -SupportEvent instead of -SourceIdentifier &nbsp; </span></div></li>\
<li class="li1"><div class="de1"><span class="co1"># this prevents this event from being generally visible &nbsp; </span></div></li>\
<li class="li1"><div class="de1"><span class="co1"># also note the use of the call operator to invoke a &nbsp; &nbsp;</span></div></li>\
<li class="li1"><div class="de1"><span class="co1"># function in the scope of the module since this action &nbsp; </span></div></li>\
<li class="li1"><div class="de1"><span class="co1"># occurs outside of module scope. &nbsp; </span></div></li>\
<li class="li1"><div class="de1"><span class="re0">Register-<span class="re1">ObjectEvent</span></span> <span class="re3">$watcher</span> <span class="re2">-EventName</span> <span class="st0">&quot;EventArrived&quot;</span> ` &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re2">-SupportEvent</span> <span class="st0">&quot;WMI.VolumeChange&quot;</span> <span class="re2">-Action</span> <span class="br0">&#123;</span> &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">&amp;</span> <span class="br0">&#40;</span><span class="re0">get-<span class="re1">module</span></span> automount<span class="br0">&#41;</span> VolumeChangeCallback @args &nbsp;</div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span> &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; </div></li>\
<li class="li1"><div class="de1"><span class="co1"># New PSEvents: &nbsp; </span></div></li>\
<li class="li1"><div class="de1"><span class="co1"># &nbsp; </span></div></li>\
<li class="li1"><div class="de1"><span class="co1"># &nbsp; &nbsp; PowerShell.DeviceConfigurationChanged &nbsp; </span></div></li>\
<li class="li1"><div class="de1"><span class="co1"># &nbsp; &nbsp; PowerShell.DeviceArrived &nbsp; </span></div></li>\
<li class="li1"><div class="de1"><span class="co1"># &nbsp; &nbsp; PowerShell.DeviceRemoved &nbsp; </span></div></li>\
<li class="li1"><div class="de1"><span class="co1"># &nbsp; &nbsp; PowerShell.DeviceDocking &nbsp; </span></div></li>\
<li class="li1"><div class="de1">&nbsp; </div></li>\
<li class="li1"><div class="de1"><span class="co1"># win32_volumechangeevent event types &nbsp; </span></div></li>\
<li class="li1"><div class="de1"><span class="re3">$eventTypes</span> <span class="sy0">=</span> @<span class="br0">&#123;</span> &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="nu0">1</span> <span class="sy0">=</span> <span class="st0">&quot;ConfigurationChanged&quot;</span>; &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="nu0">2</span> <span class="sy0">=</span> <span class="st0">&quot;Arrived&quot;</span>; &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="nu0">3</span> <span class="sy0">=</span> <span class="st0">&quot;Removed&quot;</span>; &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="nu0">4</span> <span class="sy0">=</span> <span class="st0">&quot;Docking&quot;</span>; &nbsp; </div></li>\
<li class="li1"><div class="de1"><span class="br0">&#125;</span> &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; </div></li>\
<li class="li1"><div class="de1"><span class="co1"># private module level callback function &nbsp; </span></div></li>\
<li class="li1"><div class="de1"><span class="kw1">function</span> VolumeChangeCallback <span class="br0">&#40;</span><span class="re3">$sender</span>, <span class="re3">$eventargs</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">trap</span> <span class="br0">&#123;</span> <span class="re0">write-<span class="re1">warning</span></span> <span class="re3">$_</span> <span class="br0">&#125;</span> &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re3">$driveName</span> <span class="sy0">=</span> <span class="re3">$eventArgs</span>.<span class="me1">NewEvent</span>.<span class="me1">DriveName</span>.<span class="me1">TrimEnd</span><span class="br0">&#40;</span><span class="st0">&quot;:&quot;</span><span class="br0">&#41;</span> &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re3">$eventType</span> <span class="sy0">=</span> <span class="re4"><span class="br0">&#91;</span><span class="kw3">int</span><span class="br0">&#93;</span></span><span class="re3">$eventArgs</span>.<span class="me1">NewEvent</span>.<span class="me1">EventType</span> <span class="co1"># was uint16 &nbsp; </span></div></li>\
<li class="li1"><div class="de1">&nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re3">$forwardedEvent</span> <span class="sy0">=</span> <span class="st0">&quot;Device$($eventTypes[$eventType])&quot;</span> &nbsp;</div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;</div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="co1"># forward a new simpler event specific to device event type &nbsp; </span></div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re4"><span class="br0">&#91;</span>void<span class="br0">&#93;</span></span><span class="br0">&#40;</span> <span class="re0">New-<span class="re1">PSEvent</span></span> <span class="st0">&quot;PowerShell.$forwardedEvent&quot;</span> <span class="re2">-Sender</span> <span class="re3">$driveName</span> ` &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">-EventArguments</span> <span class="re3">$eventargs</span> <span class="br0">&#41;</span> &nbsp; </div></li>\
<li class="li1"><div class="de1"><span class="br0">&#125;</span> &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; </div></li>\
<li class="li1"><div class="de1"><span class="co1"># hook up our psdrive mount / unmount events &nbsp; </span></div></li>\
<li class="li1"><div class="de1"><span class="co1"># and start the WMI watcher &nbsp; </span></div></li>\
<li class="li1"><div class="de1"><span class="kw1">function</span> <span class="re0">Enable-<span class="re1">AutoMount</span></span> <span class="br0">&#123;</span> &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">Register-<span class="re1">PSEvent</span></span> <span class="re2">-SourceIdentifier</span> <span class="st0">&quot;PowerShell.DeviceArrived&quot;</span> ` &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">-Action</span> <span class="br0">&#123;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">new-<span class="re1">psdrive</span></span> <span class="re2">-name</span> <span class="re3">$args</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> <span class="re2">-psprovider</span> ` &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; filesystem <span class="re2">-root</span> <span class="st0">&quot;$args[0]:&quot;</span>; &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span> &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">Register-<span class="re1">PSEvent</span></span> <span class="re2">-SourceIdentifier</span> <span class="st0">&quot;PowerShell.DeviceRemoved&quot;</span> ` &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re2">-Action</span> <span class="br0">&#123;</span> &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">remove-<span class="re1">psdrive</span></span> <span class="re2">-name</span> <span class="re3">$args</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> <span class="re2">-ea</span> <span class="nu0">0</span>; <span class="co1"># may not exist &nbsp; </span></div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;</div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re3">$watcher</span>.<span class="kw4">Start</span><span class="br0">&#40;</span><span class="br0">&#41;</span> &nbsp; </div></li>\
<li class="li1"><div class="de1"><span class="br0">&#125;</span> &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; </div></li>\
<li class="li1"><div class="de1"><span class="co1"># tear down our psdrive mount / unmount events &nbsp; </span></div></li>\
<li class="li1"><div class="de1"><span class="co1"># and stop the WMI watcher &nbsp; </span></div></li>\
<li class="li1"><div class="de1"><span class="kw1">function</span> <span class="re0">Disable-<span class="re1">AutoMount</span></span> <span class="br0">&#123;</span> &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">Unregister-<span class="re1">PSEvent</span></span> <span class="re2">-SourceIdentifier</span> <span class="st0">&quot;PowerShell.DeviceArrived&quot;</span> &nbsp;</div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re0">Unregister-<span class="re1">PSEvent</span></span> <span class="re2">-SourceIdentifier</span> <span class="st0">&quot;PowerShell.DeviceRemoved&quot;</span> &nbsp;</div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;</div></li>\
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="re3">$watcher</span>.<span class="me1">Stop</span><span class="br0">&#40;</span><span class="br0">&#41;</span> &nbsp; </div></li>\
<li class="li1"><div class="de1"><span class="br0">&#125;</span> &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; </div></li>\
<li class="li1"><div class="de1"><span class="co1"># export functions to control automount &nbsp; </span></div></li>\
<li class="li1"><div class="de1"><span class="re0">Export-<span class="re1">ModuleMember</span></span> <span class="re0">Enable-<span class="re1">AutoMount</span></span>, <span class="re0">Disable-<span class="re1">AutoMount</span></span> &nbsp; </div></li>\
<li class="li1"><div class="de1">&nbsp; </div></li>\
<li class="li1"><div class="de1"><span class="co1"># start watching and (un)mounting &nbsp; </span></div></li>\
<li class="li1"><div class="de1"><span class="re0">Enable-<span class="re1">AutoMount</span></span></div></li>\
</ol></div>');document.write('<div class="poshcredit"><a style="float:right;" href="http://poshcode.org/get/525" title="download file">download</a><a href="http://poshcode.org/?show=525" title="full view">This Script</a> brought to you by <a href="http://PoshCode.org">PoshCode</a>\
</div>\
</div>\
</div>');