<?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-18241657</id><updated>2012-01-20T09:38:28.767-05:00</updated><category term='VBScript'/><category term='Microsoft'/><category term='DNS'/><category term='SQL'/><category term='Cygwin'/><category term='Exchange'/><category term='Outlook'/><category term='Samba'/><category term='free'/><category term='Cisco'/><category term='flock'/><category term='Windows'/><category term='GroupPolicy'/><category term='Scripting'/><category term='VPN'/><category term='PowerShell'/><category term='Blackberry'/><category term='Backup'/><category term='browser'/><category term='LinkedIn'/><category term='Virus'/><category term='sun'/><category term='Batch'/><category term='Antivirus'/><category term='Cluster'/><category term='Network'/><category term='HP'/><category term='System Administration'/><category term='VMWare'/><category term='Internet'/><category term='SCVMM'/><category term='Hyper-V'/><category term='Nagios'/><category term='ActriveDirectory'/><category term='Blogger'/><category term='UnityExpress'/><category term='Squid'/><category term='VBA'/><category term='ATT'/><category term='Rants'/><category term='software'/><category term='Symantec'/><category term='unix'/><category term='Linux'/><category term='HTML'/><category term='Tools'/><category term='Telephones'/><category term='Blog'/><category term='AIX'/><category term='Excel'/><title type='text'>The Daily Admin</title><subtitle type='html'>This blog is a collection of things I've learned, want to remember, or think will be useful.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>84</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-18241657.post-1401141430474650365</id><published>2011-12-14T17:00:00.001-05:00</published><updated>2011-12-14T17:00:20.664-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Move Windows 2008 Bootmgr to Another Partition</title><content type='html'>Ran into this problem when the bootmgr was installed on a 100MB partition. Windows assigned the partition (this was the first partition on the disk) the drive letter D:. I needed to move the bootmgr to the C: drive and get rid of this partition. Below are the very rough steps (recorded here for my own purpose).&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Copy the boot files (bootmgr, BOOT folder, BCD will error out, that's OK, we'll address that later) from the current active partition to the partition you want to be active&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Reboot to the machine to the install disk&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;When the computer boots into the install, choose to "repair windows"&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Click next then choose command prompt&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;run bcdedit /export&amp;nbsp;&lt;a href="file:///C:/BCD"&gt;c:\BCD&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;ren&amp;nbsp;&lt;a href="file:///C:/boot/bcd"&gt;c:\boot\bcd&lt;/a&gt;&amp;nbsp;bcd.old&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Bootrec /rebuildbcd&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Run Diskpart (select the disk then the partition that you want to be active) and mark the new partition as active using the ACTIVE command&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Reboot and that's it.&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-1401141430474650365?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/1401141430474650365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=1401141430474650365' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/1401141430474650365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/1401141430474650365'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2011/12/move-windows-2008-bootmgr-to-another.html' title='Move Windows 2008 Bootmgr to Another Partition'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-422753949160138641</id><published>2011-12-07T13:06:00.001-05:00</published><updated>2011-12-07T13:16:47.130-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='DNS'/><category scheme='http://www.blogger.com/atom/ns#' term='PowerShell'/><title type='text'>Powershell + DNSCMD to find all CNAME (Alias) records from DNS</title><content type='html'>Sometimes a DBA or developer requests what aliases are pointing to a given machine. To quickly facilitate this request for them, I came up with the script below. I thought there would be a way to accomplish this task with NSLOOKUP or DNSCMD, but I couldn't get it working. If you now of a way to get this working with only one of those tools, please post it in the comments.&lt;br /&gt;&lt;br /&gt;function Get-DNSAlias&lt;br /&gt;{&lt;br /&gt;Param([string] $computername=$env:computername)&lt;br /&gt;if ($_) {$computername=$_}&lt;br /&gt;&lt;br /&gt;echo "Aliases for $computername"&lt;br /&gt;$aliases = dnscmd computername /enumrecords domain.com . /type CNAME&lt;br /&gt;foreach($alias in $aliases){$alias | % {$_.split(" ")[0]} | where {$alias.Contains($computername)}&lt;br /&gt;    }&lt;br /&gt;&amp;lt;#&lt;br /&gt;    .SYNOPSIS&lt;br /&gt;        Gathers DNS CNAME records for the given host&lt;br /&gt;    .EXAMPLE&lt;br /&gt;        Get-DNSAlias computername&lt;br /&gt;    .DESCRIPTION    &lt;br /&gt;        This command gathers and reports all of the CNAME records for the given computer in the hardcoded domain list&lt;br /&gt;#&amp;gt;&lt;br /&gt;}#end Get-DNSAlias&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-422753949160138641?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/422753949160138641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=422753949160138641' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/422753949160138641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/422753949160138641'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2011/12/powershell-dnscmd-to-find-all-cname.html' title='Powershell + DNSCMD to find all CNAME (Alias) records from DNS'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-1877438551373638476</id><published>2011-07-07T16:29:00.000-04:00</published><updated>2011-07-07T16:29:50.558-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Windows UNC: No network provider accepted the given network path</title><content type='html'>I have seen many posts around the Internet for this, including WINS and scanning system files. Ultimately, if this is only a problem for a single user, it is most likely the TCP/IP NetBIOS Helper service being disabled or not running. Start the service, set it to Automatic, and tell the user to leave the services alone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-1877438551373638476?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/1877438551373638476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=1877438551373638476' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/1877438551373638476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/1877438551373638476'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2011/07/windows-unc-no-network-provider.html' title='Windows UNC: No network provider accepted the given network path'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-2847394363732656915</id><published>2011-07-07T10:22:00.000-04:00</published><updated>2011-07-07T10:22:15.929-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='SCVMM'/><category scheme='http://www.blogger.com/atom/ns#' term='PowerShell'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='Hyper-V'/><title type='text'>Duplicate MAC Addresses in SCVMM and Hyper-V</title><content type='html'>There is a possiblity that duplicate MAC addresses can occur in Hyper-V (specifically when configuring networks using Hyper-V). As an example, if the machine is created with SCVMM and then the network is configured using Hyper-V, there could be a duplicate MAC. If the VM was created with Hyper-V and later migrated to a SCVMM host, this duplication could still happen. If the VM has been registered with SCVMM (regardless of how the network was configured), the script below will output a CSV of the VM name and the MAC(s). Using Excel to quickly find duplicates is an easy way to avoid network headaches. If a duplicate is found, the simple fix is to add a new network card through SCVMM which will ensure that the MAC is not duplicated. &lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;add-pssnapin Microsoft.SystemCenter.VirtualMachineManager&lt;br /&gt;Get-VMMServer &lt;scvmm_server&gt;| get-vm | Get-VirtualNetworkAdapter | select name,EthernetAddress | export-csv "c:\temp\VM_Macs.csv"&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-2847394363732656915?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/2847394363732656915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=2847394363732656915' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/2847394363732656915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/2847394363732656915'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2011/07/duplicate-mac-addresses-in-scvmm-and.html' title='Duplicate MAC Addresses in SCVMM and Hyper-V'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-1592340134068130339</id><published>2011-06-01T10:15:00.003-04:00</published><updated>2011-06-01T10:16:56.364-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='SCVMM'/><category scheme='http://www.blogger.com/atom/ns#' term='PowerShell'/><category scheme='http://www.blogger.com/atom/ns#' term='Hyper-V'/><title type='text'>SCVMM Powershell Script to Find Startup Actions</title><content type='html'>Powershell command/script to find the startup actions for all VMs and output them to a CSV.&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;$Hosts = @(Get-vmmserver &lt;i&gt;SCVMMSERVER&lt;/i&gt; | get-vm | Select Name, StartAction) | Export-Csv C:\VM_Startup_Actions.csv&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-1592340134068130339?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/1592340134068130339/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=1592340134068130339' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/1592340134068130339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/1592340134068130339'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2011/06/scvmm-powershell-script-to-find-startup.html' title='SCVMM Powershell Script to Find Startup Actions'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-6824815933869255776</id><published>2011-05-26T11:16:00.000-04:00</published><updated>2011-05-26T11:16:58.107-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>How Windows Server Picks the Source IP Address</title><content type='html'>When Windows Server (in my testing, 2008) has multiple IP addresses configured on a single adapter, Windows will choose the IP address closest to the gateway as the source address. We ran into this problem when using NAT through a firewall for a web service call. &lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;The second (newly added) IP was for a website hosted on the server. This second address was being placed in the packet as the source but was not in the NAT rule, so the web service call failed.&lt;br /&gt;&lt;br /&gt;Microsoft has a hotfix (KB2386184) that is supposed to correct this by adding a new flag to netsh (skipassource). This flag is intended to tell the OS not use the specified address as a source address in the packet. Unfortunately, this did not remedy the problem as stated (nor work as Microsoft stated). To correct the issue, we chose a "higher" address from the subnet (farther away from the gateway address) and everything worked as planned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-6824815933869255776?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/6824815933869255776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=6824815933869255776' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/6824815933869255776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/6824815933869255776'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2011/05/how-windows-server-picks-source-ip.html' title='How Windows Server Picks the Source IP Address'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-600721167612838144</id><published>2010-12-10T17:08:00.000-05:00</published><updated>2010-12-10T17:08:35.734-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><title type='text'>How to Dry Out Wet Cellphone (Electronic Device)</title><content type='html'>As an "IT guy", I get a lot of questions regarding ANYTHING with power. Sometimes, when people have their phones (or other devices) near liquid (or in the bathroom) they accidentally get the device wet. Not a little wet, rather soaked or submerged. Even I have experienced such a tragedy.&lt;br /&gt;&lt;br /&gt;To "dry" the device out, put it in a ziploc baggie with dry rice. The rice will absorb the moisture from the device.&lt;br /&gt;&lt;br /&gt;I have done this, and it worked. Mine was a remote control, but it worked.&lt;br /&gt;&lt;br /&gt;If you have any experience with this, or know any other ways to accomplish this please post a comment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-600721167612838144?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/600721167612838144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=600721167612838144' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/600721167612838144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/600721167612838144'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2010/12/how-to-dry-out-wet-cellphone-electronic.html' title='How to Dry Out Wet Cellphone (Electronic Device)'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-3336386677572175477</id><published>2010-12-07T13:14:00.000-05:00</published><updated>2010-12-07T13:14:18.821-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Cisco'/><category scheme='http://www.blogger.com/atom/ns#' term='ActriveDirectory'/><title type='text'>How-to Setup AAA Authentication for Cisco Switches using Microsoft IAS (RADIUS)</title><content type='html'>This can certainly be overcomplicated by many posts on the web. This can be configured very, very granularly, but below is the simplest configuration that I have been able to come up with.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Install IAS on the Windows Server&lt;/li&gt;&lt;li&gt;Right-click Remote Access Policies (in the IAS MMC) and choose "New Remote Access Policy"&lt;/li&gt;&lt;li&gt;Select "Setup a custom policy"&lt;/li&gt;&lt;li&gt;For the policy name, we'll call it Cisco Switches&lt;/li&gt;&lt;li&gt;Click Next&lt;/li&gt;&lt;li&gt;Click Add&lt;/li&gt;&lt;li&gt;Select Windows-Groups&lt;/li&gt;&lt;li&gt;Click Add&lt;/li&gt;&lt;li&gt;Click Add and select the groups for this policy&lt;/li&gt;&lt;li&gt;Click OK&lt;/li&gt;&lt;li&gt;Click OK&lt;/li&gt;&lt;li&gt;Click Next&lt;/li&gt;&lt;li&gt;Select "Grant remote access permission"&lt;/li&gt;&lt;li&gt;Click Edit Profile&lt;/li&gt;&lt;li&gt;Click the Authentication Tab&lt;/li&gt;&lt;li&gt;Leave the defaults and select the following: Unencrypted authentication, Allow clients to connect without negotiating an authentication method&lt;/li&gt;&lt;li&gt;Click the Advanced tab&lt;/li&gt;&lt;li&gt;Change "Service-Type" to Login&lt;/li&gt;&lt;li&gt;Remove Frame-Protocol&lt;/li&gt;&lt;li&gt;Click Add&lt;/li&gt;&lt;li&gt;Select "Vendor-Specific"&lt;/li&gt;&lt;li&gt;Click Add&lt;/li&gt;&lt;li&gt;Select Cisco from the list&lt;/li&gt;&lt;li&gt;Select "Yes. It conforms"&lt;/li&gt;&lt;li&gt;Click Configure Attribute&lt;/li&gt;&lt;li&gt;Change "Vendor-assigned attribute number" from 0 to 1&lt;/li&gt;&lt;li&gt;Enter "shell:priv-lvl=15" (without the quotes) in the Attribute Value field&lt;span class="Apple-style-span" style="color: #29303b; font-family: Georgia, Verdana, Arial, serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 12px; line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Click OK&lt;/li&gt;&lt;li&gt;Click OK&lt;/li&gt;&lt;li&gt;Click OK&lt;/li&gt;&lt;li&gt;Click Close&lt;/li&gt;&lt;li&gt;Click OK&lt;/li&gt;&lt;li&gt;Respond "No" to a message about a Help topic&lt;/li&gt;&lt;li&gt;Click Next&lt;/li&gt;&lt;li&gt;Click Finish&lt;/li&gt;&lt;li&gt;In the IAS MMC, right-click RADIUS Clients and select New RADIUS Client&lt;/li&gt;&lt;li&gt;Enter the friendly name and the IP address&lt;/li&gt;&lt;li&gt;Click Next&lt;/li&gt;&lt;li&gt;Enter a preshared key to be used in the switch configuration&lt;/li&gt;&lt;li&gt;Click Finish&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;On the Cisco Switch (IOS) enter the following (changed to fit you situation):&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Couple of assumptions:&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;RADIUS-GROUP-NAME is an arbitrary name that you choose&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;PRESHARED-KEY is the key used above when adding the RADIUS client to IAS&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;10.1.1.10 and 10.1.1.11 are servers in your environment running IAS&lt;/i&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id="divCode"&gt;&lt;div&gt;aaa authentication login default local group RADIUS-GROUP-NAME&lt;/div&gt;&lt;div&gt;aaa authorization exec default local group RADIUS-GROUP-NAME&lt;/div&gt;&lt;div&gt;!&lt;/div&gt;&lt;div&gt;radius-server host 10.1.1.10 auth-port 1645 acct-port 1646 key PRESHARED-KEY&lt;/div&gt;&lt;div&gt;radius-server host 10.1.1.11 auth-port 1645 acct-port 1646 key PRESHARED-KEY&lt;/div&gt;&lt;div&gt;!&lt;/div&gt;&lt;div&gt;aaa group server radius RADIUS-GROUP-NAME&lt;/div&gt;&lt;div&gt;&amp;nbsp;server 10.1.1.10 auth-port 1645 acct-port 1646&lt;/div&gt;&lt;div&gt;&amp;nbsp;server 10.1.1.11 auth-port 1645 acct-port 1646&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-3336386677572175477?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/3336386677572175477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=3336386677572175477' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/3336386677572175477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/3336386677572175477'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2010/12/how-to-setup-aaa-authentication-for.html' title='How-to Setup AAA Authentication for Cisco Switches using Microsoft IAS (RADIUS)'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-2042200488332326709</id><published>2010-10-01T14:44:00.000-04:00</published><updated>2010-10-01T14:44:01.024-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blackberry'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><title type='text'>Blackberry Enterprise Server - Low Disk Space Cleanup</title><content type='html'>The BES keeps log files in the \Program Files\Research In Motion\BlackBerry Enterprise Server\Logs directory. From time to time, this directory may need to be cleaned up to free disk space. I will be writing a quick script to copy these off every week or so, but for now all folders &lt;b&gt;EXCEPT &lt;/b&gt;the following can be moved off the disk:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;webserver&lt;/li&gt;&lt;li&gt;Installer&lt;/li&gt;&lt;li&gt;Current week's folder&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-2042200488332326709?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/2042200488332326709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=2042200488332326709' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/2042200488332326709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/2042200488332326709'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2010/10/blackberry-enterprise-server-low-disk.html' title='Blackberry Enterprise Server - Low Disk Space Cleanup'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-1379661253408243330</id><published>2010-08-25T17:15:00.001-04:00</published><updated>2010-08-25T17:16:37.230-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='AIX'/><title type='text'>Stop AIX from Forcing Users to Change Password on Login</title><content type='html'>AIX's password tools are more broad than most other Unix-like operating systems. This often means that things are a bit complicated when it comes to managing passwords. Below is a command that can be run so that users aren't required to change their password when they login:&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;pwdadm -c username&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Once this command is run, the user can log in with their old password and will not be required to change it.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-1379661253408243330?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/1379661253408243330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=1379661253408243330' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/1379661253408243330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/1379661253408243330'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2010/08/stop-aix-from-forcing-users-to-change.html' title='Stop AIX from Forcing Users to Change Password on Login'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-4412500677438933663</id><published>2010-08-21T15:06:00.002-04:00</published><updated>2010-09-05T00:04:20.166-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Nagios'/><title type='text'>Check Windows Event Logs with Nagios</title><content type='html'>Although NSClient++ is very well documented, I had a little trouble actually getting NRPE working with the Windows Event Log. There are two ways that I use Nagios to monitor Windows Event Logs:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Scanning for problems, say in the System Log&lt;/li&gt;&lt;li&gt;Scanning for something that should be happening, such as NTBackup running successfully&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Initial setup required for either scenario:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Nagios with working NRPE on the Windows host (I use and will describe NSClient++)&lt;/li&gt;&lt;li&gt;Uncomment the CheckEventLog.dll entry in the NSC.ini file&lt;/li&gt;&lt;/ul&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Once the NSC.ini file is setup for on Windows, you can enter the checks below into your Nagios commands.cfg file and call them as needed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id="divCode"&gt;#Check the Windows System Log for Errors in the last hour&lt;br /&gt;define command{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;command_name &amp;nbsp; &amp;nbsp;check_eventvwr_sys_errors&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;command_line &amp;nbsp; &amp;nbsp;$USER1$/check_nrpe -H $HOSTNAME$ -p 5666 -c CheckEventLog -a filter=new file="system" MaxWarn=1 MaxCrit=1 filter-generated=\&amp;lt;1h filter-eventType==error filter=in filter=all&lt;br /&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id="divCode"&gt;#Check for NTBackup Running within the last day&lt;br /&gt;#Event ID 8001 is "end of backup"&lt;br /&gt;define command{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;command_name &amp;nbsp; &amp;nbsp;check_exchange_backups&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;command_line &amp;nbsp; &amp;nbsp;$USER1$/check_nrpe -H $HOSTNAME$ -p 5666 -c CheckEventLog -a filter=new file=application MinWarn=0 MinCrit=0 filter-generated=\&amp;gt;1d filter+eventID=="8001" filter+eventType==info filter=out filter=all&lt;br /&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This yet another example of just how powerful Nagios can be for an organization. With this in place, administrators can feel confident that their Windows servers are healthy, from a system standpoint. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-4412500677438933663?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/4412500677438933663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=4412500677438933663' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/4412500677438933663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/4412500677438933663'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2010/08/check-windows-event-logs-with-nagios.html' title='Check Windows Event Logs with Nagios'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-788046006001804674</id><published>2010-07-28T07:24:00.000-04:00</published><updated>2010-07-28T07:24:33.754-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='free'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Scratch: Educational Programming from MIT</title><content type='html'>As my son (5) was playing on the computer (changing screen savers and other settings), I realized he was a little bored with this "computer thing". He wasn't able to be creative the way kids like to be creative on a restrictive desktop. I started looking around for some simple programming languages that would teach programming concepts and provide an outlet for his digital creativity when I stumbled upon Scratch (&lt;a href="http://scratch.mit.edu/"&gt;http://scratch.mit.edu&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;I was so taken by Scratch that I downloaded it for myself and found myself playing with it and designing my own project. It took me a total of about 5 minutes before he understood enough to get to work on his own project.&lt;br /&gt;&lt;br /&gt;If you have a child that likes to play on a computer, this is a great tool and I believe will help them be ahead of their other classmates in all of the subjects that are discretely hidden in Scratch. Even if you're like me (not a programmer), you will probably enjoy playing around with it. Also, it could be a great tool to teach an adult that is curious about programming and doesn't want to take a bunch of Java classes just to see what it's all about.&lt;br /&gt;&lt;br /&gt;They have installers for Windows, MAC, and Ubuntu. There is even a projects page on the Scratch website that allows you to upload your projects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-788046006001804674?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/788046006001804674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=788046006001804674' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/788046006001804674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/788046006001804674'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2010/07/scratch-educational-programming-from.html' title='Scratch: Educational Programming from MIT'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-4383151466826739536</id><published>2010-06-29T10:52:00.005-04:00</published><updated>2010-06-29T10:54:35.439-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='VBScript'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>VBScript to Telnet and Perform GET Operation</title><content type='html'>I have a web application server that I have to restart regularly. When I restart this service, I want to telnet into the box, perform a GET / request and ensure that HTML is returned. While this script seems simple, it provides me with a great peace of mind when run in combination with some other scripts. It lets me know the system is up and functioning after the restart.&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;&lt;code&gt;Option Explicit&lt;br /&gt;&lt;br /&gt;Dim objShell&lt;br /&gt;&lt;br /&gt;Set objShell = CreateObject("WScript.Shell")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;objShell.run "%SYSTEMROOT%\System32\telnet.exe localhost 443"&lt;br /&gt;&lt;br /&gt;wscript.sleep 1*1000&lt;br /&gt;&lt;br /&gt;objShell.SendKeys "GET /{ENTER}" &lt;br /&gt;&lt;br /&gt;Wscript.Sleep 2*1000 &lt;br /&gt;&lt;br /&gt;objShell.SendKeys "{ENTER}" &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Set objShell = Nothing&lt;br /&gt;&lt;br /&gt;wscript.Quit 0&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-4383151466826739536?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/4383151466826739536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=4383151466826739536' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/4383151466826739536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/4383151466826739536'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2010/06/vbscript-to-telnet-and-perform-get.html' title='VBScript to Telnet and Perform GET Operation'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-8855630604390419824</id><published>2010-06-24T17:45:00.000-04:00</published><updated>2010-06-24T17:45:53.453-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cygwin'/><category scheme='http://www.blogger.com/atom/ns#' term='Batch'/><category scheme='http://www.blogger.com/atom/ns#' term='Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Cygwin Scripted Installation</title><content type='html'>Because I never quite know when I will need to use Cygwin and it isn't part of any "standard build" for my Windows servers, I wanted an easy way to quickly install it on a server. I wrote a batch file that will download the setup file and install the base system. Thanks goes out to&amp;nbsp;&lt;a href="http://theos.in/windows-server/windows-command-line-download-tool/"&gt;http://theos.in/windows-server/windows-command-line-download-tool/&lt;/a&gt;&amp;nbsp;for the information on using bitsadmin for command-line downloading in Windows.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;There are some prerequisites for this to work properly:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Must have an Internet connection&lt;/li&gt;&lt;li&gt;Must be an administrator on the computer&lt;/li&gt;&lt;li&gt;Must have the Windows Support Tools installed (bitsadmin)&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;The batch file below will download the Cygwin setup file and install Cygwin with the base packages (assuming all of the prerequisites have been met). The command line switches in the script are set to not verify the setup.ini.sig nor does Cygwin setup any shortcuts. The local directory for the installation files is set to C:\temp, but could be changed.&lt;br /&gt;&lt;br /&gt;If you have any problems with the script, please post in the Comments and I will try to help out.&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;&lt;code&gt;@ECHO OFF&lt;br /&gt;SET PATH=%PATH%;C:\Program Files\Support Tools&lt;br /&gt;&lt;br /&gt;bitsadmin /create CygwinDownload&lt;br /&gt;bitsadmin /addfile CygwinDownload http://cygwin.com/setup.exe c:\temp\setup.exe&lt;br /&gt;bitsadmin /resume CygwinDownload&lt;br /&gt;goto :checkstatus&lt;br /&gt;&lt;br /&gt;:checkstatus&lt;br /&gt;FOR /F "tokens=*" %%i in ('bitsadmin /GetFilesTransferred CygwinDownload') do SET status=%%i&lt;br /&gt;if not "%status%"=="1" goto :checkagain else goto :downloadcomplete &lt;br /&gt;&lt;br /&gt;:checkagain&lt;br /&gt;FOR /F "tokens=*" %%i in ('bitsadmin /GetFilesTransferred CygwinDownload') do SET status=%%i&lt;br /&gt;if not "%status%"=="1" goto :checkstatus else goto :downloadcomplete &lt;br /&gt;&lt;br /&gt;:downloadcomplete&lt;br /&gt;bitsadmin /complete CygwinDownload&lt;br /&gt;echo "Download Complete"&lt;br /&gt;&lt;br /&gt;:errorhandler&lt;br /&gt;bitsadmin /reset&lt;br /&gt;&lt;br /&gt;C:\temp\setup.exe -q -l c:\temp -n -X -s http://mirror.mcs.anl.gov/pub/cygwin -P base-cygwin vim&lt;br /&gt;&lt;br /&gt;echo "Installation Complete"&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-8855630604390419824?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/8855630604390419824/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=8855630604390419824' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/8855630604390419824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/8855630604390419824'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2010/06/cygwin-scripted-installation.html' title='Cygwin Scripted Installation'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-3810261145577149956</id><published>2010-06-22T13:53:00.001-04:00</published><updated>2010-06-22T13:55:15.387-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Linux SFTP - Link Directories Using a Chroot Jail</title><content type='html'>Sometimes I have an FTP/SFTP server (or any other Chroot directory) and need to give access to a folder outside of the user's "jail". To do this you can simply grant the proper permissions and mount the other directory. Below are the (very) brief instructions.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Grant the user (we will call them the 'reader') the appropriate permissions (maybe 755) to the folder that you want to mount in their chroot'd directory&lt;/li&gt;&lt;li&gt;Then mount the directory (mount /directory/to/read /home/of/reader)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Although this seems petty, it is frustrating when you don't know how to do it. I use this most often when I am granting read-only permissions to an SFTP directory for a single user.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;NOTE: If you are using this for FTP/SFTP and receive a permission denied error when logging in, check the permissions on the folder. I usually need to set 755 for this to work properly.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-3810261145577149956?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/3810261145577149956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=3810261145577149956' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/3810261145577149956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/3810261145577149956'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2010/06/linux-sftp-link-directories-using.html' title='Linux SFTP - Link Directories Using a Chroot Jail'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-1653105193429028493</id><published>2010-06-09T17:10:00.000-04:00</published><updated>2010-06-09T17:10:28.762-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Nagios'/><category scheme='http://www.blogger.com/atom/ns#' term='Cisco'/><title type='text'>Monitoring ASA Active/Standby Cluster Failover with Nagios</title><content type='html'>Although a cluster is a beautiful thing (a lifesaver even), it is important to know when the cluster fails from one member to another. To accomplish this with Nagios, I used the check_snmp plugin. Basically, this uses a simple SNMPGET for the value of the specified OID. In my Nagios configuration, I created a command specifically for this in the commands.cfg file. When the primary unit is checked, it should return "9". If anything else is returned, Nagios will announce a "CRITICAL" state rather than "OK". &lt;br /&gt;&lt;br /&gt;Syntax of Nagios check_snmp:&lt;br /&gt;&lt;br /&gt;check_snmp -H 192.168.100.1 -C public -o 1.3.6.1.4.1.9.9.147.1.2.1.1.1.3.6 -s 9&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-1653105193429028493?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/1653105193429028493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=1653105193429028493' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/1653105193429028493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/1653105193429028493'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2010/06/monitoring-asa-activestandby-cluster.html' title='Monitoring ASA Active/Standby Cluster Failover with Nagios'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-1028185628782656610</id><published>2009-10-11T10:05:00.002-04:00</published><updated>2009-10-11T11:57:22.465-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>Blogger Built-in Read More</title><content type='html'>I have been searching and searching for the best way to accomplish the "Read More", "Summaries", or "Show/Hide". Blogger has answered the call. Rather than needing all of the scripts and HTML edits to accomplish this functionality, Blogger has added this by using either the editor or by entering a simple comment into the HTML of your post&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;A couple of things to think about when implementing this functionality:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Do you use the 'new' Blogger editor? Do you want to? Check it out here:&amp;nbsp;&lt;a href="http://www.google.com/support/blogger/bin/answer.py?hl=en&amp;amp;answer=156829"&gt;http://www.google.com/support/blogger/bin/answer.py?hl=en&amp;amp;answer=156829&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Do you use a 'third-party' template? If so, you will need to make an additional change to the HTML code. This is explained at the bottom of the Google Help page.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Once you have the answers to these questions, go to&amp;nbsp;&lt;a href="http://www.google.com/support/blogger/bin/answer.py?hl=en&amp;amp;answer=154172"&gt;http://www.google.com/support/blogger/bin/answer.py?hl=en&amp;amp;answer=154172&lt;/a&gt;&amp;nbsp;and follow the directions. Simple as pie.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A personal word here: I have often looked at Wordpress for hosting my blog, but Blogger continues to impress me with the flexibility and their willingness to implement the functionality that bloggers are looking for.&lt;/div&gt;&lt;div&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/18241657-1028185628782656610?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/1028185628782656610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=1028185628782656610' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/1028185628782656610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/1028185628782656610'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2009/10/test-for-scripts.html' title='Blogger Built-in Read More'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-7084144004527136456</id><published>2009-10-05T12:10:00.017-04:00</published><updated>2009-10-11T11:59:46.418-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VMWare'/><category scheme='http://www.blogger.com/atom/ns#' term='PowerShell'/><title type='text'>PowerShell: Conditional Snapins Using Profile.ps1</title><content type='html'>I redirect My Documents from our office file server to whatever Windows machine I log into. As part of this, my Windows PowerShell Profile.ps1 script is executed. Unfortunately, the snapins referenced in this script aren't necessarily available on the host I am currently logged into. To combat this, I use a conditional statement to check both the computer I'm logged into as well as if the snapin is already loaded. &lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Additionally, many vendors that develop tools for the PowerShell (including Microsoft), will provide a shortcut that will open a command window with the snapin loaded. Personally, I don't like this. For several reasons, but mainly because I use the PowerShell for more than one thing at a time and I keep it open. I don't want to have to open many different shortcuts to access different tools. With the script below, I can load any or all snapins into my console based on the computer I am currently logged into. This gives me the control that I want to load the snapins based on the computer that I am currently using.&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;$currenthost = hostname if ((get-pssnapin -name VMware.VimAutomation.Core -ErrorAction SilentlyContinue) -eq $null) {if ($currenthost -eq "myLaptop") {add-pssnapin VMware.VimAutomation.Core}}&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;This script will check if the snapin is already loaded and suppress any errors if it is. Also, it checks for the host I am logged into and loads the appropriate snapin because it is available on my computer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-7084144004527136456?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/7084144004527136456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=7084144004527136456' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/7084144004527136456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/7084144004527136456'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2009/10/i-redirect-my-documents-from-our-office.html' title='PowerShell: Conditional Snapins Using Profile.ps1'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-8022133775335457271</id><published>2009-08-24T09:38:00.007-04:00</published><updated>2009-10-05T17:05:32.697-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='Samba'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Disabling Samba Master Browser</title><content type='html'>When implementing a Samba server to serve Windows shares or AD authentication, there is a stumbling block to look out for. This problem is inherit to Windows networks and the defaults in Samba. Windows networks utilize a "browsing" service that keeps a list of all the computers on the local subnet that are serving CIFS (Common Internet File System). To keep things straight, the local subnet has a master browser (also known as the Local Master Browser).If Samba is not configured, one-way or another (to be a browser or not), by default it is set to be a potential browser that participates in elections. To ensure that this default configuration doesn't produce unexpected results, it is best to disable this functionality, if not needed.&lt;br /&gt;To disable this behavior, simply enter the following line into the smb.conf global configuration:&lt;br /&gt;&lt;div id='divCode'&gt;[global]&lt;br /&gt;local master = no&lt;/div&gt;&lt;div&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/18241657-8022133775335457271?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/8022133775335457271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=8022133775335457271' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/8022133775335457271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/8022133775335457271'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2009/08/disabling-samba-master-browser.html' title='Disabling Samba Master Browser'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-8531784793306690077</id><published>2009-07-21T11:15:00.010-04:00</published><updated>2009-10-11T10:19:39.809-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Nagios'/><title type='text'>Configuring Nagios - Overview</title><content type='html'>Since my original posting "&lt;a href="http://www.thedailyadmin.com/2009/03/how-to-install-nagios-on-ubuntu-linux.html"&gt;How-To Install Nagios on Ubuntu Linux&lt;/a&gt;", I have received many requests for more information about configuring Nagios. Figuring this out was no small undertaking for me. I want to start with an overview of the files that Nagios uses for configuration, starting and stopping Nagios, and some other helpful information.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Configuration files:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Nagios installs (depending on the configuration directives given during the install) into either /usr/local/nagios/etc or /etc/nagios, the configuration files:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;nagios.cfg - main nagios server configuration file&lt;/li&gt;&lt;li&gt;commands.cfg - some predefined commands&lt;/li&gt;&lt;li&gt;templates.cfg - some predefined templates for monitored hosts&lt;/li&gt;&lt;li&gt;timeperiods.cfg - timeperiods for things such as times to monitor or working hours&lt;/li&gt;&lt;li&gt;cgi.cfg - the configuration of the web interface&lt;/li&gt;&lt;li&gt;resource.cfg - user-defined macros&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;The above files are used for the "general" configuration of Nagios. Adding and configuring hosts is so flexible, that it may actually be difficult. There are many ways that hosts, hostgroups, services, and service groups can be setup. I have seen a single file with all of the above defined, I have also seen it broken down to one config file per site, or even one config file for each object. There is a balance there, and you just have to find it. If you aren't sure what you want to do, keep them all in one file for your own sanity.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Although the "checks" aren't configuration files, they are integral in configuring the system. All of the binaries for checking hosts/services are located in /usr/local/nagios/libexec. These files may be written in a variety of languages (such as perl), but they don't all work the same. The easiest way to find out the proper syntax is to use the -h switch to bring up the help for the check. &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The checks are required to send specific responses back to the server (such as Critical, Unknown, etc), so they will all do that. The difference will come in the type of check you are performing. I find it best to start out running the check from the command line to ensure that it is working. This can be done by changing to the libexec directory and running a check:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;./check_disk -H 10.1.2.2 -w 10% -c 5% -x /dev/sda1&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The above check will check the /dev/sda1 partition on the host 10.1.2.2 for freee space. If the space is equal to or less than 10% free, you will receive a warning (the -w) and if the free space is less than or equal to 5% a critical alert (-c) will be sent.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If, like me, you install this on a RedHat derivitive, you can use (sudo) service restart nagios to restart nagios. If you use a Debian derivitive, you can use (sudo) /etc/init.d/nagios restart.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;More to come...&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-8531784793306690077?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/8531784793306690077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=8531784793306690077' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/8531784793306690077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/8531784793306690077'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2009/07/configuring-nagios-overview.html' title='Configuring Nagios - Overview'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-6270703526076508834</id><published>2009-07-18T12:55:00.001-04:00</published><updated>2009-07-18T12:57:44.687-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><title type='text'>Excel VBA NSLookup</title><content type='html'>I was looking for this very thing the other day and found it on Experts-Exchange. I am simply placing it here for my own reference and if anyone else is looking for it. Basically, you have a list of computer names and need to quickly get all of their IP addresses. Follow the directions in this post and BOOM!&lt;br /&gt;&lt;br /&gt;http://www.experts-exchange.com/Software/Office_Productivity/Office_Suites/MS_Office/Excel/Q_22048616.html&lt;br /&gt;&lt;br /&gt;The author is zorvek: http://www.experts-exchange.com/M_1677072.html&lt;br /&gt;&lt;br /&gt;Very handy thing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-6270703526076508834?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/6270703526076508834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=6270703526076508834' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/6270703526076508834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/6270703526076508834'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2009/07/excel-vba-nslookup.html' title='Excel VBA NSLookup'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-5213205524666054009</id><published>2009-06-17T07:46:00.006-04:00</published><updated>2009-10-11T12:01:25.624-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='VBScript'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>VBScript to Check Server Health</title><content type='html'>This script creates a mini-report of server health. At my current company, we are required to send a report twice per day of critical systems. For the first couple of weeks I did this report by hand, but after a couple of times doing that I had to script it.&lt;br /&gt;&lt;br /&gt;The script loops through a list of servers in a text file, gathers disk space and critical service state, writes the info to an Excel sheet, and then sends the sheet via email.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Some specifics:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The script loops through all drives. If the drive (such as A:) has no size, the drive letter is added with no value.&lt;/li&gt;&lt;li&gt;The services are predetermined. For example, if a server is an Exchange server, the script looks for the relevant Exchange services to ensure that they are running and prints their state to the sheet.&lt;/li&gt;&lt;li&gt;There is a condition, if the disk space is less than 10% free and/or any of the critical services are stopped, the message is sent only to the engineer (me) as an important message. If everything is OK the sheet is sent out to the appropriate recipients (my boss and team).&lt;/li&gt;&lt;li&gt;The worksheet is automatically deleted after the message is sent.&lt;/li&gt;&lt;/ol&gt;Making the script work:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;strEngineer - this is the person running the script&lt;br /&gt;&lt;/li&gt;&lt;li&gt;strDirectory - this is the directory where the script and list of servers lives&lt;br /&gt;&lt;/li&gt;&lt;li&gt;strFileName - the name of the excel sheet used for writing and attaching to the message&lt;/li&gt;&lt;li&gt;SendAttach() - this sub contains a conditional statement with the email address of the recipient when all conditions are OK. This address needs to be changed to whomever receives the report.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;'***************************************************************&lt;br /&gt;'Server Check script&lt;br /&gt;'Created By: Brian Bohanon&lt;br /&gt;'-This script reads in a list of servers from a text file and&lt;br /&gt;'-queries each server using WMI for hard disk space and service&lt;br /&gt;'-status.&lt;br /&gt;'***Customizations****&lt;br /&gt;'strEngineer = Email address of engineer running script&lt;br /&gt;'strDirectory = Directory of server list and script&lt;br /&gt;'srcFileName = name of file containing list of servers&lt;br /&gt;'strLocation = office location&lt;br /&gt;'***************************************************************&lt;br /&gt;&lt;br /&gt;'Global variable to determine who to mail the report to&lt;br /&gt;Dim strMailFlag, strEngineer, strDirectory, strFileName&lt;br /&gt;&lt;br /&gt;'Change to the address of the engineer running the script&lt;br /&gt;strEngineer = "engineer@myjob.com"&lt;br /&gt;'Change to the directory where the script and server list live&lt;br /&gt;strDirectory = "C:\ServerChecks\"&lt;br /&gt;'Change to the appropriate location&lt;br /&gt;strLocation = "My Office"&lt;br /&gt;'Excel file name&lt;br /&gt;strFileName = strDirectory &amp;amp; strLocation &amp;amp; "_Server_Checks_" &amp;amp; Month(Date()) &amp;amp; "_" &amp;amp; Day(Date()) &amp;amp; "_" &amp;amp; Year(Date()) &amp;amp; " " &amp;amp; Right(Time(),2) &amp;amp; ".xls"&lt;br /&gt;'Change this variable to another location if needed&lt;br /&gt;srcFileName = "servers.txt"&lt;br /&gt;&lt;br /&gt;CreateWorkbook()&lt;br /&gt;SendAttach()&lt;br /&gt;DeleteFile()&lt;br /&gt;MsgBox "Complete"&lt;br /&gt;&lt;br /&gt;Sub CreateWorkbook()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim disk_size, disk_free&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dim m,n&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set objExcel = CreateObject("Excel.Application")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set objWorkbook = objExcel.Workbooks.Add()&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Column headers&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Cells(m, n) = "Server Name"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Cells(m, n).Font.Bold = True&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = n + 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Cells(m, n) = "Free Space"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Cells(m, n).Font.Bold = True&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = n + 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Cells(m, n) = "Services"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Cells(m, n).Font.Bold = True&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = n + 1&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Open File of server names -------------------------------------&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;i = 0 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set objFSO = CreateObject("Scripting.FileSystemObject")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Open the text file for reading&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set objFile = objFSO.OpenTextFile(srcFileName, 1) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Do Until objFile.AtEndOfStream &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Redim Preserve arrFileLines(i) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;arrFileLines(i) = objFile.ReadLine &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;i = i + 1 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Loop &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;objFile.Close &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;'---------------------------------------------------------------&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 3&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;'For each server name get info and put into worksheet&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;For l = Ubound(arrFileLines) to LBound(arrFileLines) Step -1 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'set computer to the current index in the array&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strComputer = arrFileLines(l)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'connect to the computer's WMI service&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set objWMIService = GetObject("winmgmts:\\" &amp;amp; strComputer &amp;amp; "\root\cimv2")  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If Err &amp;lt;&amp;gt; 0 Then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DisplayErrorInfo()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Quit&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End If&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Cells(m, n) = strComputer&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Cells(m, n).Font.Bold = True&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;j = m&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = m + 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'-----------------------------------------------------------&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set objFSO = CreateObject("Scripting.FileSystemObject")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set colServices = objWMIService.ExecQuery("Select * From Win32_Service")&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;For each objDisk in colDisks&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Cells(m, n) = objDisk.DeviceID&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = n + 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Convert into GB&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If objDisk.Size &amp;gt; 0 Then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;disk_size = objDisk.Size / 1073741824&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;disk_free = objDisk.FreeSpace / 1073741824&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If disk_free &amp;gt; 0 Then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strPercent = Round((int(disk_free)/int(disk_size)*100),2)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Check the percentage of the disk free space - if less than 10% free, only mail to engineer, not team&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If strPercent &amp;lt; 10 Then &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strMailFlag = 0 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Else &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strMailFlag = 1 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End If &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Else &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strMailFlag = 0 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End If &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Write to Excel &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Cells(m, n) = "Total: " &amp;amp; int(disk_size) &amp;amp; "GB" &amp;amp;  " Free: " &amp;amp; int(disk_free) &amp;amp; "GB" &amp;amp; " (" &amp;amp; strPercent &amp;amp; "%)" &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End If &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Move to next cell &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = 1 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = m + 1 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Next  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Check the status of predetermined services------------------- &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'New services can be added based on the service name &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;For Each objService in colServices &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If InStr(objService.Name, "MSExchangeIS") Then &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Cells(j, 3) = objService.Name &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Cells(j, 4) = objService.State &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If objService.State = "Stopped" Then &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strmailflag = 0 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End if &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;j = j + 1 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ElseIf InStr(objService.Name, "MSExchangeMGMT") Then &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Cells(j, 3) = objService.Name &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Cells(j, 4) = objService.State &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If objService.State = "Stopped" Then &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strmailflag = 0 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End if &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;j = j + 1 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ElseIf InStr(objService.Name, "MSExchangeMTA") Then &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Cells(j, 3) = objService.Name &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Cells(j, 4) = objService.State &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If objService.State = "Stopped" Then &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strmailflag = 0 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End if &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;j = j + 1 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ElseIf InStr(objService.Name, "MSExchangeSA") Then &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Cells(j, 3) = objService.Name &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Cells(j, 4) = objService.State &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If objService.State = "Stopped" Then &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strmailflag = 0 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End if &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;j = j + 1 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ElseIf InStr(objService.Name, "IISADMIN") Then &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Cells(j, 3) = objService.Name &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Cells(j, 4) = objService.State &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If objService.State = "Stopped" Then &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strmailflag = 0 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End if &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;j = j + 1 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ElseIf InStr(objService.Name, "W3SVC") Then &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Cells(j, 3) = objService.Name &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Cells(j, 4) = objService.State &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If objService.State = "Stopped" Then &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strmailflag = 0 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End if &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;j = j + 1 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End If &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Next  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set objService = Nothing &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set objDisk = Nothing &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = m + 3 &amp;nbsp;&amp;nbsp;&amp;nbsp;Next  &amp;nbsp;&amp;nbsp;&amp;nbsp;'-------------------------------------------------------------- &amp;nbsp;&amp;nbsp;&amp;nbsp;' Autofit the first column to fit the longest service name &amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Columns("A:Z").EntireColumn.AutoFit &amp;nbsp;&amp;nbsp;&amp;nbsp;'Delete remaining worksheets &amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Worksheets("Sheet2").Delete &amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Worksheets("Sheet3").Delete &amp;nbsp;&amp;nbsp;&amp;nbsp;'Save &amp;nbsp;&amp;nbsp;&amp;nbsp;objWorkbook.SaveAs strDirectory &amp;amp; strLocation &amp;amp; "_Server_Checks_" &amp;amp; Month(Date()) &amp;amp; "_" &amp;amp; Day(Date()) &amp;amp; "_" &amp;amp; Year(Date()) &amp;amp; " " &amp;amp; Right(Time(),2) &amp;amp; ".xls", 56 &amp;nbsp;&amp;nbsp;&amp;nbsp;'Close Excel &amp;nbsp;&amp;nbsp;&amp;nbsp;objExcel.Quit  &amp;nbsp;&amp;nbsp;&amp;nbsp;Set objExcel = Nothing &amp;nbsp;&amp;nbsp;&amp;nbsp;Set objFSO = Nothing &amp;nbsp;&amp;nbsp;&amp;nbsp;Set objWMIService = Nothing  End Sub  'Create a mail message and send it via Outlook sub SendAttach()   &amp;nbsp;&amp;nbsp;&amp;nbsp;'Open mail, adress, attach report &amp;nbsp;&amp;nbsp;&amp;nbsp;Dim objOutlk &amp;nbsp;&amp;nbsp;&amp;nbsp;Dim objMail &amp;nbsp;&amp;nbsp;&amp;nbsp;Dim strMsg &amp;nbsp;&amp;nbsp;&amp;nbsp;Const olMailItem = 0  &amp;nbsp;&amp;nbsp;&amp;nbsp;'Create a new message &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set objOutlk = createobject("Outlook.Application") &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set objMail = objOutlk.createitem(olMailItem) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If strMailFlag = 0 Then &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objMail.To = strEngineer &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objMail.Importance = 2 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Else &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objMail.To = "boss@myjob.com" &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objMail.cc = "myteam@myjob.com" 'Enter an address here To include a carbon copy; bcc is For blind carbon copy's &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'objMail.bcc = "" &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End if &amp;nbsp;&amp;nbsp;&amp;nbsp;'Set up Subject Line &amp;nbsp;&amp;nbsp;&amp;nbsp;objMail.subject = "Server Check " &amp;amp; strLocation &amp;amp; " " &amp;amp; Month(Date()) &amp;amp; "_" &amp;amp; Day(Date()) &amp;amp; "_" &amp;amp; Year(Date()) &amp;amp; " " &amp;amp; Right(Time(),2)  &amp;nbsp;&amp;nbsp;&amp;nbsp;objMail.attachments.add(strFileName)  &amp;nbsp;&amp;nbsp;&amp;nbsp;objMail.Send &amp;nbsp;&amp;nbsp;&amp;nbsp;'Clean up &amp;nbsp;&amp;nbsp;&amp;nbsp;Set objMail = nothing &amp;nbsp;&amp;nbsp;&amp;nbsp;Set objOutlk = nothing end sub  'Delete the file after sending Sub DeleteFile() &amp;nbsp;&amp;nbsp;&amp;nbsp;Set objFSO = CreateObject("Scripting.FileSystemObject")  &amp;nbsp;&amp;nbsp;&amp;nbsp;If objFSO.FileExists(strFileName) Then &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objFSO.DeleteFile strFileName &amp;nbsp;&amp;nbsp;&amp;nbsp;End if   &amp;nbsp;&amp;nbsp;&amp;nbsp;Set objFSO = nothing End Sub  Sub DisplayErrorInfo  &amp;nbsp;&amp;nbsp;&amp;nbsp;WScript.Echo "Error:      : " &amp;amp; Err &amp;nbsp;&amp;nbsp;&amp;nbsp;WScript.Echo "Error (hex) : &amp;amp;H" &amp;amp; Hex(Err) &amp;nbsp;&amp;nbsp;&amp;nbsp;WScript.Echo "Source      : " &amp;amp; Err.Source &amp;nbsp;&amp;nbsp;&amp;nbsp;WScript.Echo "Description : " &amp;amp; Err.Description &amp;nbsp;&amp;nbsp;&amp;nbsp;Err.Clear  End Sub&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/18241657-5213205524666054009?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/5213205524666054009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=5213205524666054009' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/5213205524666054009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/5213205524666054009'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2009/06/vbscript-to-check-server-health.html' title='VBScript to Check Server Health'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-5126596236074285030</id><published>2009-05-12T07:42:00.008-04:00</published><updated>2009-10-11T12:01:42.127-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='VBScript'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='ActriveDirectory'/><title type='text'>VBScript to Find Users with Password Set to Never Expire</title><content type='html'>The script below will search the current directory or one specified by the user and search for all of the accounts that have the attribute "Password Never Expires" set to true. The results are placed in a CSV file in the directory that the script is run from. &lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;Set WshShell = WScript.CreateObject("WScript.Shell")&lt;br /&gt;strVer = "Ver 1.0 "&lt;br /&gt;Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")&lt;br /&gt;Set oFile = FileSystem.CreateTextFile("PWDNeverExpires.csv", true)&lt;br /&gt;&lt;br /&gt;strDomain = WshShell.ExpandEnvironmentStrings("%USERDOMAIN%")&lt;br /&gt;strUserName = WshShell.ExpandEnvironmentStrings("%USERNAME%")&lt;br /&gt;strOS = WshShell.ExpandEnvironmentStrings("%OS%")&lt;br /&gt;&lt;br /&gt;strMessage = strMessage &amp;amp; "Hit Cancel to quit"&lt;br /&gt;strTitle = "Domain to Search"&lt;br /&gt;&lt;br /&gt;'Get Domain Name&lt;br /&gt;UserDomain = InputBox(strMessage, strTitle, strDomain)&lt;br /&gt;strMessage = ""&lt;br /&gt;strTitle = ""&lt;br /&gt;&lt;br /&gt;strMessage = "This may take a few minutes. . ."&lt;br /&gt;WshShell.Popup strMessage,2,"One moment please. . . "&lt;br /&gt;strMessage = ""&lt;br /&gt;&lt;br /&gt;Set objDomain = GetObject("WinNT://" &amp;amp; UserDomain)&lt;br /&gt;objDomain.Filter = Array("User")&lt;br /&gt;&lt;br /&gt;For Each objUser In objDomain&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;'Attempt to bind to the user&lt;br /&gt;&amp;nbsp;&amp;nbsp;Set UserName = GetObject("WinNT://"&amp;amp; UserDomain &amp;amp;"/"&amp;amp; objUser.Name &amp;amp;",User")&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;'Check password attribute&lt;br /&gt;&amp;nbsp;&amp;nbsp;objPwdExpires = UserName.Get("UserFlags")&lt;br /&gt;&amp;nbsp;&amp;nbsp;If (objPwdExpires And &amp;amp;H10000) &amp;lt;&amp;gt; 0 Then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objPwdExpiresTrue = "Yes"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strPwdExpires = "Date Set: "&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;msgPwdExpires = "Password Set to Never Expire: "&lt;br /&gt;&amp;nbsp;&amp;nbsp;Else objPwdExpiresTrue = "No"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strPwdExpires = "Password Expires: "&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;msgPwdExpires = "Password Set to Never Expire: "&lt;br /&gt;&amp;nbsp;&amp;nbsp;End If&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;oFile.WriteLine (UserName.fullname &amp;amp; "," &amp;amp; UserName.name &amp;amp; "," &amp;amp; msgPwdExpires &amp;amp; &amp;nbsp;objPwdExpiresTrue &amp;amp; "," &amp;amp; strPwdExpires &amp;amp; objUser.PasswordExpirationDate)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;Set UserName = Nothing&lt;br /&gt;Next&lt;br /&gt;Wscript.Echo "Password Check Complete"&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/18241657-5126596236074285030?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/5126596236074285030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=5126596236074285030' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/5126596236074285030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/5126596236074285030'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2009/05/vbscript-to-find-users-with-password.html' title='VBScript to Find Users with Password Set to Never Expire'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-1674493875752479365</id><published>2009-05-11T07:58:00.008-04:00</published><updated>2009-10-11T12:02:13.242-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='sun'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='unix'/><title type='text'>Setting the Default Gateway on SunOS</title><content type='html'>Setting the default gateway in Sun's OS is different than any other system I have used. If the gateway isn't set using the means below, it will default to using the local interface as the default gateway. This works fine if everything is on the same subnet.&lt;br /&gt;&lt;br /&gt;I handle this in two steps, setting the default gateway instantly and setting the default gateway to be active upon reboot. Otherwise, to only create the /etc/defaultrouter file would require that the system reboot before it becomes active.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;To view the current settings use&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;netstat -nr&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;To set the gateway to be active immediately:&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;route add default X.X.X.X&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;To set the gateway to active upon reboot:&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;vi /etc/defaultrouter&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;add a line with the IP address of the default gateway&lt;br /&gt;&lt;br /&gt;On SunOS (by default) the gateway is set during run level 2 using the /etc/rc2.d/S69inet script. This script specifically looks for the existence of the /etc/defaultrouter file.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-1674493875752479365?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/1674493875752479365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=1674493875752479365' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/1674493875752479365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/1674493875752479365'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2009/05/setting-default-gateway-on-sunos.html' title='Setting the Default Gateway on SunOS'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-8782010202345886172</id><published>2009-04-02T23:10:00.020-04:00</published><updated>2009-10-11T12:02:34.823-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VMWare'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='Squid'/><title type='text'>How-to install Virtual Machine with Ubuntu/Squid/Dansguardian/Clam AV/Bannerfilter/SARG</title><content type='html'>This is a how-to that chronicles how I setup Ubuntu/Squid/Dansguardian/Clam AV/Bannerfilter/SARG to monitor and filter the Internet content that my children have access to. Although there are many content filtering solutions, I chose this because I know it works and it was free. I have installed this same solution several times and it has always done the job. The configuration here is not guaranteed, but you should be able to copy and paste most of the commands from here to install this solution.&lt;br /&gt;&lt;br /&gt;Briefly, the components are as follows:&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;VMWare Server&lt;/li&gt;&lt;li&gt;Ubuntu Desktop 8.10&lt;/li&gt;&lt;li&gt;Squid - Proxy server for caching and access control&lt;/li&gt;&lt;li&gt;Dansguardian - content filter that will be the "configured proxy" on the clients, and sends requests to Squid&lt;/li&gt;&lt;li&gt;Clam AV - free antivirus to stop viruses at the proxy&lt;/li&gt;&lt;li&gt;Banner Filter - scans the pages as they are returned for ads and blocks them from being displayed&lt;/li&gt;&lt;li&gt;SARG - Squid reporting module&lt;/li&gt;&lt;li&gt;Apache2 - Web server&lt;/li&gt;&lt;li&gt;Lynx - text based browser&lt;/li&gt;&lt;/ul&gt;Below are the instructions to configure this for my environment, but I have noted the areas that you will need to change for your environment (such as IP address of the proxy, etc.)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Setup the Virtual Environment&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Download and install &lt;a href="http://www.vmware.com/"&gt;VMWare Server&lt;/a&gt; (or whatever virtual environment you want). There are products available that will run on almost any operating system. I use VMWare Server 2.0 running on the main computer in our house (it is always on).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Install Ubuntu&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Download the &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt; ISO&lt;br /&gt;&lt;br /&gt;Install Ubuntu by mounting the ISO in the Virtual Server and following the prompts to install the default desktop. If you aren't sure about what to choose, just accept the defaults.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Note:&lt;/span&gt; Set the IP address to a static address&lt;br /&gt;&lt;br /&gt;Run APT Update to update the software packages cache &lt;br /&gt;&lt;div id="divCode"&gt;sudo apt-get update&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Install Squid, ClamAV-daemon, Dansguardian, SARG, Apache2, Lynx &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Install squid with the command&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;sudo apt-get install squid, clamav-daemon, dansguardian, sarg, apache2, lynx&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Configure ClamAV-daemon by setting it to update the virus definitions automatically&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;sudo at 1:00 tomorrow&lt;br /&gt;at&amp;gt;clamscan -i /home/username&lt;br /&gt;&amp;gt;mail root@localhostat&lt;br /&gt;&amp;gt;   Enter&lt;br /&gt;job 2 at Mon Mar 30 01:00:00 2009&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;You can verify that clam av is running by checking for the process&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;ps -ef | grep clamav&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Configure Squid proxy server&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Copy the file /etc/squid/squid.conf for a backup:&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Edit the squid.conf file&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;sudo vim /etc/squid/squid.conf&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Search for the line TAG: visible_hostname&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;/TAG: visible_hostname&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Move the cursor to the bottom line of that section after # none and hit the "i" key to insert the text&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;visible_hostname squid&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Find the line # http_access allow localnet&lt;br /&gt;and delete the # - this will allow for all clients on the local network to get to the Internet&lt;br /&gt;&lt;br /&gt;Add a user named squid&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;sudo adduser squid&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Restart the squid service&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;sudo /etc/init.d/squid restart&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Install Bannerfilter&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Download bannerfilter using wget&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;wget http://phroggy.com/files/unix/bannerfilter-1.31.tar.gz&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Expand the archive&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;tar -zxvf bannerfilter-1.31.tar.gz&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Make a bannerfilter directory&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;sudo mkdir /etc/squid/bannerfilter&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Move the bannerfilter folder&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;mv bannerfilter-1.31/* /etc/squid/bannerfilter&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Make a bannerfilter directory&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;sudo mkdir/var/www/bannerfilter&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Move the www contents to the /var/www/bannerfilter&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;sudo mv /etc/squid/bannerfilter/www/* /var/www/bannerfilter&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;You should now be able to browse http://ip_address/bannerfilter&lt;br /&gt;&lt;br /&gt;Test that the redirector.pl script is functioning&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;sudo perl /etc/squid/bannerfilter/redirector.pl&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Type in something like "hello world" and  you should see hello world printed to the screen, hit CTRL+C&lt;br /&gt;&lt;br /&gt;Edit the squid.conf file again&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;sudo vim /etc/squid/squid.conf&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Add the following line to the end of the squid.conf&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;redirect_program /var/www/bannerfilter/redirector.pl&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Then restart the Squid service&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;sudo /etc/init.d/squid restart&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Configure your browser to use the proxy settings&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Internet Explorer: Go to Tools-&amp;gt;Options-&amp;gt;Connection-Lan Settings and check the box for "Use a proxy server for your LAN...) then type the address of the Virtual Machine (my case 172.26.1.10) and set the port to 3128(this is the port that dansguardian uses). Check the box for Bypass proxy server for local addresses&lt;br /&gt;&lt;br /&gt;Firefox - Tools-&amp;gt;Options-&amp;gt;Advanced-&amp;gt;Network tab-&amp;gt;Settings. Select Manual proxy configuration and set the HTTP proxy to the IP address of the Virtual Machine and the port to 3128. Check the box "use this proxy for all protocols&lt;br /&gt;&lt;br /&gt;Go to &lt;a href="http://127.0.0.1/test.html"&gt;http://127.0.0.1/test.html&lt;/a&gt; to see if the proxy works&lt;br /&gt;&lt;br /&gt;Run the /update.sh script to update the data files&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;cd /etc/squid/bannerfilter&lt;br /&gt;sudo ./update.sh&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Schedule bannerfilter for auto-updates&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;sudo crontab -e&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Add the line 0 12 * * * /etc/squid/bannerfilter/update.sh&lt;br /&gt;&lt;br /&gt;Save the file and quit vim&lt;br /&gt;&lt;br /&gt;To test if bannerfilter is working go to a site with a lot of ads (like &lt;a href="http://www.about.com/"&gt;about.com&lt;/a&gt;) and if you see the words "Blocked" in what would be an advertisement spot then it works&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Configure Dansguardian&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;The main configuration for Dansguardian is located in /etc/dansguardian/dansguardian.conf&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;sudo vim /etc/dansguardian/dansguardian.conf&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Change the line accessdeniedaddress = 'http://ip_address/cgi-bin/dansguardian.pl ' to the local IP address that was assigned to the Ubuntu virtual machine&lt;br /&gt;&lt;br /&gt;Add a # in front of the line:&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;UNCONFIGURED - Please remove this line after configuration&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Restart dansguardian:&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;sudo /etc/init.d/dansguardian&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Configuring the browser to use Dansguardian by going back into the browser settings and change the proxy port from 3128 to 8080&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Installing SARG (with Webmin)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I have found that SARG works best if you have a web interface. I like to use webmin for this.&lt;br /&gt;&lt;br /&gt;To install the Webmin dependancies&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;sudo apt-get install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl libmd5-perl&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Download  Webmin&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;wget http://prdownloads.sourceforge.net/webadmin/webmin_1.340_all.deb&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Install webmin&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;sudo dpkg -i webmin_1.340_all.deb&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Set the password for Webmin&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;sudo /usr/share/webmin/changepass.pl /etc/webmin root password&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Browse to the webmin interface to check the reporting by browsing to http://ip_address:10000 where ip_address is the IP of the Ubuntu virtual machine&lt;br /&gt;&lt;br /&gt;The following list is the features that should be working&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;ctrl-d&gt;Keyword blocking&lt;/ctrl-d&gt;&lt;/li&gt;&lt;li&gt;&lt;ctrl-d&gt;Advertisement blocking&lt;/ctrl-d&gt;&lt;/li&gt;&lt;li&gt;&lt;ctrl-d&gt;URL blocking&lt;/ctrl-d&gt;&lt;/li&gt;&lt;li&gt;&lt;ctrl-d&gt;Antivirus&lt;/ctrl-d&gt;&lt;/li&gt;&lt;li&gt;&lt;ctrl-d&gt;Caching&lt;/ctrl-d&gt;&lt;/li&gt;&lt;li&gt;&lt;ctrl-d&gt;Reporting&lt;/ctrl-d&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-8782010202345886172?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/8782010202345886172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=8782010202345886172' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/8782010202345886172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/8782010202345886172'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2009/04/how-to-install-virtual-machine-with.html' title='How-to install Virtual Machine with Ubuntu/Squid/Dansguardian/Clam AV/Bannerfilter/SARG'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-5943037937863916436</id><published>2009-03-24T08:43:00.006-04:00</published><updated>2009-10-11T12:03:19.091-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blackberry'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>Restarting the Blackberry Enterprise Server Services</title><content type='html'>Sometimes the&amp;nbsp;Blackberry Enterprise Server (BES) seems to stop communicating and the devices will no longer be able to send/receive messages or reconcile the calendars and other items. I am yet to identify why this happens, but you can identify it by going into the Blackberry console and viewing the users list. If none of the devices have contacted the server (last contact time), then the server has probably lost communication. To rectify this problem, the services can be restarted.&lt;br /&gt;&lt;br /&gt;The BES services need to be restarted in a specific order. Go into the Services console on the server (Start-&amp;gt;Run, type in services.msc). The order to restart these services is:&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Blackberry Router&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Blackberry Controller&lt;/li&gt;&lt;li&gt;Blackberry Dispatcher&lt;/li&gt;&lt;li&gt;Start all of the remaining services that begin with Blackberry&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-5943037937863916436?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/5943037937863916436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=5943037937863916436' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/5943037937863916436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/5943037937863916436'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2009/03/restarting-blackberry-enterprise.html' title='Restarting the Blackberry Enterprise Server Services'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-3580290704306587849</id><published>2009-03-21T10:23:00.011-04:00</published><updated>2009-10-11T12:03:37.249-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='free'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Linux Mint - Great Linux Distribution</title><content type='html'>I have spent most of my years working with &lt;a href="http://www.redhat.com/" linkrel="nofollow" target="_blank" title="RedHat"&gt;RedHat&lt;/a&gt; /&lt;a href="http://fedoraproject.org/" linkrel="nofollow" target="_blank" title="Fedora"&gt;Fedora&lt;/a&gt;. For the past year, I have been working with &lt;a href="http://www.ubuntu.com/" linkrel="nofollow" target="_blank" title="Ubuntu"&gt;Ubuntu&lt;/a&gt;. Last night I found &lt;a href="http://www.linuxmint.com/" linkrel="nofollow" target="_blank" title="Linux Mint"&gt;Linux Mint&lt;/a&gt;. This is the most flexible, easiest-to-install desktop Linux I have ever used. I have only been running it for a few hours, and I'm sure I will come across something that I need that I can't do. However, this is the best distro I have used in a long time.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&amp;nbsp;The reasons that I really like it include the following:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The &lt;a href="http://www.linuxmint.com/download.php" linkrel="nofollow" target="_blank" title="ISO"&gt;ISO&lt;/a&gt; comes with an exe installer that you run from Windows. This partitions part of your Windows drive (as much as you tell it to), creates an entry in add/remove programs so you can remove it from Windows, and creates a dual-boot menu.&lt;/li&gt;&lt;li&gt;The install was extremely fast. It took me around 40 minutes to download, install, and boot to the desktop.&lt;/li&gt;&lt;li&gt;The system worked flawlessly with my T60p hardware. The wireless had zero-config (aside from the key) and it gave a little pop-up that it recognized new wireless networks. The only driver that I had to install was the ATI graphics driver (the system worked fine with the default driver). This driver was "offered" by the system and had a GUI for the install; I didn't have to search it out with 800x600 resolution and fiddle with installing it.&lt;/li&gt;&lt;li&gt;The desktop is beautiful. It's clean and comes with a (Start) menu that allows for similar functionality of "pin to start menu" in Windows using application favorites.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Some of the other realy nice features are:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Built-in "net nanny"&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_ke4YiM74LBs/ScT-Vd7kmLI/AAAAAAAAATU/zJSedN2o744/s1600-h/Screenshot-mintNanny.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5315653104969226418" src="http://4.bp.blogspot.com/_ke4YiM74LBs/ScT-Vd7kmLI/AAAAAAAAATU/zJSedN2o744/s200/Screenshot-mintNanny.png" style="cursor: pointer; display: block; height: 200px; margin: 0px auto 10px; text-align: center; width: 171px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Right-click to upload&lt;br /&gt;&lt;/div&gt;&lt;div id="ybf3" style="padding: 1em 0pt; text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_ke4YiM74LBs/ScT-i40LnEI/AAAAAAAAATc/M4XnFeD5i-o/s1600-h/Screenshot-mintUpload.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5315653335524285506" src="http://1.bp.blogspot.com/_ke4YiM74LBs/ScT-i40LnEI/AAAAAAAAATc/M4XnFeD5i-o/s200/Screenshot-mintUpload.png" style="cursor: pointer; display: block; height: 200px; margin: 0px auto 10px; text-align: center; width: 136px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Backup software (mintBackup)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id="tg2j" style="padding: 1em 0pt; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_ke4YiM74LBs/ScT-2OzV6JI/AAAAAAAAAT0/CFfi4ETGZFw/s1600-h/Screenshot-mintBackup.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5315653667843860626" src="http://4.bp.blogspot.com/_ke4YiM74LBs/ScT-2OzV6JI/AAAAAAAAAT0/CFfi4ETGZFw/s200/Screenshot-mintBackup.png" style="cursor: pointer; display: block; height: 178px; margin: 0px auto 10px; text-align: center; width: 200px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;A driver application to help find and manage device drivers&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id="m6j8" style="padding: 1em 0pt; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_ke4YiM74LBs/ScT-2JhKNCI/AAAAAAAAATs/ERwR9PEf5ME/s1600-h/Screenshot-Hardware+Drivers.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5315653666425418786" src="http://1.bp.blogspot.com/_ke4YiM74LBs/ScT-2JhKNCI/AAAAAAAAATs/ERwR9PEf5ME/s200/Screenshot-Hardware+Drivers.png" style="cursor: pointer; display: block; height: 200px; margin: 0px auto 10px; text-align: center; width: 173px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;mintUpdate&lt;br /&gt;&lt;/div&gt;&lt;div id="rgyz" style="padding: 1em 0pt; text-align: center;"&gt;&lt;div id="m6j8" style="padding: 1em 0pt; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_ke4YiM74LBs/ScT-2eTtsgI/AAAAAAAAAT8/mhXUX2EXMl4/s1600-h/Screenshot-mintUpdate.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5315653672006169090" src="http://1.bp.blogspot.com/_ke4YiM74LBs/ScT-2eTtsgI/AAAAAAAAAT8/mhXUX2EXMl4/s200/Screenshot-mintUpdate.png" style="cursor: pointer; display: block; height: 168px; margin: 0px auto 10px; text-align: center; width: 200px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;A very user-friendly firewall application&lt;br /&gt;&lt;/div&gt;&lt;div id="pm18" style="padding: 1em 0pt; text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_ke4YiM74LBs/ScT-18u_SjI/AAAAAAAAATk/7ZfwYH8fTZg/s1600-h/Screenshot-Gufw.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5315653662993762866" src="http://1.bp.blogspot.com/_ke4YiM74LBs/ScT-18u_SjI/AAAAAAAAATk/7ZfwYH8fTZg/s200/Screenshot-Gufw.png" style="cursor: pointer; display: block; height: 197px; margin: 0px auto 10px; text-align: center; width: 200px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I made a 5 GB disk for it to use on my Windows machine and have been using it ever since. The best part is that if you don't like it, you just go to add/remove programs in Windows and uninstall.&lt;br /&gt;&lt;br /&gt;This is by far the easiest, most user-friendly Linux I have ever used.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-3580290704306587849?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/3580290704306587849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=3580290704306587849' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/3580290704306587849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/3580290704306587849'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2009/03/linux-mint-new-favorite-linux-distro.html' title='Linux Mint - Great Linux Distribution'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ke4YiM74LBs/ScT-Vd7kmLI/AAAAAAAAATU/zJSedN2o744/s72-c/Screenshot-mintNanny.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-5299730627823270962</id><published>2009-03-17T08:58:00.067-04:00</published><updated>2009-10-11T12:04:10.135-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='free'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='Nagios'/><title type='text'>How-To Install Nagios on Ubuntu Linux</title><content type='html'>After many attempts and how-tos, I was finally able to get Nagios installed on (Ubuntu) Linux. My first attempt was downloading an appliance from &lt;a href="http://www.jumpbox.com/"&gt;Jumpbox&lt;/a&gt;, then &lt;a href="http://fedoraproject.org/"&gt;Fedora 10&lt;/a&gt;, and finally, &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt;. This how-to will be broken out into three parts:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Download and install Ubuntu&lt;/li&gt;&lt;li&gt;Download, install, and configure Apache &lt;/li&gt;&lt;li&gt;Download, install, and configure Nagios&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;a name='more'&gt;&lt;/a&gt;Download and install Ubuntu:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.ubuntu.com/getubuntu/download"&gt;Download Ubuntu&lt;/a&gt; (I used version 8.10 of Ubuntu Desktop)&lt;/li&gt;&lt;li&gt;In &lt;a href="http://www.vmware.com/products/server/"&gt;VMWare Server&lt;/a&gt;, I booted to the ISO image&lt;/li&gt;&lt;li&gt;Choose "Install Ubuntu"&lt;/li&gt;&lt;li&gt;Choose English as the language&lt;/li&gt;&lt;li&gt;Choose Time Zone&lt;/li&gt;&lt;li&gt;Keyboard&lt;/li&gt;&lt;li&gt;Select the Guided (use entire disk) option&lt;/li&gt;&lt;li&gt;Fill in the user and computer information&lt;/li&gt;&lt;li&gt;Click Install&lt;/li&gt;&lt;li&gt;Click Restart&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Once Ubuntu is installed, you can begin installing the prerequisites.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;All commands will be issued with sudo command. If you prefer, you can just su as root and run everything that way.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Download, install and Configure Apache&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;sudo apt-get install build-essential&lt;/code&gt; :this will install some necessary compilers&lt;/li&gt;&lt;li&gt;&lt;code&gt;sudo apt-get install libgd2-xpm-dev&lt;/code&gt; :Install GD Libraries&lt;/li&gt;&lt;li&gt;&lt;code&gt;sudo apt-get install apache2&lt;/code&gt; : Install Apache2&lt;/li&gt;&lt;li&gt;&lt;code&gt;sudo apt-get install php5-common php5 libapache2-mod-php5&lt;/code&gt; :Install PHP for Apache2&lt;/li&gt;&lt;/ul&gt;Configure Apache to use PHP: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Run in a terminal:  &lt;code&gt;sudo vim /etc/apache2/apache2.con&lt;/code&gt;&lt;/li&gt;&lt;li&gt;Paste the following into the file: &lt;br /&gt;&lt;div id="divCode"&gt;&lt;code&gt;DirectoryIndex index.html index.php index.cgi&lt;/code&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; and restart the server with the command &lt;br /&gt;&lt;code&gt;sudo /etc/init.d/apache2 restart&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;At this point, build-essentials, libgd2-xpm-dev and Apache with PHP support should be installed. You can test this by opening a browser and going to &lt;a href="http://localhost/" linkrel="nofollow"&gt;http://localhost/&lt;/a&gt; to test Apache.&lt;br /&gt;To test PHP, create a new text file and enter &lt;br /&gt;&lt;code&gt;&amp;lt;?php phpinfo( );?&amp;gt;&lt;/code&gt;&lt;br /&gt;Save the file as test.php in your root web directory (should be /var/www). Then go to &lt;a href="http://localhost/test.php" linkrel="nofollow"&gt;http://localhost/test.php&lt;/a&gt; and this should display the PHP version information in the browser.&lt;br /&gt;&lt;br /&gt;If you can view the Apache start page and the PHP version info page, it's time to download and install Nagios.&lt;br /&gt;&lt;br /&gt;If you can't view the Apache start page: check that all of the packages are installed and the Apache service is running.&lt;br /&gt;&lt;br /&gt;If you can't view the PHP version info page: verify that PHP was installed.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Download, install, and configure Nagios&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Change to your home directory:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;cd ~/&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Download the current version of Nagios: &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=26589" linkrel="nofollow"&gt;http://sourceforge.net/project/showfiles.php?group_id=26589&lt;/a&gt;:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo wget http://downloads.sourceforge.net/nagios/nagios-3.1.0.tar.gz?use_mirror=voxel&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Download the current version of the Nagios Plugins: &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=29880" linkrel="nofollow"&gt;http://sourceforge.net/project/showfiles.php?group_id=29880&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;sudo wget http://downloads.sourceforge.net/nagiosplug/nagios-plugins-1.4.13.tar.gz?use_mirror=voxel&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Extract the Nagios tarball:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;sudo tar -zxvf nagios-3.1.0.tar.gz&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;and change to the nagios-3.1.0 directory&lt;br /&gt;&lt;br /&gt;&lt;code&gt;cd nagios-3.1.0&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Create a user to run the service and a group to run external commands:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;sudo useradd -m nagios&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;sudo passwd nagios&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;sudo groupadd nagcmd&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;sudo usermod -a -G nagcmd nagios&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;sudo usermod -a -G nagcmd www-data&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;Now install the Nagios tarballs that were downloaded previously:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;sudo ./configure --with-command-group=nagcmd&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;sudo make all&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;sudo make install&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;sudo make install-init&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;sudo make install-config&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;sudo make install-commandmode&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;sudo make install-webconf&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;Add a user for the Nagios interface:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Add the directives to Apache for Nagios:&lt;br /&gt;&lt;br /&gt;In a terminal type:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;sudo vim /etc/apache2/apache.conf&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Paste the text below into the conf file:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;&lt;code&gt;ScriptAlias /nagios/cgi-bin /usr/local/nagios/sbin&lt;br /&gt;&lt;br /&gt;&amp;lt;Directory "/usr/local/nagios/sbin"&amp;gt;&lt;br /&gt;Options ExecCGI&lt;br /&gt;AllowOverride None&lt;br /&gt;Order allow,deny&lt;br /&gt;Allow from all&lt;br /&gt;AuthType Basic&lt;br /&gt;AuthUserFile /usr/local/nagios/etc/htpasswd.users&lt;br /&gt;Require valid-user&lt;br /&gt;&amp;lt;/Directory&amp;gt;&lt;br /&gt;&lt;br /&gt;Alias /nagios /usr/local/nagios/share&lt;br /&gt;&lt;br /&gt;&amp;lt;Directory "/usr/local/nagios/share"&amp;gt;&lt;br /&gt;Options None&lt;br /&gt;AllowOverride None&lt;br /&gt;Order allow,deny&lt;br /&gt;Allow from all&lt;br /&gt;AuthType Basic&lt;br /&gt;AuthUserFile /usr/local/nagios/etc/htpasswd.users&lt;br /&gt;Require valid-user&lt;br /&gt;&amp;lt;/Directory&amp;gt;&lt;br /&gt;&lt;br /&gt;ServerName localhost&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/div&gt;Restart Apache:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;sudo /etc/init.d/apache2 restart&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Extract and compile the plugins that were downloaded earlier:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;cd ~/&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;tar -zxvf nagios-plugins-1.4.13.tar.gz&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cd nagios-plugins-1.4.13&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;sudo ./configure --with-nagios-user=nagios --with-nagios-group=nagios&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;sudo make&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;sudo make install&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;Create a link to start the service:&lt;br /&gt;&lt;code&gt;sudo ln -s /etc/init.d/nagios /etc/rcS.d/S99nagios&lt;/code&gt;&lt;br /&gt;Verify the config:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Start Nagios:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;sudo /etc/init.d/nagios start&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;You should now be able to log into the Nagios web interface (&lt;a href="http://localhost/nagios"&gt;http://localhost/nagios&lt;/a&gt;) using the nagiosadmin user and password.&lt;br /&gt;&lt;br /&gt;This how-to is actually a combination of the Nagios official documentation (&lt;a href="http://nagios.sourceforge.net/docs/3_0/quickstart-ubuntu.html"&gt;Ubuntu Quickstart&lt;/a&gt;), &lt;a href="http://albasit.wordpress.com/2008/01/08/installing-nagios-at-ubuntu-in-vmware/"&gt;Albasit's Nagios/Ubuntu/VMWare&lt;/a&gt; how-to, and some of my own work in-between. I appreciate the help I got from all of these documents.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-5299730627823270962?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/5299730627823270962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=5299730627823270962' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/5299730627823270962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/5299730627823270962'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2009/03/how-to-install-nagios-on-ubuntu-linux.html' title='How-To Install Nagios on Ubuntu Linux'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-737626108611669788</id><published>2009-03-10T09:06:00.016-04:00</published><updated>2010-06-24T11:49:10.968-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='VBScript'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='ActriveDirectory'/><title type='text'>VBScript to Map Drives Based on Group Membership</title><content type='html'>Often times, drives will need to mapped for users in a specific group. The script below uses a case statement to check for group membership and maps the drive accordingly. To modify the script simply change the &lt;code&gt;group name&lt;/code&gt; in the quotes and put the correct drive letter and UNC path for the drive mapping. &lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;'Group Drive Mappings Script&lt;br /&gt;&lt;br /&gt;Const HKEY_CURRENT_USER = &amp;amp;H80000001&lt;br /&gt;&lt;br /&gt;Dim WshNetwork, WshShell&lt;br /&gt;Dim oDrives, fUser, fDomain, oGroupDict&lt;br /&gt;Dim ScriptLogName&lt;br /&gt;&lt;br /&gt;ScriptLogName = "_LoginScript.log"&lt;br /&gt;&lt;br /&gt;Set WshNetwork = WScript.CreateObject("WScript.Network")&lt;br /&gt;Set WshShell = WScript.CreateObject("WScript.Shell")&lt;br /&gt;Set oDrives = WshNetwork.EnumNetworkDrives&lt;br /&gt;Set fso = WScript.CreateObject("Scripting.FileSystemObject") &lt;br /&gt;Set inputFile = fso.OpenTextFile(fTMP &amp;amp; "\" &amp;amp; ScriptLogName, 2, True)&lt;br /&gt;&lt;br /&gt;fTMP = WshShell.ExpandEnvironmentStrings("%TEMP%")&lt;br /&gt;WshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")&lt;br /&gt;&lt;br /&gt;WriteLog(Now() &amp;amp; ": ****** Start Login Script ******")&lt;br /&gt;&lt;br /&gt;fUser = WshNetwork.UserName&lt;br /&gt;fDomain = WshNetwork.UserDomain&lt;br /&gt;&lt;br /&gt;'****** Group Drives ******&lt;br /&gt;&lt;br /&gt;WriteLog("Starting Group Script Area")&lt;br /&gt;&lt;br /&gt;if isMember("Accounting") then&lt;br /&gt;MapDrive "S:", "\\server\shared\"&lt;br /&gt;end if&lt;br /&gt;&lt;br /&gt;if isMember("Human Resources") then&lt;br /&gt;MapDrive "S:", "\\server\hr"&lt;br /&gt;end if&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'***** use elseif for mapping multiple groups to the same share*******&lt;br /&gt;if isMember("IT Infrastructure") then&lt;br /&gt;MapDrive "S:", "\\server\it"&lt;br /&gt;elseif isMember("Helpdesk Staff") then&lt;br /&gt;MapDrive "S:", "\\server\it"&lt;br /&gt;elseif isMember("Data Services") then&lt;br /&gt;MapDrive "S:", "\\server\it"&lt;br /&gt;end if&lt;br /&gt;&lt;br /&gt;WriteLog("Ending Group Script Area")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;WriteLog(Now() &amp;amp; ": ****** Login Script Complete ******")&lt;br /&gt;WriteLog("")&lt;br /&gt;&lt;br /&gt;Function IsMember(sGroup)&lt;br /&gt;Dim sAdsPath, oUser, oGroup&lt;br /&gt;&lt;br /&gt;If IsEmpty(oGroupDict) Then&lt;br /&gt;Set oGroupDict = CreateObject("Scripting.Dictionary")&lt;br /&gt;oGroupDict.CompareMode = vbTextCompare&lt;br /&gt;&lt;br /&gt;sAdsPath = WshNetwork.UserDomain &amp;amp; "/" &amp;amp; WshNetwork.UserName&lt;br /&gt;Set oUser = GetObject("WinNT://" &amp;amp; sAdsPath &amp;amp; ",user")&lt;br /&gt;&lt;br /&gt;For Each oGroup In oUser.Groups&lt;br /&gt;oGroupDict.Add oGroup.Name, "-"&lt;br /&gt;Next&lt;br /&gt;Set oUser = Nothing&lt;br /&gt;End If&lt;br /&gt;IsMember = CBool(oGroupDict.Exists(sGroup))&lt;br /&gt;if (IsMember) then&lt;br /&gt;WriteLog(Now() &amp;amp; " User is member of " &amp;amp; sGroup)&lt;br /&gt;end if&lt;br /&gt;&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;Sub MapDrive(sLetter,sUNC)&lt;br /&gt;Dim oNetwork&lt;br /&gt;Set oNetwork = WScript.CreateObject("WScript.Network")&lt;br /&gt;For i = 0 to oDrives.Count -1 Step 2&lt;br /&gt;if LCase(sLetter) = LCase(oDrives.Item(i)) then&lt;br /&gt;oNetwork.RemoveNetworkDrive sLetter, true, true&lt;br /&gt;WriteLog(Now() &amp;amp; ": Removed drive """ &amp;amp; sLetter &amp;amp; """ from share """ &amp;amp; sUNC &amp;amp; " (already connected) " &amp;amp; "")&lt;br /&gt;end if&lt;br /&gt;Next&lt;br /&gt;oNetwork.MapNetworkDrive sLetter,sUNC&lt;br /&gt;If Err.Number = 0 Then&lt;br /&gt;WriteLog(Now() &amp;amp; ": Connect """ &amp;amp; sLetter &amp;amp; """ to share """ &amp;amp; sUNC &amp;amp; """")&lt;br /&gt;else&lt;br /&gt;WriteLog(Now() &amp;amp; ": Failed to Connect """ &amp;amp; sLetter &amp;amp; """ to share """ &amp;amp; sUNC &amp;amp; """")&lt;br /&gt;end if&lt;br /&gt;on error goto 0&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;sub WriteLog(strEntry)&lt;br /&gt;inputFile.WriteLine(strEntry)&lt;br /&gt;End Sub&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-737626108611669788?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/737626108611669788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=737626108611669788' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/737626108611669788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/737626108611669788'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2009/03/vbscript-to-map-drives-based-on-group.html' title='VBScript to Map Drives Based on Group Membership'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-9046065099247841346</id><published>2009-03-07T17:23:00.013-05:00</published><updated>2009-03-07T18:21:09.381-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GroupPolicy'/><category scheme='http://www.blogger.com/atom/ns#' term='Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='VBScript'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='ActriveDirectory'/><title type='text'>How to Install Printers Using Group Policy</title><content type='html'>Deploying printers in Windows 2003 using Group Policy was a pretty lengthy process for me to figure out. Microsoft's documentation on this process is a bit cryptic, so I thought I would simplify the instructions. The prerequisites for this are the server must be R2 and the domain functional level must be Windows 2003. The steps I followed to accomplish this are:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Publish the printers using the &lt;a href="http://www.microsoft.com/windowsserver2003/gpmc/default.mspx" rel="nofollow"&gt;Group Policy Management Console&lt;/a&gt; (The print management console can also be used and is distributed as part of R2)&lt;/li&gt;&lt;li&gt;Copy the PushPrinterConnection.exe (located on the R2 server in the PMCSnap directory under the Windows directory&lt;/li&gt;&lt;li&gt;Add the PushPrinterConnection.exe to the computer start up scripts&lt;/li&gt;&lt;li&gt;Use VBScript to set the default printer for the specified computer&lt;/li&gt;&lt;/ol&gt;&lt;span class="fullpost"&gt; The first step is pretty straight forward. Using the GPMC, I added the printers to the existing group policy for these computers. These computers are Windows XP computers, so the printers must be assigned to the computer (per Microsoft: &lt;a href="http://technet.microsoft.com/en-us/library/cc722179.aspx" rel="nofollow"&gt;http://technet.microsoft.com/en-us/library/cc722179.aspx&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;The next step was to copy the PushPrinterConnection.exe executable to a central location (I used the domain scripts share - &lt;code&gt; \\domain\sysvol\domain\scripts)&lt;/code&gt;. This file is used by the computer to essentially execute the &lt;code&gt;RunDLL32 PrintUI.dll&lt;/code&gt; functionality that is available with the command line. The executable can be added to the computer start up scripts. I added the -log option so I could troubleshoot any problems with the printer installation.&lt;br /&gt;&lt;br /&gt;Because there are many printers and many computers located in different areas of the office, different computers will need different printers to be set as the default. The script to accomplish the is below and labeled "Set Default Printer".&lt;br /&gt;&lt;br /&gt;The final problem that I ran into with adding the printers through group policy was the fact that on the surface, you can't remove the printers. The help desk staff was re-imaging the machines to get rid of the printers. I wrote a script that will do this below labeled "Remove Deployed Printers". The easiest way I could find to do this was to have a new group (maybe, "Clean Machines") and assign this script as a startup script using group policy. This way, just changing the computer's group membership to "Clean Machines" and rebooting it would remove the deployed printers upon reboot.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt; The printers are actually added into the registry key&lt;br /&gt;&lt;code&gt;HKLM\SYSTEM\CurrentControlSet\Control\Print\Connections&lt;/code&gt;&lt;br /&gt;The script I wrote simply deletes this key. The printers could of course, be deleted from the registry manually.&lt;br/&gt;&lt;br /&gt;&lt;div id="divCode"&gt;&lt;code&gt;&lt;br /&gt;'Set Default Printer&lt;br /&gt;&lt;br /&gt;Dim WshNetwork&lt;br /&gt;&lt;br /&gt;Set WshNetwork = WScript.CreateObject("WScript.Network")&lt;br /&gt;&lt;br /&gt;'Begin Printer installation&lt;br /&gt; WScript.Sleep(35000)&lt;br /&gt; Select Case WshNetWork.ComputerName&lt;br /&gt;&lt;br /&gt; 'Choose which printer to install for which computer to set as default&lt;br /&gt;    Case "WS-10440"&lt;br /&gt;        WshNetwork.SetDefaultPrinter "\\Server\PRN-224"&lt;br /&gt;    Case "WS-10525"&lt;br /&gt;       WshNetwork.SetDefaultPrinter "\\Server\PRN-224"&lt;br /&gt;    Case "WS-10531"&lt;br /&gt;        WshNetwork.SetDefaultPrinter "\\Server\PRN-225"&lt;br /&gt;    Case "WS-10710"&lt;br /&gt;        WshNetwork.SetDefaultPrinter "\\Server\PRN-224"     &lt;br /&gt; End Select&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;div id="divCode"&gt;&lt;code&gt;&lt;br /&gt;'Remove Deployed Printers&lt;br /&gt;&lt;br /&gt;On Error Resume Next&lt;br /&gt;&lt;br /&gt;Const HKEY_LOCAL_MACHINE = &amp;amp;H80000002&lt;br /&gt;&lt;br /&gt;strComputer = "."&lt;br /&gt;&lt;br /&gt;strKeyPath = "SYSTEM\CurrentControlSet\Control\Print\Connections"&lt;br /&gt;&lt;br /&gt;Set objRegistry = GetObject("winmgmts:\\" &amp;amp; _&lt;br /&gt; strComputer &amp;amp; "\root\default:StdRegProv")&lt;br /&gt;&lt;br /&gt;DeleteSubkeys HKEY_LOCAL_MACHINE, strKeypath&lt;br /&gt;&lt;br /&gt;Sub DeleteSubkeys(HKEY_LOCAL_MACHINE, strKeyPath)&lt;br /&gt; objRegistry.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubkeys&lt;br /&gt;&lt;br /&gt; If IsArray(arrSubkeys) Then&lt;br /&gt;     For Each strSubkey In arrSubkeys&lt;br /&gt;      'MsgBox strKeyPath &amp;amp; "\" &amp;amp; strSubkey&lt;br /&gt;         DeleteSubkeys HKEY_LOCAL_MACHINE, strKeyPath &amp;amp; "\" &amp;amp; strSubkey&lt;br /&gt;     Next&lt;br /&gt; End If&lt;br /&gt;&lt;br /&gt; objRegistry.DeleteKey HKEY_LOCAL_MACHINE, strKeyPath&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;If this post was helpful or if you have any questions, please leave a comment and I will get back to you as soon as possible.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-9046065099247841346?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/9046065099247841346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=9046065099247841346' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/9046065099247841346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/9046065099247841346'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2009/03/how-to-install-printers-using-group.html' title='How to Install Printers Using Group Policy'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-3538402418904764353</id><published>2009-03-05T19:32:00.004-05:00</published><updated>2009-03-06T20:39:55.147-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Cluster'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Exchange'/><title type='text'>Windows Network Load Balancing: MAC (Layer 2) Address Resolution</title><content type='html'>I was asked today (by a very astute fellow) what MAC address clients receive when connecting to Exchange Client Access Servers using Windows Network Load Balancing.  This person had a very good understanding of how networking and load balancing works, and as I was describing how the system used a shared name and a shared IP address, he wanted me to explain what MAC address was added to the ARP (Address Resolution Protocol) table in clients. Which physical machine's MAC address is used? The answer is actually, neither.&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;This was not a question I could answer at that time. However, after a quick query on &lt;a href="http://www.google.com"&gt;Google&lt;/a&gt; and a little reading, I now have a much better understanding of how this works. &lt;br /&gt;&lt;br /&gt;Windows Network Load Balancing uses a "virtual" MAC address that is derived from a combination of the "cluster adapter" IP address and the priority of the node within the NLB configuration. For example, the cluster adapter IP address is 5.5.5.5 and there are two nodes (node 1 and node 2). The MAC address used when a client hits node 1 would be &lt;code&gt;02-01-5-5-5-5&lt;/code&gt;. The MAC address for the second node would be &lt;code&gt;02-02-5-5-5-5&lt;/code&gt;. The format for this MAC address is &lt;code&gt;02-h-5-5-5-5&lt;/code&gt;, where h = the priority number of the node (set in NLB) and 5-5-5-5 is based on the IP address of the cluster adapter (shared by both nodes). &lt;br /&gt;&lt;br /&gt;This is actually a pretty cool way to do it because you can scale nodes without worrying about physical MAC addresses because, the MAC addresses are virtual and thus don't require physical hardware.&lt;br /&gt;&lt;br /&gt;Source: Microsoft (&lt;a href="http://technet.microsoft.com/en-us/library/bb742455.aspx"&gt;http://technet.microsoft.com/en-us/library/bb742455.aspx&lt;/a&gt;)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-3538402418904764353?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/3538402418904764353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=3538402418904764353' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/3538402418904764353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/3538402418904764353'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2009/03/windows-network-load-balancing-mac.html' title='Windows Network Load Balancing: MAC (Layer 2) Address Resolution'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-5642593422607178641</id><published>2009-03-05T19:07:00.003-05:00</published><updated>2009-03-05T19:30:41.263-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='DNS'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Telnet: Temporary Failure in Name Resolution: Illegal Seek</title><content type='html'>When using a Windows client to telnet to a Linux server, I kept getting the following error:&lt;br /&gt;&lt;code&gt;temporary failure in name resolution: illegal seek&lt;/code&gt;&lt;br /&gt;The logs on the Linux server showed that the client was connecting, but they were never presented with a login prompt. After checking the Windows client's name resolution I checked name resolution on the Linux server. Everything worked properly on the Windows clients, but I got an error on the Linux server when trying to perform a &lt;code&gt;nslookup&lt;/code&gt; on the linux server for the Windows client's IP address. The error I was receiving when I did the &lt;code&gt;nslookup&lt;/code&gt; on the Linux server was &lt;code&gt;** server can't find 10.20.168.192.in-addr.arpa: SERVFAIL&lt;/code&gt;&lt;br /&gt;&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;The Linux server looks queries a Windows 2003 server for DNS. Upon seeing the above error from &lt;code&gt;nslookup&lt;/code&gt; I realized that the server couldn't do a reverse DNS look up for the client. After checking the DNS server I noticed that there was not a reverse DNS zone setup for the subnet that the client was in. I set up a revers lookup zone for the subnet and the clients were able to successfully telnet into the Linux box. &lt;br /&gt;&lt;br /&gt;The real question is why? Why is Linux doing a reverse DNS look up for telnet connections? Incidentally, clients could SSH to the Linux server without any problems. I found a pretty sufficient answer from "The Answer Guy" at this &lt;a href="http://linuxgazette.net/issue54/tag/3.html"&gt;site&lt;/a&gt;. He essentially explains that because telnet is an insecure protocol, Linux tries to counteract this by doing a "double reverse look up". This would help explain why SSH would work.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-5642593422607178641?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/5642593422607178641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=5642593422607178641' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/5642593422607178641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/5642593422607178641'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2009/03/telnet-temporary-failure-in-name.html' title='Telnet: Temporary Failure in Name Resolution: Illegal Seek'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-4373845087083979067</id><published>2009-03-03T11:20:00.005-05:00</published><updated>2009-03-03T11:59:33.322-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><category scheme='http://www.blogger.com/atom/ns#' term='PowerShell'/><category scheme='http://www.blogger.com/atom/ns#' term='Exchange'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Exchange 2007 - Finding Users with Items Over 180 Days</title><content type='html'>I am currently working on a migration from an in-house Exchange 2007 infrastructure to a hosted environment. As part of this move, there are new restrictions being placed on the mailboxes. One of these restrictions is that all mail over 180 days old is automatically deleted from the system. Prior to migrating the mailboxes, I need to know how many and which users have items older than 180 days.&lt;span class="fullpost"&gt;&lt;br /&gt;Finding this information was a two-step process:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Export all of the mailbox folder statistics to a CSV file&lt;/li&gt;&lt;li&gt;Scrub the resulting data with Excel to get a list of the users and their departments with mail items over 180 days old&lt;/li&gt;&lt;/ol&gt; The first part of this process was to export the folder statistics for each mailbox. I accomplished this using a combination of PowerShell cmdlets:&lt;br/&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;get-mailboxdatabase | get-mailbox -resultsize unlimited | get-mailboxfolderstatistics -folderscope all -includeoldestandnewestitems | export-csv mailbox_stats.csv&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;The cmdlets break down this way:&lt;ul&gt;&lt;li&gt;&lt;code&gt;get-mailboxdatabase&lt;/code&gt; fetches each database (this infrastructure employs multiple databases)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;get-mailbox&lt;/code&gt; runs through each mailbox in the current database&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;get-mailboxfolderstatistics&lt;/code&gt; returns specifics about the folders in the mailbox. &lt;code&gt;-folderscope all&lt;/code&gt; returns information about each folder under the top of information store and &lt;code&gt;-includeoldestandnewestitems&lt;/code&gt; includes the dates of the oldest item in the folder and the newest item in the folder&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;export-csv&lt;/code&gt; obviously exports the results to a CSV file&lt;br /&gt;&lt;/ul&gt;Once the information is in the CSV format: &lt;ol&gt;&lt;li&gt;I used a filter on the &lt;code&gt;OldestItemReceiveDate&lt;/code&gt; field with "before" criteria for 180 days prior to the cut-off date&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Once I had the list of results narrowed down to those with mail items over 180 days, I used some VBA functions to extract the user name and the department (the users are placed into OUs by department and the result of the &lt;code&gt;get-mailboxfolderstatistics&lt;/code&gt; cmdlet is the full "path" to the users folder including domain and OUs, so it was pretty easy for me to get their department)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I then copied the results to a new list and used an advanced filter on this list to get unique records only, and I had the final list of users with items over 180 days.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-4373845087083979067?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/4373845087083979067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=4373845087083979067' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/4373845087083979067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/4373845087083979067'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2009/03/exchange-2007-finding-users-with-items.html' title='Exchange 2007 - Finding Users with Items Over 180 Days'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-2441484056282633615</id><published>2009-03-02T10:50:00.017-05:00</published><updated>2009-03-03T17:07:50.401-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='Backup'/><title type='text'>Online Backup Software Reveiw</title><content type='html'>Have you ever thought about what you would lose if your computer crashed or was stolen? Would it be irreplaceable pictures of your family, or vital contact information for your business clients? Some people assume copying their information to a USB storage device or a CD is the best solution, but a better one exists.&lt;span class="fullpost"&gt; Online backup providers offer many benefits which physical copies simply can’t:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Automated backups:  You never have to remember to backup your data up&lt;/li&gt;&lt;li&gt;Online storage: You don’t have to worry about physical damage to your backups&lt;/li&gt;&lt;li&gt;Multiple computers: You can backup multiple computers to one location&lt;/li&gt;&lt;li&gt;Easy restore/transfer of files: You can easily restore or transfer your files to your repaired or new computer&lt;/li&gt;&lt;/ul&gt;When choosing an online backup solution, there are a few things to look for:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;What is the cost? Depending on the amount of space needed for your backups, you may be able to get this service for FREE. For additional storage these providers will only charge a small monthly fee.&lt;/li&gt;&lt;li&gt;How much storage do you need? The software will tell you how much storage you will need when you install them.&lt;/li&gt;&lt;li&gt;How viable is the company?  There are many companies in the market, but there are only a few that are going to be around in 5 years, when you need to restore your files.&lt;/li&gt;&lt;li&gt;Does the software install on your computer? As part of the criteria for the recommended vendors, the breadth of supported operating systems must at least support Windows XP, Windows Vista, and Apple MAC OS X.&lt;/li&gt;&lt;/ul&gt;Once you choose your provider it will take about 1 hour to setup an account, install the software, and run the first backup. These are my top recommendations, but you may also wish to investigate online backup providers for yourself. The most important thing is to choose a company you trust and immediately backup your files!. If you have any questions about which software is right for you, please leave a comment or contact me directly on &lt;a href="http://www.crossloop.com/brianbohanon"&gt;CrossLoop&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;tbody&gt; &lt;tr&gt; &lt;td style="font-weight: bold;"&gt;Company&lt;/td&gt; &lt;td style="font-weight: bold;"&gt;Web Site&lt;/td&gt; &lt;td style="font-weight: bold;"&gt;Cost&lt;/td&gt; &lt;td style="font-weight: bold;"&gt;Storage&lt;/td&gt; &lt;td style="font-weight: bold;"&gt;Rating&lt;/td&gt; &lt;td style="font-weight: bold;"&gt;Rating Explanation&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Mozy&lt;/td&gt; &lt;td&gt;&lt;a href="https://mozy.com/?code=Y3GD30"&gt;http://www.mozy.com&lt;/a&gt;&lt;/td&gt; &lt;td&gt; &lt;p&gt;Free&lt;/p&gt;&lt;br/&gt;&lt;p&gt;$4.95/Month&lt;/p&gt;&lt;/td&gt; &lt;td&gt; &lt;p&gt;2 GB&lt;/p&gt;&lt;br/&gt;&lt;p&gt;Unlimited&lt;/p&gt;&lt;/td&gt;&lt;td&gt;5/5&lt;/td&gt; &lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Carbonite&lt;/td&gt; &lt;td&gt;&lt;a href="http://www.carbonite.com/"&gt;http://www.carbonite.com&lt;/a&gt;&lt;/td&gt;&lt;td&gt;$49.95/Year&lt;/td&gt;&lt;td&gt;Unlimited&lt;/td&gt;&lt;td&gt;4/5&lt;/td&gt; &lt;td&gt;Only offers annual plan and no free service&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;iDrive&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.idrive.com/"&gt;http://www.idrive.com&lt;/a&gt;&lt;/td&gt; &lt;td&gt; &lt;p&gt;Free&lt;/p&gt;&lt;br/&gt;&lt;p&gt;$4.95/Month&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;2 GB&lt;/p&gt;&lt;br/&gt;&lt;p&gt;150 GB&lt;/p&gt;&lt;/td&gt; &lt;td&gt;4/5 &lt;/td&gt; &lt;td&gt;Doesn’t offer an unlimited plan &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Elephant Drive &lt;/td&gt; &lt;td&gt;&lt;a href="http://www.elephantdrive.com/"&gt;http://www.elephantdrive.com&lt;/a&gt;&lt;/td&gt; &lt;td&gt; &lt;p&gt;$4.95/Month&lt;/p&gt;&lt;br/&gt;&lt;p&gt;$9.95/Month&lt;/p&gt;&lt;/td&gt; &lt;td&gt; &lt;p&gt;1 GB&lt;/p&gt;&lt;br/&gt;&lt;p&gt;2 GB&lt;/p&gt;&lt;/td&gt; &lt;td&gt;4/5&lt;/td&gt; &lt;td&gt;Doesn’t offer unlimited plan and is expensive for the storage that they do  offer&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-2441484056282633615?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/2441484056282633615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=2441484056282633615' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/2441484056282633615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/2441484056282633615'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2009/03/online-backup-solutions.html' title='Online Backup Software Reveiw'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-6442994554840303586</id><published>2009-03-01T23:18:00.008-05:00</published><updated>2009-03-05T22:17:24.720-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>Changes to The Daily Admin Blog</title><content type='html'>As I spend more time and effort keeping up and promoting my blog, I spend a lot of time looking at the design, functionality, and content. I can always improve the content, this is a never-ending cycle. Although I was please with the first look of this blog, I knew that I could do better. This post is a chronicle of the changes that I made to the design and functionality. Very few of these changes are my own work, so I will also take this opportunity to give credit to all of those that I learned and borrowed from.&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;The first and most obvious change was the template. I spent a lot of time looking through all of the "free" templates that are available from all of the various sources on the Internet. My original template was the "Rounders" template. This was a great template that I spent a lot of time customizing and learning how templates work. The skin that I finally settled on was from &lt;a href="http://www.ourblogtemplates.com/"&gt;http://www.ourblogtemplates.com&lt;/a&gt; and is the "&lt;a href="http://www.ourblogtemplates.com/2008/04/blogger-template-click-apart.html"&gt;A Click Apart" template&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This transition was easier than I had anticipated. I removed all of the widgets and customizations from my "Rounders" theme and then uploaded the new template. This is one of the keys to a smooth transition that you don't find on the template sites: remove all customizations from your template prior to trying to install a new one.&lt;br /&gt;&lt;br /&gt;Next was the header image. The template is displayed with a very attractive &lt;a href="http://www.blogger.com/%3Ca%20onblur=%22try%20%7Bparent.deselectBloggerImageGracefully%28%29;%7D%20catch%28e%29%20%7B%7D%22%20href=%22http://farm4.static.flickr.com/3146/2419486465_d55ea28669_o.jpg%22%3E%3Cimg%20style=%22margin:%200pt%200pt%2010px%2010px;%20float:%20right;%20cursor:%20pointer;%20width:%20900px;%20height:%20220px;%22%20src=%22http://farm4.static.flickr.com/3146/2419486465_d55ea28669_o.jpg%22%20alt=%22%22%20border=%220%22%20/%3E%3C/a%3E"&gt;image&lt;/a&gt;, but I wanted to make the site more of my own than a copy. With this said, I used the &lt;a href="http://gimp.org/"&gt;GIMP&lt;/a&gt; to create an image of my own. I don't claim to be a graphic artist, but it turned out OK for now.&lt;br /&gt;&lt;br /&gt;Once the basic layout was complete, I decided to start my "normal" customizations. These include the sidebar functionality. I don't use the Blogger Widget for search, I have found a nice script that does a great job from &lt;a href="http://tips-for-new-bloggers.blogspot.com/2007/02/add-blogger-search-box.html"&gt;Tips for New &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Bloggers&lt;/span&gt;&lt;/a&gt;:&lt;br /&gt;&lt;div id="divCode"&gt;&lt;code&gt;&lt;br /&gt;&amp;amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;lt&lt;/span&gt;;p align="left"&amp;gt;&lt;br /&gt;&amp;amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;lt&lt;/span&gt;;form id="&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;searchthis&lt;/span&gt;" action="http://www.thedailyadmin.com/search" style="display:&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;inline&lt;/span&gt;;" method="get"&amp;gt;&lt;br /&gt;&amp;amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;lt&lt;/span&gt;;strong&amp;gt;The Daily Admin&amp;amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;lt&lt;/span&gt;;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;br&lt;/span&gt;/&amp;gt;&amp;amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;lt&lt;/span&gt;;/strong&amp;gt;&lt;br /&gt;&amp;amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;lt&lt;/span&gt;;input id="b-query" &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;maxlength&lt;/span&gt;="255" name="q" size="20" type="text"/&amp;gt;&lt;br /&gt;&amp;amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;lt&lt;/span&gt;;input id="b-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;searchbtn&lt;/span&gt;" value="Search" type="submit"/&amp;gt;&lt;br /&gt;&amp;amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;lt&lt;/span&gt;;/form&amp;gt;&amp;amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;lt&lt;/span&gt;;/p&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;Next comes the first of two scripts that I employ from &lt;a href="http://phy3blog.googlepages.com/Beta-Blogger-Label-Cloud.html"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;phydeaux&lt;/span&gt;3&lt;/a&gt;. This particular script modifies the labels widget to be a customizable tag cloud. I prefer the tag cloud to the static label list because I use a lot of labels and the list takes up too much space for me. The changes are outlined very well by &lt;a href="http://phy3blog.googlepages.com/Beta-Blogger-Label-Cloud.html"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;phydeaux&lt;/span&gt;3&lt;/a&gt;, so I won't go into that here, but I will show the only two changes that I needed to make: font colors.&lt;br /&gt;&lt;blockquote&gt;var &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;maxColor&lt;/span&gt; = [83,120,174];&lt;br /&gt;var &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;minColor&lt;/span&gt; = [153,153,153];&lt;/blockquote&gt;&lt;br /&gt;The next thing that I use from &lt;a href="http://phy3blog.googlepages.com/Beta-Blogger-Label-Cloud.html"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;phydeaux&lt;/span&gt;3&lt;/a&gt; is an &lt;a href="http://phydeaux3.blogspot.com/2007/04/blogger-archive-calender.html"&gt;archive calendar&lt;/a&gt;. I love this because, it too is intuitive to me and takes up minimal space. This actually uses the default archive widget, but the script customizes the existing widget. Pretty cool, because you don't have to do anything to get a sharp archive calendar.&lt;br /&gt;&lt;br /&gt;The next sidebar customization is the addition of my &lt;a href="http://www.linkedin.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;LinkedIn&lt;/span&gt;&lt;/a&gt; badge. This is a simple script:&lt;br /&gt;&lt;div id="divCode"&gt;&lt;code&gt;&lt;br /&gt;&amp;amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;lt&lt;/span&gt;;a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;href&lt;/span&gt;="http://www.linkedin.com/in/brianbohanon"&amp;gt;&amp;amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;lt&lt;/span&gt;;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;img&lt;/span&gt; border="none" &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;src&lt;/span&gt;="http://www.linkedin.com/img/webpromo/btn_viewmy_160x33.gif"/&amp;gt;&amp;amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;lt&lt;/span&gt;;/a&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;Sticking with the &lt;a href="http://www.linkedin.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;LinkedIn&lt;/span&gt;&lt;/a&gt; theme, I also added the &lt;a href="http://www.linkedin.com/static?key=developers_widget_profileinsider"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;LinkedIn&lt;/span&gt; Profile &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;Popup&lt;/span&gt;&lt;/a&gt;. Aside from just getting it to work with Blogger (which can be seen in the post "&lt;a href="http://www.thedailyadmin.com/2009/02/linkedin-profile-popup-on-blogge.html"&gt;How-to Add &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;LinkedIn&lt;/span&gt; Profile &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;Popup&lt;/span&gt; on Blogger&lt;/a&gt;"), I also had to change the theme to place the data:post.author at the top of the post (my preference, not required) and the style sheet for the data:post.author so that it is an &amp;amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;lt&lt;/span&gt;;h4&amp;gt;. I had originally changed it to &amp;amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;lt&lt;/span&gt;;h3&amp;gt;, but when viewed in Internet Explorer the font was much too large.&lt;br /&gt;&lt;br /&gt;I always see the social bookmarks on really nice blogs and wanted to add this functionality to mine. I had a heck of a time trying to find this. Most all of the posts I found about this were using individual images hosted from another source with links and it was a big pain. Fortunately, I was able to find out not only the easiest, but probably the most thorough method. There is a site called &lt;a href="http://addthis.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;AddThis&lt;/span&gt;&lt;/a&gt; that provides the code for the button on your site, stats about your button, and they keep up with all of the sites and links. This is great because I don't know (and don't care to know) every social web site on the web. This is a free service and took about 5 minutes to setup from registering on the site to putting the code in all of my posts. Part of the &lt;a href="http://addthis.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;AddThis&lt;/span&gt;&lt;/a&gt; functionality is &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;Digg&lt;/span&gt;, so I removed the individual &lt;a href="http://digg.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;Digg&lt;/span&gt;&lt;/a&gt; script.&lt;br /&gt;&lt;br /&gt;Just to see what is happening on my blog when I'm not around, I signed up for &lt;a href="http://www.statcounter.com"&gt;http://www.statcounter.com&lt;/a&gt; which is a free service like &lt;a href="http://www.google.com/analytics/"&gt;Google Analytics&lt;/a&gt;. This too, was a super easy change that was just the matter of signing up for the service and adding some script to my site.&lt;br /&gt;&lt;br /&gt;I also found a cool little &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;SEO&lt;/span&gt; hack that will list the post title in search engines rather than the default site title. I can understand why this would drive more traffic, because in the past when I did searches for my own content it would show "The Daily Admin" in the &lt;a href="http://www.google.com/"&gt;Google&lt;/a&gt; results. This is a really simple change that makes a huge difference. I got this from &lt;a href="http://www.bloggerbuster.com/2008/05/change-title-tags-for-your-blog.html"&gt;Blogger Busters&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The last customization that was "new" to my blog was the "Read More..." functionality. I like this because it consolidates the posts on the main page which keeps things looking clean. This wasn't an easy on to tackle, it took quite a few times of trying different ways of doing this to find one that worked. The one that did finally work the way that I wanted it to was from &lt;a href="http://www.blogspottutorial.com/2007/12/make-post-summary-readmore-function.html"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;BlogSpotTutorial&lt;/span&gt;&lt;/a&gt; and was actually the easiest that I had tried (I tried about 10 different ways to do this).&lt;br /&gt;&lt;br /&gt;Another change that I made, hoping to drive a little more traffic to my site was to remove all of the embedded &lt;a href="http://scribd.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_40"&gt;Scribd&lt;/span&gt;&lt;/a&gt; documents that I have been using and replace them with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_41"&gt;searchable&lt;/span&gt; text. Although &lt;a href="http://scribd.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_42"&gt;Scribd&lt;/span&gt;&lt;/a&gt; provides a cool service, and I have had thousands of views for my documents, search engines can't index those when they are embedded on my site.&lt;br /&gt;&lt;br /&gt;The last change (in correlation with removing my embedded docs) was to change the way I displayed code on my blog. In the past I did it in a very difficult way with several div tags and some &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43"&gt;inline&lt;/span&gt; styling, but that had to go. I wised up and created a div style that is present in all of my posts and only requires the following tags:&lt;br /&gt;&lt;blockquote&gt;&amp;amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_44"&gt;lt&lt;/span&gt;;div id='&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_45"&gt;divCode&lt;/span&gt;'&amp;gt;&amp;amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_46"&gt;lt&lt;/span&gt;;/div&amp;gt;&lt;/blockquote&gt; This makes it much easier for me to post code and less likely to want to embed the documents from &lt;a href="http://scribd.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_47"&gt;Scribd&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;WOW! Looking back on all of these changes, there were a lot. It was more than I thought. There are still some additional changes that I am looking into that will add some more functionality, such as previous and next buttons for my posts. I'm not sure that I can have this and the archive calendar coexist.&lt;br /&gt;&lt;br /&gt;If you have any ideas or suggestions for improvements on the design of this blog, please feel free to leave a comment.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-6442994554840303586?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/6442994554840303586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=6442994554840303586' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/6442994554840303586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/6442994554840303586'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2009/03/changes-to-daily-admin-blog.html' title='Changes to The Daily Admin Blog'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-5965363877497411747</id><published>2009-02-25T09:15:00.009-05:00</published><updated>2009-03-01T19:59:28.136-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VPN'/><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='VBScript'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='ActriveDirectory'/><title type='text'>VBscript to Find Users in Active Directory with Dial-In VPN Access Permissions</title><content type='html'>As a systems administrator, it is not a good feeling when the boss comes to you and says "I need to know every user that has remote access." That is, if you can't get it for him. The script below will audit Active Directory to find users that have the dial-in access permissions enabled. The script will search the current Active Directory domain for users with Dial-In (VPN) RRAS permissions enabled.&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;To begin with the script opens a connection to the directory for the currently logged in user. Once connected, the script loops through the user accounts in the directory and queries each one to find out if the "msNPAllowDialin" has a value of True. If the script finds a user that meets the requirements, a function is called to find the container of the user object. This function will return the full path of the user object as such: &lt;blockquote&gt;'OU=sales,DC=fabrikam,DC=com'&lt;/blockquote&gt; Because the output is for a CSV file, there are single quotes around the full path so, when the file is opened with Excel it doesn't see the commas in the container path as delimeters. The user's full name and the container path are written out to a CSV file in the same directory as the script in the format: &lt;blockquote&gt;First Last, 'OU=sales,DC=fabrikam,DC=com'&lt;/blockquote&gt;&lt;br /&gt;&lt;div id="divCode"&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;On Error Resume Next&lt;br /&gt;&lt;br /&gt;Const ADS_SCOPE_SUBTREE = 2&lt;br /&gt;&lt;br /&gt;Dim objConnection, objCommand, objRootDSE&lt;br /&gt;Dim objRecordSet, ou&lt;br /&gt;Dim namingContext, fso, outFile&lt;br /&gt;&lt;br /&gt;Set objConnection = CreateObject("ADODB.Connection")&lt;br /&gt;Set objCommand = CreateObject("ADODB.Command")&lt;br /&gt;&lt;br /&gt;objConnection.Provider = "ADsDSOObject"&lt;br /&gt;objConnection.Open "Active Directory Provider"&lt;br /&gt;&lt;br /&gt;Set objCommand.ActiveConnection = objConnection&lt;br /&gt;Set objRootDSE = getobject("LDAP://RootDSE")&lt;br /&gt;&lt;br /&gt;namingContext = objRootDSE.Get("defaultNamingContext")&lt;br /&gt;&lt;br /&gt;Set objRootDSE = nothing&lt;br /&gt;Set fso = CreateObject("Scripting.FileSystemObject")&lt;br /&gt;Set outFile = fso.CreateTextFile("RRAS_VPN_Users.txt", True)&lt;br /&gt;&lt;br /&gt;objCommand.Properties("Page Size") = 1000&lt;br /&gt;objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE&lt;br /&gt;objCommand.CommandText = _ "SELECT Name FROM 'LDAP://" &amp;amp; namingContext &amp;amp; WHERE objectCategory='user' " &amp;amp; "AND msNPAllowDialin = TRUE"&lt;br /&gt;&lt;br /&gt;Set objRecordSet = objCommand.Execute&lt;br /&gt;&lt;br /&gt;objRecordSet.MoveFirst&lt;br /&gt;&lt;br /&gt;Do Until objRecordSet.EOF&lt;br /&gt; ou = getOUByUserName(objRecordSet.Fields("Name").Value)&lt;br /&gt; outFile.WriteLine(objRecordSet.Fields("Name").Value &amp;amp; ",'" &amp;amp; ou &amp;amp; "'")&lt;br /&gt; objRecordSet.MoveNext&lt;br /&gt;Loop&lt;br /&gt;&lt;br /&gt;outFile.Close&lt;br /&gt;&lt;br /&gt;WScript.Echo "Complete"&lt;br /&gt;WScript.Quit&lt;br /&gt;&lt;br /&gt;function getOUByUserName(byval UserName)&lt;br /&gt;DIM namingContext, ldapFilter, ou&lt;br /&gt;DIM cn, cmd, rs&lt;br /&gt;DIM objRootDSE&lt;br /&gt;&lt;br /&gt;Set objRootDSE = getobject("LDAP://RootDSE")&lt;br /&gt;namingContext = objRootDSE.Get("defaultNamingContext")&lt;br /&gt;&lt;br /&gt;Set objRootDSE = nothing ldapFilter = "&lt;ldap: namingcontext=""&gt;;(&amp;amp;(objectCategory=User)(name=" &amp;amp; userName &amp;amp; "))" &amp;amp; ";distinguishedName;subtree"&lt;br /&gt;Set cn = createobject("ADODB.Connection")&lt;br /&gt;Set cmd = createobject("ADODB.Command")&lt;br /&gt;&lt;br /&gt;cn.open "Provider=ADsDSOObject;"&lt;br /&gt;cmd.activeconnection = cn&lt;br /&gt;cmd.commandtext = ldapFilter&lt;br /&gt;&lt;br /&gt;Set rs = cmd.execute&lt;br /&gt;&lt;br /&gt;if rs.eof &lt;&gt; true and rs.bof &lt;&gt; true then&lt;br /&gt; ou = rs(0)&lt;br /&gt; ou = mid(ou,instr(ou,",")+1,len(ou)-instr(ou,","))&lt;br /&gt; getOUByuserName = ou&lt;br /&gt;end if&lt;br /&gt;&lt;br /&gt;rs.close&lt;br /&gt;cn.close&lt;br /&gt;&lt;br /&gt;end function&lt;br /&gt;&lt;br /&gt;&lt;/ldap:&gt;&lt;/code&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-5965363877497411747?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/5965363877497411747/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=5965363877497411747' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/5965363877497411747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/5965363877497411747'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2009/02/vbscript-to-find-users-in-active.html' title='VBscript to Find Users in Active Directory with Dial-In VPN Access Permissions'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-5926471682689613977</id><published>2009-02-21T17:25:00.023-05:00</published><updated>2009-03-02T11:39:46.560-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='LinkedIn'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>How-to Add LinkedIn Profile Popup on Blogger</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ke4YiM74LBs/SaCBRM-nhDI/AAAAAAAAAMA/k0gx8yD3zlI/s1600-h/LinkedInProfilePopup1.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 158px; height: 200px;" src="http://2.bp.blogspot.com/_ke4YiM74LBs/SaCBRM-nhDI/AAAAAAAAAMA/k0gx8yD3zlI/s200/LinkedInProfilePopup1.JPG" alt="" id="BLOGGER_PHOTO_ID_5305382493584065586" border="0" /&gt;&lt;/a&gt;I find the new "&lt;a href="http://www.linkedin.com/static?key=developers_widget_profileinsider"&gt;profile popup&lt;/a&gt;" from &lt;a href="http://www.linkedin.com/"&gt;LinkedIn&lt;/a&gt; to be a very nice addition to blog postings. This adds a &lt;a href="http://www.linkedin.com"&gt;LinkedIn&lt;/a&gt; icon after your name that pops up a window with your profile information. I wanted to add it to my blog, but I couldn't find any instructions on how to accomplish this with &lt;a href="http://www.blogger.com/"&gt;Blogger&lt;/a&gt;. As such, I had to figure out how to add this (because I thought it was that cool).  Below are the instructions on how to add this functionality to your &lt;a href="http://www.blogger.com/"&gt;Blogger&lt;/a&gt; site.&lt;br /&gt;&lt;br /&gt;To begin, you will need to visit the &lt;a href="http://www.linkedin.com/"&gt;LinkedIn&lt;/a&gt; site to get the JavaScript code for this. There are two pieces of code that are needed to make this little piece of magic work.&lt;br /&gt;&lt;br /&gt;First, you will need to get the snippet that goes in the  section of your &lt;a href="http://www.blogger.com/"&gt;Blogger&lt;/a&gt; template. &lt;span class="fullpost"&gt;To accomplish this, go to the dashboard, click on the Layout tab, then click the "Edit HTML" link below the tabs. This will provide access to the HTML code that runs your blog site. Find the line in the code that is&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;&lt;code&gt;&amp;lt;/head&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;On the line above this, paste the first (of two) line of JavaScript from the &lt;a href="http://www.linkedin.com/static?key=developers_widget_profileinsider"&gt;LinkedIn&lt;/a&gt;&lt;a href="http://www.linkedin.com/static?key=developers_widget_profileinsider"&gt; profile widgets page&lt;/a&gt;. The code that I used is below:&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;&lt;code&gt;&amp;lt;script type="text/javascript" src="http://www.linkedin.com/js/public-profile/widget-os.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;Next, you will need to get the "profile" line of code that actually points to your profile. On the &lt;a href="http://www.linkedin.com/static?key=developers_widget_profileinsider"&gt;LinkedIn site&lt;/a&gt;, this code points to "&lt;code&gt;Reid Hoffman&lt;/code&gt;". To make this point to your profile, just get the URL for your profile from &lt;a href="http://www.linkedin.com/"&gt;LinkedIn&lt;/a&gt;. You can get this by viewing your public profile and copying and pasting that link into the JavaScript code. Then remove "Reid Hoffman" and the closing anchor tag (&amp;lt;/a&amp;gt;) and your link should now look like this:&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;&lt;code&gt;&amp;lt;a class="'linkedin-profileinsider-popup'" href="http://www.linkedin.com/in/bohanonb"&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;Now you will need to go to the correct section of your &lt;a href="http://www.blogger.com/"&gt;Blogger&lt;/a&gt; template (still in the Edit HTML section) to paste this link. This is the part that took a while to find. There is a checkbox at the top of the HTML editor window that reads "Expand Widget Templates". Check this box. Find the line that reads:&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;&lt;code&gt;&amp;lt;span class='fn'&amp;gt;&amp;lt;data:post.author&amp;gt;&amp;lt;/span&amp;gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;Once you find this section of code, simply paste your customized link between &amp;lt;span class='fn'&amp;gt; and &amp;lt;data:post.author&amp;gt;.  Now type in &amp;lt;/a&amp;gt;between &amp;lt;/data:post.author&amp;gt; and &amp;lt;/span&amp;gt; . The result should be something like this:&lt;br /&gt;&lt;br /&gt;&lt;div id="divCode"&gt;&lt;code&gt;&amp;lt;span class='fn'&amp;gt;&amp;lt;a class='linkedin-profileinsider-popup' href="http://www.linkedin.com/in/bohanonb"&amp;gt;&amp;lt;data:post.author&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;Save the template and it will change all of the previous posts to reflect your new &lt;a class="linkedin-profileinsider-popup" href="http://www.linkedin.com/in/brianbohanon"&gt;LinkedIn Profile Popup Widget&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you have any problems getting this to work you can ask your question in the comment section or contact me directly through &lt;a href="http://www.crossloop.com/brianbohanon"&gt;CrossLoop&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-5926471682689613977?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/5926471682689613977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=5926471682689613977' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/5926471682689613977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/5926471682689613977'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2009/02/linkedin-profile-popup-on-blogge.html' title='How-to Add LinkedIn Profile Popup on Blogger'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_ke4YiM74LBs/SaCBRM-nhDI/AAAAAAAAAMA/k0gx8yD3zlI/s72-c/LinkedInProfilePopup1.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-1906292898954675625</id><published>2009-02-17T23:01:00.005-05:00</published><updated>2009-03-01T10:46:01.690-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Rants'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Administrators v. Developers: Round 1</title><content type='html'>For years, I have been administering the Windows OS and various server products that run on it. Some of these include Exchange, SQL Server, BackupExec, Blackberry Enterprise Server, etc. During this time I have found it necessary, and admittedly a little dangerous, to update these products in a timely fashion. The updates provided by Microsoft are most often security updates, critical updates, and service packs. Now, within this list are some additional products like the .Net framework. The .Net framework also has updates and changes. As with many other programming languages, some properties, methods, and/or built-in classes are either depricated and removed, or the number of arguments are changed, or whatever. Here is the question:&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;Is it the responsibility of the administrator (the person applying the updates) to know what code the updates will potentially cause problems/changes with?&lt;br /&gt;&lt;br /&gt;OR&lt;br /&gt;&lt;br /&gt;Is it the responsibility of the developer to be up-to-date on the framework they are using to develop applications with, the changes that are being made to that framework by the company (in this case Microsoft) that provides said framework?&lt;br /&gt;&lt;br /&gt;OR&lt;br /&gt;&lt;br /&gt;Should the updates not be applied for fear of breaking something, thus potentially leaving gaping security holes in your servers?&lt;br /&gt;&lt;br /&gt;In my opinion, it would be the responsibility of the developer to understand when changes are going to be made to the framework. I do believe the administrator holds some responsibility in this scenario, and here they are:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Schedule updates for regular, off-hours intervals&lt;/li&gt;&lt;li&gt;Notify everyone that could potentially be affected by any problems that the updates are being applied&lt;/li&gt;&lt;li&gt;Apply the updates and make sure the services are still working properly&lt;/li&gt;&lt;/ol&gt;With that said, below is a list of things that I feel the developer should be responsible for:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Be aware of the changes that are coming with the different frameworks that you use to develop (Microsoft is currently up to version 3.5 for the .Net framework)&lt;/li&gt;&lt;li&gt;Be aware of the updates that are going to be released that may affect your work (maybe, subscribing to the MS Update feed, email notification, or just read the site!)&lt;/li&gt;&lt;li&gt;Make the appropriate changes to your code when there is a change to the framework&lt;/li&gt;&lt;/ol&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-1906292898954675625?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/1906292898954675625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=1906292898954675625' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/1906292898954675625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/1906292898954675625'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2009/02/administrators-v-developers-round-1.html' title='Administrators v. Developers: Round 1'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-324086648114923126</id><published>2009-02-12T13:48:00.006-05:00</published><updated>2009-03-01T20:30:22.026-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='VBScript'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='ActriveDirectory'/><title type='text'>VBScript to Update Active Directory User Information</title><content type='html'>I used this script to read in a CSV file of user names, address information, telephone number, and email address. The script is based on the following format for the CSV:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;First name&lt;/li&gt;&lt;li&gt;Last name&lt;/li&gt;&lt;li&gt;Address 1&lt;/li&gt;&lt;li&gt;Address2&lt;/li&gt;&lt;li&gt;City&lt;/li&gt;&lt;li&gt;State&lt;/li&gt;&lt;li&gt;Zip&lt;/li&gt;&lt;li&gt;Telephone (no spaces, dashes or other characters)&lt;/li&gt;&lt;li&gt;Email address (in the format user@domain.com)&lt;/li&gt;&lt;/ul&gt;The script combines the first and last names into a single full name, and parses the telephone into a standard format using parentheses and dashes. &lt;span class="fullpost"&gt; Once the script has concatenated the user name, it searches through the current RootDSE to find the OU that the user's account is in. This function returns the full LDAP path for the object which is then used to find the object and make the requested changes. The script outputs to the screen any user name that can't be found or returns any other error. To put this into a log file, I simply use the output modifier "&gt;" and the name of the output file.&lt;br /&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;&lt;br /&gt;OPTION Explicit&lt;br /&gt;&lt;br /&gt;On Error Resume Next&lt;br /&gt;&lt;br /&gt;Const ADS_PROPERTY_UPDATE = 2&lt;br /&gt;&lt;br /&gt;DIM username, ou, n, arrStr&lt;br /&gt;DIM strFullName, strAddress1, strAddress2&lt;br /&gt;DIM strCity, strState, strZIP, strPhone, strEmail&lt;br /&gt;DIM strAreaCode, strExchange, strDID, strTelephone&lt;br /&gt;DIM objUser, objFSO, objCSVFile, objConnection, objCommand&lt;br /&gt;Dim objShell, objFile, objNetwork&lt;br /&gt;&lt;br /&gt;Set objShell = CreateObject("WScript.Shell")&lt;br /&gt;Set objFSO = CreateObject("Scripting.FileSystemObject")&lt;br /&gt;&lt;br /&gt;'Read CSV&lt;br /&gt;Set objCSVFile = objFSO.OpenTextFile("UserInfo.csv",1)&lt;br /&gt;&lt;br /&gt;Set objConnection = CreateObject("ADODB.Connection")&lt;br /&gt;Set objCommand =   CreateObject("ADODB.Command")&lt;br /&gt;objConnection.Provider = "ADsDSOObject"&lt;br /&gt;objConnection.Open "Active Directory Provider"&lt;br /&gt;Set objCommand.ActiveConnection = objConnection&lt;br /&gt;&lt;br /&gt;'set counter value&lt;br /&gt;n = 0&lt;br /&gt;&lt;br /&gt;Do while NOT objCSVFile.AtEndOfStream&lt;br /&gt;&lt;br /&gt;&amp;nbsp;arrStr = split(objCSVFile.ReadLine,",")&lt;br /&gt; &lt;br /&gt;&amp;nbsp;strFullName = arrstr(n) &amp; " " &amp; arrstr(n+1)&lt;br /&gt;&amp;nbsp;strAddress1 = arrstr(n+2)&lt;br /&gt;&amp;nbsp;strAddress2 = arrstr(n+3)&lt;br /&gt;&amp;nbsp;strCity = arrstr(n+4)&lt;br /&gt;&amp;nbsp;strState = arrstr(n+5)&lt;br /&gt;&amp;nbsp;strZip = arrstr(n+6)&lt;br /&gt;&amp;nbsp;strPhone = arrstr(n+7)&lt;br /&gt;&amp;nbsp;'build a traditional phone number&lt;br /&gt;&amp;nbsp;strAreaCode = mid(strPhone,1,3)&lt;br /&gt;&amp;nbsp;strExchange = mid(strPhone,4,3)&lt;br /&gt;&amp;nbsp;strDID = mid(strPhone,7,4)&lt;br /&gt;&amp;nbsp;strTelephone = "(" &amp; strAreaCode &amp; ") " &amp; strExchange &amp; "-" &amp; strDID&lt;br /&gt;&amp;nbsp;strEmail = arrstr(n+8)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;' Call function to find OU from computer name&lt;br /&gt;&amp;nbsp;ou = getOUByUserName(strFullName)&lt;br /&gt; &lt;br /&gt;&amp;nbsp;if ou = "" then&lt;br /&gt;&amp;nbsp;&amp;nbsp;wscript.echo strFullName&lt;br /&gt;&amp;nbsp;else&lt;br /&gt;&amp;nbsp;&amp;nbsp;i = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;Set objUser = GetObject("LDAP://cn=" &amp; strFullName &amp; "," &amp; ou &amp; "")&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;do while i &lt; 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;If err.number &lt;&gt; 0 then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wscript.echo "Error: " &amp; strFullName &amp; " " &amp; err.number&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Set the attribute values&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objUser.Put "streetAddress", strAddress1 &amp; vbCrLf &amp; strAddress2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objUser.Put "l", strCity&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objUser.Put "st", strState&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objUser.Put "postalCode", strZip&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objUser.Put "telephoneNumber", strTelephone&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objUser.Put "mail", strEmail&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'Set the user info  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;objUser.SetInfo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;end if&lt;br /&gt;&amp;nbsp;&amp;nbsp;i = i + 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;loop&lt;br /&gt;&lt;br /&gt;&amp;nbsp;end if&lt;br /&gt;&lt;br /&gt;n = 0&lt;br /&gt;&lt;br /&gt;Loop&lt;br /&gt;objCSVFile.Close&lt;br /&gt;&lt;br /&gt;function getOUByUserName(byval UserName)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;DIM namingContext, ldapFilter, ou&lt;br /&gt;&amp;nbsp;DIM cn, cmd, rs&lt;br /&gt;&amp;nbsp;DIM objRootDSE&lt;br /&gt;&lt;br /&gt;&amp;nbsp;set objRootDSE = getobject("LDAP://RootDSE")&lt;br /&gt;&amp;nbsp;namingContext = objRootDSE.Get("defaultNamingContext")&lt;br /&gt;&amp;nbsp;set objRootDSE = nothing&lt;br /&gt;&lt;br /&gt;&amp;nbsp;ldapFilter = "&lt;LDAP://" &amp; namingContext &amp; _&lt;br /&gt;&amp;nbsp;"&gt;;(&amp;(objectCategory=User)(name=" &amp; userName &amp; "))" &amp; _&lt;br /&gt;&amp;nbsp;";distinguishedName;subtree"&lt;br /&gt;&lt;br /&gt;&amp;nbsp;set cn = createobject("ADODB.Connection")&lt;br /&gt;&amp;nbsp;set cmd = createobject("ADODB.Command")&lt;br /&gt;&lt;br /&gt;&amp;nbsp;cn.open "Provider=ADsDSOObject;"&lt;br /&gt;&amp;nbsp;cmd.activeconnection = cn&lt;br /&gt;&amp;nbsp;cmd.commandtext = ldapFilter&lt;br /&gt; &lt;br /&gt;&amp;nbsp;set rs = cmd.execute&lt;br /&gt;&lt;br /&gt;&amp;nbsp;if rs.eof &lt;&gt; true and rs.bof &lt;&gt; true then&lt;br /&gt;&amp;nbsp;&amp;nbsp;ou = rs(0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;ou = mid(ou,instr(ou,",")+1,len(ou)-instr(ou,","))&lt;br /&gt;&amp;nbsp;&amp;nbsp;getOUByuserName = ou&lt;br /&gt;&lt;br /&gt;&amp;nbsp;end if&lt;br /&gt;&lt;br /&gt;&amp;nbsp;rs.close&lt;br /&gt;&amp;nbsp;cn.close&lt;br /&gt;&lt;br /&gt;end function&lt;/code&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-324086648114923126?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/324086648114923126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=324086648114923126' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/324086648114923126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/324086648114923126'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2009/02/vbscript-to-update-active-directory.html' title='VBScript to Update Active Directory User Information'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-9189865903633682453</id><published>2008-10-01T08:51:00.012-04:00</published><updated>2009-03-01T10:48:33.757-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Analyzing Storage Quotas with Excel 2007</title><content type='html'>With Windows Server 2003, the RECYCLER folder (a hidden folder located on the network drive) that is created when a user's documents are redirected counts against the user's quota. Although there are some positives to this (such as, giving the user the ability to restore deleted files, and an easy way to clean up a user's folder to get them under quota), the down-side is with the implementation of quotas in an existing environment.&lt;span class="fullpost"&gt;  Here is the scenario:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Existing users don't have storage quotas&lt;/li&gt;&lt;li&gt;Even when users try to get their storage below the quota, the files are moved to the RECYCLER folder&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Windows Server 2003 R2 with My Documents redirected to a share&lt;/li&gt;&lt;li&gt;Soft Quotas of 500 MB on user folders (no notification set)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The method I chose to get this information was a combination of:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc755603.aspx"&gt;File Server Resource Manager&lt;/a&gt; Storage Reports&lt;/li&gt;&lt;li&gt;DU.exe (&lt;a href="http://technet.microsoft.com/en-us/sysinternals/default.aspx"&gt;SysInternals&lt;/a&gt; Tool for reporting folder sizes)&lt;/li&gt;&lt;li&gt;Excel 2007&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;li&gt;Run a storage report for users that used 100% of quota&lt;/li&gt;&lt;li&gt;Copy that information into a new sheet in Excel&lt;/li&gt;&lt;li&gt;Run DU.exe on the root of the user folders (this will show every folder, even if hidden)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Copy that information into a new sheet in Excel&lt;/li&gt;&lt;li&gt;Create a new sheet to merge the data for analysis&lt;/li&gt;&lt;/ol&gt;The specifics of how I merged the data using Excel's built-in functions is as follows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;On the sheet with the DU output:&lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;li&gt;Create a new column and use =Find("RECYCLER", A1). Copy this formula to every row that has an entry. This will show the position number for any entry that contains the word "RECYCLER". (This is column B)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Create a new column and use =LEFT(A1,FIND("\RECYCLER",A1)). Copy this formula to every row that has an entry. This will return all the contents of the row up to "\RECYCLER". An Example would be "2,316,645  D:\Users$\Agents\John.Doe\". (This is column C)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Create a new column and use =LEFT(E22,LEN(E22)-1). Copy this formula to every row that has an entry. This will Parse the username from the folder path. In the above example it would be "John.Doe". (This is column D)&lt;/li&gt;&lt;li&gt;Create a final column to parse the size of the folder. =LEFT(C22,FIND("D:\",C22)-1) will return "2,316,645". Copy this formula to all rows that contain data. (This is column E)&lt;/li&gt;&lt;li&gt;Now put a filter on the columns to filter out the following:&lt;/li&gt;&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;Column B - Only rows with a value greater than 0 (zero). These are only the rows that have "RECYCLER" in the folder path.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Column D - Only rows with a username&lt;/li&gt;&lt;li&gt;Column E - Only rows with a value greater than 0 (zero)&lt;/li&gt;&lt;/ul&gt;Now that the data is parsed for the RECYCLER information, a similar action needs to be completed for the users that are over their 500 MB quota.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;On the sheet with the results of the Storage Report:&lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;li&gt;Hide all columns with data with the exception of column A - this will leave only the user folder path&lt;/li&gt;&lt;li&gt;Hide all rows that do not contain the folder path (this is just for the ease of reading)&lt;/li&gt;&lt;li&gt;In column G, enter =MID(A2,18,25) to parse the username from the path. Copy this formula to every row that has an entry. &lt;/li&gt;&lt;/ol&gt;On a new sheet, used for the analysis and comparison of the two reports, copy the username and folder size from the DU output. In column C, enter =VLOOKUP(A2,'Over Quota'!G2:G84,1,FALSE). This will lookup the values for the users that are over quota and if the username appears in column C, they have a RECYCLER folder as well as being over the quota. Copy this formula to every row that has an entry. If no entry is matched "#N/A" will be displayed in column C. This means that the user doesn't have a RECYCLER folder, but is still over their quota.&lt;br /&gt;&lt;br /&gt;The way the data is interpreted:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Users that have a RECYCLER and are over their quota need to have the RECYCLER folder emptied. This is a quick way to help the user get below their quota without having to go through all of their files.&lt;/li&gt;&lt;li&gt;Users that do not have a RECYCLER folder, but are over their quota will have to begin removing files from their folder to get under the limit&lt;/li&gt;&lt;/ul&gt;Some additional analysis (if needed) can be a comparison of the RECYCLER folder size to the usage from the storage report. This can provide important information about how much space will be freed from emptying the RECYCLER folder, thus further defining which users will be under their quota by performing this action. The quick steps for this analysis are:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;On the storage report data sheet, unhide all columns&lt;/li&gt;&lt;li&gt;In the row with the user name, enter =LEFT(C3,FIND("MB",C3)-1), Copy this formula to every row that has an entry. NOTE: the row used in this formula is not the same row as the user's name, it is one row below due to the format of the storage report.&lt;/li&gt;&lt;li&gt;On the analysis sheet, create a new column and perform another VLookup against the username with the following: =VLOOKUP(A2,'Over Quota'!G2:H84,2,FALSE), Copy this formula to every row that has an entry.This will copy the storage usage for each of the users.&lt;/li&gt;&lt;/ol&gt;Comparing the new column that contains the usage from the storage report with the RECYCLER folder size will give a good indication of which users will need to be directed to clean up their storage and which users can just empty the RECYCLER folder to get under the limit. Using some filters here could make the analysis easier to read by filtering out users that aren't over their quota or filtering out users that don't have a RECYCLER folder.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NOTE:&lt;/span&gt; There is a way to turn this feature off by using Group Policy to 'disable moving files to the Recycle Bin'. This policy is applied to the user and also disables the Recycle Bin on the user's workstation.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-9189865903633682453?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/9189865903633682453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=9189865903633682453' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/9189865903633682453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/9189865903633682453'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/10/analyzing-storage-quotas-with-excel.html' title='Analyzing Storage Quotas with Excel 2007'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-147430227225817451</id><published>2008-09-15T21:51:00.004-04:00</published><updated>2009-03-01T15:42:57.368-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Backup'/><title type='text'>SQL Server 2005 Log Truncating</title><content type='html'>To set a database to automatically shrink when space is made available enter the following command in a query window:&lt;br /&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;ALTER DATABASE DB_NAME SET AUTO_SHRINK ON&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;To set the database to truncate the logs after a backup, enter this command into a query window: &lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;EXEC sp_dboption 'DB_NAME ', 'trunc. LOG ON chkpt.', 'TRUE'&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;To manually shrink a database with free space:&lt;br /&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;DBCC SHRINKDATABASE (DB_NAME)&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;To manually truncate the logs, enter this command into the query window:&lt;br /&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;BACKUP LOG DB_NAME  WITH TRUNCATE_ONLY&lt;/code&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-147430227225817451?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/147430227225817451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=147430227225817451' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/147430227225817451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/147430227225817451'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/09/sql-server-2005-log-truncating.html' title='SQL Server 2005 Log Truncating'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-4636160340572144019</id><published>2008-09-02T08:07:00.006-04:00</published><updated>2009-03-01T20:45:19.444-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='VBScript'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>HTML Application to Inventory Windows Computers</title><content type='html'>During my many attempts at scripting, I have expanded on existing scripts to accomplish a goal. This goal was to provide an "application" for our helpdesk staff (and myself) an easy way to inventory a group of computers. The script below will allow for an inventory of a single computer, a group of computers imported from a text file, or an entire domain through Active Directory.&lt;span class="fullpost"&gt;  Each computer that is inventoried will have an Excel workbook created with multiple sheets that contain different types of information. There are sheets for hardware, software, and printers. The script also provides a way for the user to change the output directory in the event that there are a lot of computers included in the operation. The script requires that the WMI service and DCOM be running on the computers, as well as the appropriate permissions on the machine (such as local administrator). There is a log that will be created when the script is run. This log will contain the name of the computer inventoried, the date, and if the operation was a success or what error occurred. The script is below.&lt;br /&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;/code&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Inventory Computers&amp;lt;/title&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;HTA:APPLICATION &lt;br /&gt;     ID=&amp;quot;objHTAInventory&amp;quot;&lt;br /&gt;     APPLICATIONNAME=&amp;quot;HTA_Inventory&amp;quot;&lt;br /&gt;     SCROLL=&amp;quot;yes&amp;quot;&lt;br /&gt;     SINGLEINSTANCE=&amp;quot;yes&amp;quot;&lt;br /&gt;     WINDOWSTATE=&amp;quot;normal&amp;quot;&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;SCRIPT Language=&amp;quot;VBScript&amp;quot;&amp;gt;&lt;br /&gt;&lt;br /&gt;'*******************************************************************************&lt;br /&gt;'Script to accept a text file as source of machine names, then create a new &lt;br /&gt;'    Excel workbook for each computer in the file and save the workbook as the &lt;br /&gt;'    computer name. Each workbook will contain a sheet for hardware, software, &lt;br /&gt;'    printers, services, and general information.&lt;br /&gt;'Created by Brian Bohanon&lt;br /&gt;'Created: 7/7/2008&lt;br /&gt;'*******************************************************************************&lt;br /&gt;Option Explicit&lt;br /&gt;&lt;br /&gt;'Global Variables&lt;br /&gt;Dim arrFileLines()  'array to hold computer names&lt;br /&gt;Dim tst     'variable for file&lt;br /&gt;Dim i, j, k, l   'global counters&lt;br /&gt;'Objects&lt;br /&gt;Dim objFSO, objFile, objDialog, objExcel, objWMIService, objWorkbook&lt;br /&gt;Dim objPrintItem, objDiskDrive, objExplorer, objLocalWMIService, objLocalItem&lt;br /&gt;Dim objOSItem, objBIOS, objSetting, objQuickFix, objSoftware, objService&lt;br /&gt;Dim objDrive, objNet, objProcItem, objSCSIItem, objVideo, objDisk&lt;br /&gt;'Collections&lt;br /&gt;Dim colOSItems, colBIOS, colSettings, colQuickFixes, colSoftware, colServices&lt;br /&gt;Dim colPrintItems, colDisks, colDiskDrives, colDrives, colNet, colProcItems&lt;br /&gt;Dim colSCSIItems, colVideo, colLocalItems&lt;br /&gt;Dim WshShell   'Provides access to WScript.Shell&lt;br /&gt;Dim srcFileName   'source file&lt;br /&gt;Dim intResult   'used to test open file dialog&lt;br /&gt;Dim strComputer   'active computer to inventory&lt;br /&gt;Dim strDirectory  'Local directory&lt;br /&gt;Dim strLocalComputer 'Local computer script is running on&lt;br /&gt;Dim intHorizontal, intVertical, intLeft, intTop&lt;br /&gt;&lt;br /&gt;'Constants&lt;br /&gt;Const xlLeft = -4131&lt;br /&gt;Const xlHorizontal = -4128&lt;br /&gt;&lt;br /&gt;'*******************************************************************************&lt;br /&gt;'Sub routines&lt;br /&gt;'*******************************************************************************&lt;br /&gt;&lt;br /&gt;Sub Window_onLoad&lt;br /&gt;    Set WshShell = CreateObject(&amp;quot;WScript.Shell&amp;quot;)&lt;br /&gt;    strLocalComputer = &amp;quot;.&amp;quot;&lt;br /&gt;    'Set current directory to Desktop &amp; display on page&lt;br /&gt;    strDirectory = WshShell.SpecialFolders(&amp;quot;Desktop&amp;quot;) &amp; &amp;quot;\&amp;quot;&lt;br /&gt;    DirectorySpan.innerhtml = &amp;quot;The files will be saved to &amp;quot; &amp; strDirectory&lt;br /&gt;&lt;br /&gt;    'Set window size   &lt;br /&gt;    window.resizeTo 550, 750&lt;br /&gt;        &lt;br /&gt;    Set objLocalWMIService = GetObject(&amp;quot;winmgmts:\\&amp;quot; &amp; strLocalComputer &amp;_&lt;br /&gt;      &amp;quot;\root\cimv2&amp;quot;)&lt;br /&gt;    Set colLocalItems = objLocalWMIService.ExecQuery(&amp;quot;Select * From &amp;quot; &amp;_&lt;br /&gt;     &amp;quot;Win32_DesktopMonitor&amp;quot;)&lt;br /&gt;    &lt;br /&gt;    'Compensation for multiple video adapters, i.e. laptops&lt;br /&gt;    For Each objLocalItem in colLocalItems&lt;br /&gt;     If intHorizontal &amp;lt;&amp;gt; &amp;quot;&amp;quot; Then&lt;br /&gt;      Exit For&lt;br /&gt;     Else&lt;br /&gt;      'get the current resolution&lt;br /&gt;         intHorizontal = objLocalItem.ScreenWidth&lt;br /&gt;         intVertical = objLocalItem.ScreenHeight&lt;br /&gt;        End If &lt;br /&gt;    Next&lt;br /&gt;    'divide the center on the screen&lt;br /&gt;    intLeft = (intHorizontal - 550) / 2&lt;br /&gt;    intTop = (intVertical - 650) / 2&lt;br /&gt;    window.moveTo intLeft, intTop&lt;br /&gt; &lt;br /&gt; Set objLocalWMIService = Nothing&lt;br /&gt; Set objLocalItem = Nothing&lt;br /&gt; Set WshShell = Nothing&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;'*******************************************************************************&lt;br /&gt;&lt;br /&gt;Sub CreateLog()&lt;br /&gt; &lt;br /&gt;On Error Resume Next &lt;br /&gt; &lt;br /&gt; Dim objFile&lt;br /&gt; Dim strFile, strText&lt;br /&gt; &lt;br /&gt; 'Create log file&lt;br /&gt; strFile = &amp;quot;InventoryLog_&amp;quot; &amp; Month(Date()) &amp; &amp;quot;_&amp;quot; &amp; Day(Date()) &amp; &amp;quot;.txt&amp;quot;&lt;br /&gt; Set objFSO = CreateObject(&amp;quot;Scripting.FileSystemObject&amp;quot;)&lt;br /&gt; Set objFile = objFSO.CreateTextFile(strDirectory &amp; strFile)&lt;br /&gt; &lt;br /&gt; Set objFile = Nothing&lt;br /&gt; &lt;br /&gt; 'Write headers to the log file&lt;br /&gt; strText = &amp;quot;Computer Name,Date,Result,Return Code&amp;quot;&lt;br /&gt; Set objFile = objFSO.OpenTextFile(strDirectory &amp; strFile, 8, True)&lt;br /&gt; objFile.WriteLine(strText)&lt;br /&gt; &lt;br /&gt; 'Reset strText for later use&lt;br /&gt; strText = &amp;quot;&amp;quot;&lt;br /&gt; &lt;br /&gt; Set objFSO = Nothing&lt;br /&gt; Set objFile = Nothing&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;'*******************************************************************************&lt;br /&gt;&lt;br /&gt;'Used to append the log for each computer the script is run against&lt;br /&gt;Sub WriteLog(strErrorNumber)&lt;br /&gt;&lt;br /&gt;On Error Resume Next&lt;br /&gt;&lt;br /&gt; Dim objFile, objTextFile&lt;br /&gt; Dim strFile, strText&lt;br /&gt; &lt;br /&gt; strFile = &amp;quot;InventoryLog_&amp;quot; &amp; Month(Date()) &amp; &amp;quot;_&amp;quot; &amp; Day(Date()) &amp; &amp;quot;.txt&amp;quot;&lt;br /&gt; Set objFSO = CreateObject(&amp;quot;Scripting.FileSystemObject&amp;quot;)&lt;br /&gt; &lt;br /&gt; 'Check to see if the log exists&lt;br /&gt; If objFSO.FileExists(strDirectory &amp; strFile) Then&lt;br /&gt;  'Write to the log&lt;br /&gt;  Select Case strErrorNumber&lt;br /&gt;    Case 0&lt;br /&gt;     ' Success&lt;br /&gt;     '&lt;br /&gt;      strText = strComputer &amp; &amp;quot;,&amp;quot; &amp; Date() &amp; &amp;quot;,&amp;quot; &amp; &amp;quot;Success&amp;quot;&lt;br /&gt;      Set objTextFile = objFSO.OpenTextFile(strDirectory &amp; strFile, 8, True)&lt;br /&gt;   objTextFile.WriteLine(strText)&lt;br /&gt;   objTextFile.Close&lt;br /&gt;    Case 70&lt;br /&gt;      '&lt;br /&gt;      ' Run-time error '70': Permission denied&lt;br /&gt;      '&lt;br /&gt;      strText = strComputer &amp; &amp;quot;,&amp;quot; &amp; Date() &amp; &amp;quot;,&amp;quot; &amp; &amp;quot;Permission denied,&amp;quot; &amp;_&lt;br /&gt;       strErrorNumber&lt;br /&gt;      Set objTextFile = objFSO.OpenTextFile(strDirectory &amp; strFile, 8, True)&lt;br /&gt;   objTextFile.WriteLine(strText)&lt;br /&gt;   objTextFile.Close&lt;br /&gt;      '&lt;br /&gt;    Case 462&lt;br /&gt;      '&lt;br /&gt;      ' The remote server machine does not exist or is unavailable&lt;br /&gt;      '&lt;br /&gt;      strText = strComputer &amp; &amp;quot;,&amp;quot; &amp; Date() &amp; &amp;quot;,&amp;quot; &amp; &amp;quot;Machine does not exist or &amp;quot; &amp;_&lt;br /&gt;       &amp;quot;is unavailable,&amp;quot; &amp; strErrorNumber&lt;br /&gt;      Set objTextFile = objFSO.OpenTextFile(strDirectory &amp; strFile, 8, True)&lt;br /&gt;   objTextFile.WriteLine(strText)&lt;br /&gt;   objTextFile.Close&lt;br /&gt;      '&lt;br /&gt;    Case -2147217375&lt;br /&gt;      '&lt;br /&gt;      ' Unknown/undocumented runtime error (till this time)&lt;br /&gt;      ' The remote server machine name was assigned erroneously&lt;br /&gt;      strText = strComputer &amp; &amp;quot;,&amp;quot; &amp; Date() &amp; &amp;quot;,&amp;quot; &amp; &amp;quot;Unknown Error,&amp;quot; &amp; strErrorNumber&lt;br /&gt;      Set objTextFile = objFSO.OpenTextFile(strDirectory &amp; strFile, 8, True)&lt;br /&gt;   objTextFile.WriteLine(strText)&lt;br /&gt;   objTextFile.Close&lt;br /&gt;      '&lt;br /&gt;    Case Else&lt;br /&gt;      '&lt;br /&gt;      ' Unhandled Error&lt;br /&gt;      ' &lt;br /&gt;      strText = strComputer &amp; &amp;quot;,&amp;quot; &amp; Date() &amp; &amp;quot;,&amp;quot; &amp; &amp;quot;Unhandled VBScript Error,&amp;quot; &amp;_&lt;br /&gt;       strErrorNumber&lt;br /&gt;      Set objTextFile = objFSO.OpenTextFile(strDirectory &amp; strFile, 8, True)&lt;br /&gt;   objTextFile.WriteLine(strText)&lt;br /&gt;   objTextFile.Close&lt;br /&gt;      '  &lt;br /&gt;  End Select&lt;br /&gt; Else&lt;br /&gt;  'If the log doesn't exist, create it&lt;br /&gt;  CreateLog()&lt;br /&gt; End If &lt;br /&gt; &lt;br /&gt; Set objTextFile = Nothing&lt;br /&gt; Set objFile = Nothing&lt;br /&gt; Set objFSO = Nothing&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;'*******************************************************************************&lt;br /&gt;'Cretes the window to tell the user the script is running&lt;br /&gt;Sub ProgressBar()&lt;br /&gt;&lt;br /&gt; On Error Resume Next&lt;br /&gt; &lt;br /&gt; 'Provide access to the local computer&lt;br /&gt; strLocalComputer = &amp;quot;.&amp;quot;&lt;br /&gt; Set WshShell = CreateObject(&amp;quot;WScript.Shell&amp;quot;)&lt;br /&gt; Set objLocalWMIService = GetObject(&amp;quot;Winmgmts:\\&amp;quot; &amp; strLocalComputer &amp; &amp;quot;\root\cimv2&amp;quot;)&lt;br /&gt; Set colLocalItems = objLocalWMIService.ExecQuery(&amp;quot;Select * From &amp;quot; &amp;_&lt;br /&gt;  &amp;quot;Win32_DesktopMonitor&amp;quot;)&lt;br /&gt; 'Allow for multiple video cards&lt;br /&gt; For Each objLocalItem in colLocalItems&lt;br /&gt;  If intHorizontal &amp;lt;&amp;gt; &amp;quot;&amp;quot; Then&lt;br /&gt;   Exit For&lt;br /&gt;  Else&lt;br /&gt;   'Get the screen resolution&lt;br /&gt;      intHorizontal = objLocalItem.ScreenWidth&lt;br /&gt;      intVertical = objLocalItem.ScreenHeight&lt;br /&gt;     End If&lt;br /&gt; Next&lt;br /&gt; &lt;br /&gt; Set objExplorer = CreateObject _&lt;br /&gt;     (&amp;quot;InternetExplorer.Application&amp;quot;)&lt;br /&gt; &lt;br /&gt; 'Default address when window opens&lt;br /&gt; objExplorer.Navigate &amp;quot;about:blank&amp;quot; &lt;br /&gt; 'Remove toolbars  &lt;br /&gt; objExplorer.ToolBar = 0&lt;br /&gt; objExplorer.StatusBar = 0&lt;br /&gt; 'Center the window on the screen&lt;br /&gt; objExplorer.Left = (intHorizontal - 400) / 2&lt;br /&gt; objExplorer.Top = (intVertical - 200) / 2&lt;br /&gt; objExplorer.Width = 400&lt;br /&gt; objExplorer.Height = 200 &lt;br /&gt; objExplorer.Visible = 1             &lt;br /&gt; &lt;br /&gt; 'Make the cursor into an hourglass to show busy&lt;br /&gt; objExplorer.Document.Body.Style.Cursor = &amp;quot;wait&amp;quot;&lt;br /&gt; &lt;br /&gt; 'Window title&lt;br /&gt; objExplorer.Document.Title = &amp;quot;Inventory script in progress&amp;quot;&lt;br /&gt; 'Message for status, including the current computer&lt;br /&gt; objExplorer.Document.Body.InnerHTML = &amp;quot;The inventory script is being processed &amp;quot; &amp;_&lt;br /&gt;  &amp;quot; for computer &amp;quot; &amp; strComputer &amp;_&lt;br /&gt;  &amp;quot;. This might take several minutes to complete.&amp;quot;&lt;br /&gt; &lt;br /&gt; 'Create the workbook for the current computer&lt;br /&gt; CreateWorkbook(strComputer)&lt;br /&gt; &lt;br /&gt; 'Reset the cursor to normal&lt;br /&gt; objExplorer.Document.Body.Style.Cursor = &amp;quot;default&amp;quot;&lt;br /&gt; &lt;br /&gt; 'Close Internet Explorer window&lt;br /&gt; objExplorer.Quit&lt;br /&gt; &lt;br /&gt; Set objLocalWMIService = Nothing&lt;br /&gt; Set objLocalItem = Nothing&lt;br /&gt; Set objExplorer = Nothing&lt;br /&gt; Set WshShell = Nothing&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;'*******************************************************************************&lt;br /&gt;&lt;br /&gt;'Create a new Excel workbook&lt;br /&gt;Sub CreateWorkbook(strComputerName)&lt;br /&gt;&lt;br /&gt;On Error Resume Next&lt;br /&gt;&lt;br /&gt;Dim n, a&lt;br /&gt;n = 3&lt;br /&gt;Set objExcel = CreateObject(&amp;quot;Excel.Application&amp;quot;)&lt;br /&gt;objExcel.Visible = False&lt;br /&gt;Application.DisplayAlerts = False&lt;br /&gt;Set objWorkbook = objExcel.Workbooks.Add()&lt;br /&gt; &lt;br /&gt; 'Create Sheet named %computername% for general information&lt;br /&gt; objExcel.Worksheets(&amp;quot;Sheet1&amp;quot;).Name = strComputerName&lt;br /&gt; GetSystemInfo(strComputerName)&lt;br /&gt; If SoftwareCheckbox.Checked Then&lt;br /&gt;  n = n + 1&lt;br /&gt;  'Create Sheet named software&lt;br /&gt;  objExcel.Worksheets.Add&lt;br /&gt;  objExcel.Worksheets(&amp;quot;Sheet&amp;quot; &amp; n).Name = &amp;quot;Software&amp;quot;&lt;br /&gt;  objExcel.Worksheets(&amp;quot;Software&amp;quot;).Activate&lt;br /&gt;  GetSoftwareInfo()&lt;br /&gt; End If&lt;br /&gt; If ServicesCheckbox.Checked Then&lt;br /&gt;  n = n + 1&lt;br /&gt;  'Create Sheet named services&lt;br /&gt;  objExcel.Worksheets.Add&lt;br /&gt;  objExcel.Worksheets(&amp;quot;Sheet&amp;quot; &amp; n).Name = &amp;quot;Services&amp;quot;&lt;br /&gt;  objExcel.Worksheets(&amp;quot;Services&amp;quot;).Activate&lt;br /&gt;  GetServicesInfo()&lt;br /&gt; End If&lt;br /&gt; If HardwareCheckbox.Checked Then&lt;br /&gt;  n = n + 1&lt;br /&gt;  'Create Sheet named hardware - e.g. disk drives, memory, processor&lt;br /&gt;  objExcel.Worksheets.Add&lt;br /&gt;  objExcel.Worksheets(&amp;quot;Sheet&amp;quot; &amp; n).Name = &amp;quot;Hardware&amp;quot;&lt;br /&gt;  objExcel.Worksheets(&amp;quot;Hardware&amp;quot;).Activate&lt;br /&gt;  GetHardwareInfo()&lt;br /&gt; End If&lt;br /&gt; If PrintersCheckbox.Checked Then&lt;br /&gt;  n = n + 1&lt;br /&gt;  'Create Sheet named printers&lt;br /&gt;  objExcel.Worksheets.Add&lt;br /&gt;  objExcel.Worksheets(&amp;quot;Sheet&amp;quot; &amp; n).Name = &amp;quot;Printers&amp;quot;&lt;br /&gt;  objExcel.Worksheets(&amp;quot;Printers&amp;quot;).Activate&lt;br /&gt;  GetPrinterInfo()&lt;br /&gt; End If &lt;br /&gt; &lt;br /&gt; objExcel.Worksheets(&amp;quot;Sheet2&amp;quot;).Delete&lt;br /&gt; objExcel.Worksheets(&amp;quot;Sheet3&amp;quot;).Delete&lt;br /&gt; If n &amp;lt;&amp;gt; 1 Then&lt;br /&gt;  a = n - 1&lt;br /&gt;  objExcel.Worksheets(strComputerName).Move objExcel.Worksheets(1)&lt;br /&gt; End If&lt;br /&gt; &lt;br /&gt; objExcel.Worksheets(strComputerName).Activate&lt;br /&gt; 'Save the workbook to the desktop&lt;br /&gt; objWorkbook.SaveAs(strDirectory &amp; strComputerName &amp; &amp;quot;_Inventory_&amp;quot; &amp;_ &lt;br /&gt;  Month(Date()) &amp; &amp;quot;_&amp;quot; &amp; Day(Date()) &amp; &amp;quot;_&amp;quot; &amp; Year(Date()) &amp; &amp;quot;.xls&amp;quot;)&lt;br /&gt; 'Close Excel&lt;br /&gt; objExcel.Quit&lt;br /&gt; &lt;br /&gt; Set objExcel = nothing&lt;br /&gt; &lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;'*******************************************************************************&lt;br /&gt;&lt;br /&gt;'Get General information about system&lt;br /&gt;Sub GetSystemInfo(strCompName)&lt;br /&gt;&lt;br /&gt; On Error Resume Next&lt;br /&gt; &lt;br /&gt; Dim s, t  'counters&lt;br /&gt; Set colBIOS = objWMIService.ExecQuery(&amp;quot;Select * from Win32_BIOS&amp;quot;)&lt;br /&gt; Set colOSItems = objWMIService.ExecQuery(&amp;quot;Select * from Win32_OperatingSystem&amp;quot;)&lt;br /&gt; Set colSettings = objWMIService.ExecQuery(&amp;quot;Select * from Win32_ComputerSystem&amp;quot;)&lt;br /&gt; &lt;br /&gt; 'start the counter for all of the loops&lt;br /&gt; s = 1 'row counter&lt;br /&gt; t = 1   'column counter&lt;br /&gt; &lt;br /&gt; ' Section header&lt;br /&gt; objExcel.Cells(s, t).Value = &amp;quot;Computer Information&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; s = s + 1&lt;br /&gt; objExcel.Cells(s, t).Value = &amp;quot;Computer Name: &amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t).Value = strCompName&lt;br /&gt; &lt;br /&gt; 'Get OS information&lt;br /&gt; s = s + 2&lt;br /&gt; t = 1&lt;br /&gt; &lt;br /&gt; For Each objOSItem in colOSItems&lt;br /&gt;  objExcel.Cells(s, t).Value = &amp;quot;Operating System:&amp;quot;&lt;br /&gt;  objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t).Value = objOSItem.Caption&lt;br /&gt;  s = s + 1&lt;br /&gt;  t = t - 1&lt;br /&gt;  objExcel.Cells(s, t).Value = &amp;quot;Description:&amp;quot;&lt;br /&gt;  objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t).Value = objOSItem.Description&lt;br /&gt;  s = s + 1&lt;br /&gt;  t = t - 1&lt;br /&gt;  objExcel.Cells(s, t).Value = &amp;quot;InstallDate:&amp;quot; &lt;br /&gt;  objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t).Value = objOSItem.InstallDate&lt;br /&gt;  s = s + 1&lt;br /&gt;  t = t - 1&lt;br /&gt;  objExcel.Cells(s, t).Value = &amp;quot;Organization:&amp;quot;&lt;br /&gt;  objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t).Value = objOSItem.Organization&lt;br /&gt;  s = s + 1&lt;br /&gt;  t = t - 1&lt;br /&gt;  objExcel.Cells(s, t).Value = &amp;quot;RegisteredUser:&amp;quot;&lt;br /&gt;  objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t).Value = objOSItem.RegisteredUser&lt;br /&gt;  s = s + 1&lt;br /&gt;  t = t - 1&lt;br /&gt;  objExcel.Cells(s, t).Value = &amp;quot;SerialNumber:&amp;quot;&lt;br /&gt;  objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t).Value = objOSItem.SerialNumber&lt;br /&gt;  s = s + 1&lt;br /&gt;  t = t - 1&lt;br /&gt;  objExcel.Cells(s, t).Value = &amp;quot;ServicePackMajorVersion:&amp;quot;&lt;br /&gt;  objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t).Value = &amp;quot;SP &amp;quot; &amp; objOSItem.ServicePackMajorVersion&lt;br /&gt;  s = s + 1&lt;br /&gt;  t = t - 1&lt;br /&gt;  objExcel.Cells(s, t).Value = &amp;quot;ServicePackMinorVersion:&amp;quot;&lt;br /&gt;  objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t).Value = objOSItem.ServicePackMinorVersion&lt;br /&gt;  s = s + 1&lt;br /&gt;  t = t - 1&lt;br /&gt;  objExcel.Cells(s, t).Value = &amp;quot;Version:&amp;quot;&lt;br /&gt;  objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t).Value = objOSItem.Version&lt;br /&gt;  s = s + 1&lt;br /&gt;  t = t - 1&lt;br /&gt;  objExcel.Cells(s, t).Value = &amp;quot;WindowsDirectory:&amp;quot;&lt;br /&gt;  objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t).Value = objOSItem.WindowsDirectory&lt;br /&gt;  s = s + 1&lt;br /&gt;  t = t - 1&lt;br /&gt; Next&lt;br /&gt; &lt;br /&gt; Set objOSItem = nothing&lt;br /&gt; &lt;br /&gt; s = s + 1&lt;br /&gt; &lt;br /&gt; 'Section header&lt;br /&gt; objExcel.Cells(s, t).Value = &amp;quot;Physical Machine Information&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; &lt;br /&gt; s = s + 1&lt;br /&gt; &lt;br /&gt; 'Insert hardware serial number&lt;br /&gt; For each objBIOS in colBIOS&lt;br /&gt;  objExcel.Cells(s, t).Value = &amp;quot;Serial Number&amp;quot;&lt;br /&gt;  objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t).Value = objBIOS.SerialNumber&lt;br /&gt; Next&lt;br /&gt; &lt;br /&gt; Set objBIOS = nothing&lt;br /&gt; &lt;br /&gt; s = s + 1&lt;br /&gt; t = 1&lt;br /&gt; &lt;br /&gt; 'Physical Machine information&lt;br /&gt; For Each objSetting in colSettings&lt;br /&gt;  objExcel.Cells(s, t).Value = &amp;quot;Manufacturer:&amp;quot;&lt;br /&gt;  objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t).Value = objSetting.Manufacturer&lt;br /&gt;  s = s + 1&lt;br /&gt;  t = t - 1&lt;br /&gt; &lt;br /&gt;  s = s + 1&lt;br /&gt;  t = 1&lt;br /&gt;  objExcel.Cells(s, t).Value = &amp;quot;Model:&amp;quot;&lt;br /&gt;  objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t).Value = objSetting.Model&lt;br /&gt;  s = s + 1&lt;br /&gt;  t = t - 1&lt;br /&gt;  objExcel.Cells(s, t).Value = &amp;quot;System Type:&amp;quot;&lt;br /&gt;  objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t).Value = objSetting.SystemType&lt;br /&gt; Next&lt;br /&gt; &lt;br /&gt; Set objSetting = nothing&lt;br /&gt; &lt;br /&gt; ' Autofit the columns &lt;br /&gt; objExcel.Columns(&amp;quot;A:Z&amp;quot;).EntireColumn.AutoFit&lt;br /&gt; objExcel.Columns(&amp;quot;A:Z&amp;quot;).HorizontalAlignment = xlLeft&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;'*******************************************************************************&lt;br /&gt;&lt;br /&gt;'Get Installed Software and hotfixes&lt;br /&gt;Sub GetSoftwareInfo()&lt;br /&gt;&lt;br /&gt; On Error Resume Next&lt;br /&gt; &lt;br /&gt; Dim s, t  'counters&lt;br /&gt; s = 1&lt;br /&gt; t = 1&lt;br /&gt; Set colQuickFixes = objWMIService.ExecQuery(&amp;quot;Select * from &amp;quot; &amp;_&lt;br /&gt;  &amp;quot;Win32_QuickFixEngineering&amp;quot;)&lt;br /&gt; Set colSoftware = objWMIService.ExecQuery(&amp;quot;Select * from Win32_Product&amp;quot;)&lt;br /&gt; &lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Software&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; s = s + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Caption:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Name:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Version:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Description:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Vendor:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Identiying Number:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Install Date:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Install Location:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Package Cache:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; s = s + 1&lt;br /&gt; t = 1&lt;br /&gt; &lt;br /&gt; For Each objSoftware in colSoftware&lt;br /&gt;  objExcel.Cells(s, t) = objSoftware.Caption&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objSoftware.Name&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objSoftware.Version&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objSoftware.Description &lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objSoftware.Vendor&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objSoftware.IdentifyingNumber          &lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objSoftware.InstallDate2 &lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objSoftware.InstallLocation   &lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objSoftware.PackageCache&lt;br /&gt;  t = 1&lt;br /&gt;  s = s + 1&lt;br /&gt; Next&lt;br /&gt; &lt;br /&gt; Set objSoftware = nothing&lt;br /&gt; &lt;br /&gt; s = s + 1&lt;br /&gt; t = 1&lt;br /&gt; &lt;br /&gt; 'Section header&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Installed Hotfixes&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt;  &lt;br /&gt; s = s + 1&lt;br /&gt;&lt;br /&gt; 'Column headers&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Hot Fix ID:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Description:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Installed By:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1  &lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Install Date:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Service Pack Level:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt;'Hotfix data&lt;br /&gt; For Each objQuickFix in colQuickFixes&lt;br /&gt;  s = s + 1&lt;br /&gt;  t = 1&lt;br /&gt; &lt;br /&gt;  If objQuickFix.HotFixID = &amp;quot;File 1&amp;quot; Then&lt;br /&gt;   objExcel.Cells(s, t) = objQuickFix.ServicePackInEffect&lt;br /&gt;  Else&lt;br /&gt;  objExcel.Cells(s, t) = objQuickFix.HotFixID&lt;br /&gt;  End If&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objQuickFix.Description&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objQuickFix.InstalledBy&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objQuickFix.InstalledOn&lt;br /&gt;  t = t + 1 &lt;br /&gt;  objExcel.Cells(s, t) = objQuickFix.ServicePackInEffect&lt;br /&gt; Next&lt;br /&gt;&lt;br /&gt; Set objQuickFix = nothing&lt;br /&gt; &lt;br /&gt; ' Autofit the columns &lt;br /&gt; objExcel.Columns(&amp;quot;A:Z&amp;quot;).EntireColumn.AutoFit&lt;br /&gt; objExcel.Columns(&amp;quot;A:Z&amp;quot;).HorizontalAlignment = xlLeft&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;'*******************************************************************************&lt;br /&gt;&lt;br /&gt;Sub GetServicesInfo()&lt;br /&gt;&lt;br /&gt; On Error Resume Next&lt;br /&gt; &lt;br /&gt; Set colServices = objWMIService.ExecQuery(&amp;quot;Select * From Win32_Service&amp;quot;)&lt;br /&gt; &lt;br /&gt; Dim s, t&lt;br /&gt; s = 1&lt;br /&gt; t = 1&lt;br /&gt; &lt;br /&gt; 'Column headers&lt;br /&gt;  objExcel.Cells(s, t).Value = &amp;quot;Service&amp;quot;&lt;br /&gt;  objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t).Value = &amp;quot;Status&amp;quot;&lt;br /&gt;  objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t).Value = &amp;quot;StartMode&amp;quot;&lt;br /&gt;  objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t).Value = &amp;quot;StartName&amp;quot;&lt;br /&gt;  objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t).Value = &amp;quot;PathName&amp;quot;&lt;br /&gt;  objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; 'Services data&lt;br /&gt; For Each objService in colServices&lt;br /&gt;     s = s + 1&lt;br /&gt;  objExcel.Cells(s, 1) = objService.Name&lt;br /&gt;  objExcel.Cells(s, 2) = objService.State&lt;br /&gt;  objExcel.Cells(s, 3) = objService.StartMode&lt;br /&gt;  objExcel.Cells(s, 4) = objService.StartName&lt;br /&gt;  objExcel.Cells(s, 5) = objService.PathName&lt;br /&gt;  if objService.State = &amp;quot;Stopped&amp;quot; then&lt;br /&gt;   objExcel.Cells(s, 2).Font.ColorIndex = 3&lt;br /&gt;  end if&lt;br /&gt; Next&lt;br /&gt; &lt;br /&gt; Set objService = nothing&lt;br /&gt; &lt;br /&gt; ' Autofit the first column to fit the longest service name&lt;br /&gt; objExcel.Columns(&amp;quot;A:Z&amp;quot;).EntireColumn.AutoFit&lt;br /&gt; objExcel.Columns(&amp;quot;A:Z&amp;quot;).HorizontalAlignment = xlLeft&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;'*******************************************************************************&lt;br /&gt;&lt;br /&gt;Sub GetHardwareInfo()&lt;br /&gt;&lt;br /&gt; On Error Resume Next&lt;br /&gt; &lt;br /&gt; Dim s, t&lt;br /&gt; Dim video_ram, disk_size, disk_free, diskDrive_size, phys_ram&lt;br /&gt; &lt;br /&gt; s = 1&lt;br /&gt; t = 1&lt;br /&gt; &lt;br /&gt; Set objFSO = CreateObject(&amp;quot;Scripting.FileSystemObject&amp;quot;)&lt;br /&gt; Set colBIOS = objWMIService.ExecQuery(&amp;quot;Select * from Win32_BIOS&amp;quot;)&lt;br /&gt; Set colDisks = objWMIService.ExecQuery(&amp;quot;Select * from Win32_LogicalDisk&amp;quot;)&lt;br /&gt; Set colDiskDrives = objWMIService.ExecQuery(&amp;quot;Select * from Win32_DiskDrive&amp;quot;)&lt;br /&gt; Set colDrives = objFSO.Drives&lt;br /&gt; Set colNet = objWMIService.ExecQuery(&amp;quot;Select * from Win32_NetworkAdapter&amp;quot;)&lt;br /&gt; Set colProcItems = objWMIService.ExecQuery(&amp;quot;Select * from Win32_Processor&amp;quot;)&lt;br /&gt; Set colSCSIItems = objWMIService.ExecQuery(&amp;quot;Select * from Win32_SCSIController&amp;quot;)&lt;br /&gt; Set colSettings = objWMIService.ExecQuery(&amp;quot;Select * from Win32_ComputerSystem&amp;quot;)&lt;br /&gt; Set colVideo = objWMIService.ExecQuery(&amp;quot;Select * from Win32_VideoController&amp;quot;)&lt;br /&gt; &lt;br /&gt; 'Section header&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Logical Drives&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; s = s + 1&lt;br /&gt; t = 1&lt;br /&gt; &lt;br /&gt; 'Column headers&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Drive letters:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Volume Name:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Description:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;File System:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Total Size (GB):&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Free Space (GB):&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Volume Serial Number:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Compressed:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; s = s + 1&lt;br /&gt; t = 1&lt;br /&gt; &lt;br /&gt; 'Logical disk data&lt;br /&gt; For each objDisk in colDisks&lt;br /&gt;  objExcel.Cells(s, t) = objDisk.DeviceID&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objDisk.VolumeName  &lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objDisk.Description           &lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objDisk.FileSystem  &lt;br /&gt;  t = t + 1&lt;br /&gt;  'Convert into GB&lt;br /&gt;  disk_size = objDisk.Size / 1073741824&lt;br /&gt;  objExcel.Cells(s, t) = int(disk_size)    &lt;br /&gt;  t = t + 1&lt;br /&gt;  'Convert into GB&lt;br /&gt;  disk_free = objDisk.FreeSpace / 1073741824&lt;br /&gt;  objExcel.Cells(s, t) = int(disk_free)            &lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objDisk.VolumeSerialNumber &lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objDisk.Compressed  &lt;br /&gt;  t = 1&lt;br /&gt;  s = s + 1&lt;br /&gt; Next&lt;br /&gt; &lt;br /&gt; Set objDisk = nothing&lt;br /&gt; &lt;br /&gt; t = 1&lt;br /&gt; s = s + 1&lt;br /&gt; &lt;br /&gt; 'Section header&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Physical Drives&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; s = s + 1&lt;br /&gt; t = 1&lt;br /&gt; &lt;br /&gt; 'Column headers&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Caption:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Device ID:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Index:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Interface Type:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Manufacturer:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Media Loaded:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Media Type:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Model:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Partitions:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;SCSI Bus:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;SCSI Logical Unit:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;SCSI Port:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;SCSI TargetId:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Sectors Per Track:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Signature:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Size (GB):&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Status:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; 'Physical disk data&lt;br /&gt; For each objDiskDrive in colDiskDrives&lt;br /&gt;     &lt;br /&gt;     s = s + 1&lt;br /&gt;     t = 1&lt;br /&gt;     &lt;br /&gt;     objExcel.Cells(s, t) = objDiskDrive.Caption        &lt;br /&gt;     t = t + 1        &lt;br /&gt;     objExcel.Cells(s, t) = objDiskDrive.DeviceID        &lt;br /&gt;     t = t + 1       &lt;br /&gt;     objExcel.Cells(s, t) = objDiskDrive.Index       &lt;br /&gt;     t = t + 1       &lt;br /&gt;     objExcel.Cells(s, t) = objDiskDrive.InterfaceType        &lt;br /&gt;     t = t + 1        &lt;br /&gt;     objExcel.Cells(s, t) = objDiskDrive.Manufacturer        &lt;br /&gt;     t = t + 1        &lt;br /&gt;     objExcel.Cells(s, t) = objDiskDrive.MediaLoaded       &lt;br /&gt;     t = t + 1       &lt;br /&gt;     objExcel.Cells(s, t) = objDiskDrive.MediaType        &lt;br /&gt;     t = t + 1        &lt;br /&gt;     objExcel.Cells(s, t) = objDiskDrive.Model        &lt;br /&gt;     t = t + 1        &lt;br /&gt;     objExcel.Cells(s, t) = objDiskDrive.Partitions        &lt;br /&gt;     t = t + 1        &lt;br /&gt;     objExcel.Cells(s, t) = objDiskDrive.SCSIBus        &lt;br /&gt;     t = t + 1        &lt;br /&gt;     objExcel.Cells(s, t) = objDiskDrive.SCSILogicalUnit        &lt;br /&gt;     t = t + 1        &lt;br /&gt;     objExcel.Cells(s, t) = objDiskDrive.SCSIPort        &lt;br /&gt;     t = t + 1       &lt;br /&gt;     objExcel.Cells(s, t) = objDiskDrive.SCSITargetId        &lt;br /&gt;     t = t + 1       &lt;br /&gt;     objExcel.Cells(s, t) = objDiskDrive.SectorsPerTrack        &lt;br /&gt;     t = t + 1       &lt;br /&gt;     objExcel.Cells(s, t) = objDiskDrive.Signature         &lt;br /&gt;     t = t + 1        &lt;br /&gt;     'convert into GB&lt;br /&gt;     diskDrive_size = objDiskDrive.Size / 1073741824&lt;br /&gt;     objExcel.Cells(s, t) = int(diskDrive_size)   &lt;br /&gt;     t = t + 1&lt;br /&gt;     objExcel.Cells(s, t) = objDiskDrive.Status &lt;br /&gt; Next&lt;br /&gt; &lt;br /&gt; Set objDiskDrive = nothing&lt;br /&gt; &lt;br /&gt; 'Get SCSI Controller&lt;br /&gt; &lt;br /&gt; t = 1&lt;br /&gt; s = s + 2&lt;br /&gt; &lt;br /&gt; 'Section header&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;SCSI Information&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; s = s + 1&lt;br /&gt; t = 1&lt;br /&gt; &lt;br /&gt; 'Column headers&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Name:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Device ID:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Driver Name:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;PNP Device ID:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Protocol Supported:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Status Information:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Configuration Manager Error Code:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Configuration Manager User Configuration:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; 'SCSI controller data &lt;br /&gt; For Each objSCSIItem in colSCSIItems&lt;br /&gt;     s = s + 1&lt;br /&gt;     t = 1&lt;br /&gt;     &lt;br /&gt;     objExcel.Cells(s, t) = objSCSIItem.Name       &lt;br /&gt;     t = t + 1      &lt;br /&gt;     objExcel.Cells(s, t) = objSCSIItem.DeviceID  &lt;br /&gt;     t = t + 1      &lt;br /&gt;     objExcel.Cells(s, t) = objSCSIItem.DriverName       &lt;br /&gt;     t = t + 1       &lt;br /&gt;     objExcel.Cells(s, t) = objSCSIItem.PNPDeviceID       &lt;br /&gt;     t = t + 1        &lt;br /&gt;     objExcel.Cells(s, t) = objSCSIItem.ProtocolSupported        &lt;br /&gt;     t = t + 1        &lt;br /&gt;     objExcel.Cells(s, t) = objSCSIItem.StatusInfo        &lt;br /&gt;     t = t + 1        &lt;br /&gt;     objExcel.Cells(s, t) = objSCSIItem.ConfigManagerErrorCode        &lt;br /&gt;     t = t + 1&lt;br /&gt;     objExcel.Cells(s, t) = objSCSIItem.ConfigManagerUserConfig&lt;br /&gt; Next&lt;br /&gt; &lt;br /&gt; Set objSCSIItem = nothing&lt;br /&gt; &lt;br /&gt; 'Get BIOS information&lt;br /&gt; &lt;br /&gt; t = 1&lt;br /&gt; s = s + 2&lt;br /&gt; &lt;br /&gt; 'Section header&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;BIOS Information&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; s = s + 1&lt;br /&gt; t = 1&lt;br /&gt; &lt;br /&gt; 'Column header&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Manufacturer:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Name:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Release Date:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Version:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; 'BIOS data&lt;br /&gt; For each objBIOS in colBIOS&lt;br /&gt;     s = s + 1&lt;br /&gt;     t = 1&lt;br /&gt;     &lt;br /&gt;     objExcel.Cells(s, t) = objBIOS.Manufacturer     &lt;br /&gt;     t = t + 1       &lt;br /&gt;     objExcel.Cells(s, t) = objBIOS.Name        &lt;br /&gt;     t = t + 1   &lt;br /&gt;     objExcel.Cells(s, t) = objBIOS.ReleaseDate    &lt;br /&gt;     t = t + 1&lt;br /&gt;     objExcel.Cells(s, t) = objBIOS.Version&lt;br /&gt; Next&lt;br /&gt; &lt;br /&gt; Set objBIOS = nothing&lt;br /&gt; &lt;br /&gt; 'Get Processor information&lt;br /&gt; &lt;br /&gt; t = 1&lt;br /&gt; s = s + 2&lt;br /&gt; &lt;br /&gt; 'Section header&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Processor Information&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; s = s + 1&lt;br /&gt; t = 1&lt;br /&gt; &lt;br /&gt; 'Column headers&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Name:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Manufacturer:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Current Clock Speed (MHz):&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;L2 Cache Size (MB):&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Architecture:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Address Width (bits):&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; 'Processor data&lt;br /&gt; For Each objProcItem in colProcItems&lt;br /&gt;     s = s + 1&lt;br /&gt;     t = 1&lt;br /&gt;     &lt;br /&gt;     objExcel.Cells(s, t) = objProcItem.Name&lt;br /&gt;     t = t + 1&lt;br /&gt;     objExcel.Cells(s, t) = objProcItem.Manufacturer&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objProcItem.CurrentClockSpeed&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objProcItem.L2CacheSize&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objProcItem.Architecture&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objProcItem.AddressWidth&lt;br /&gt; Next&lt;br /&gt; &lt;br /&gt; Set objProcItem = nothing&lt;br /&gt; &lt;br /&gt; 'Get Memory Information&lt;br /&gt; &lt;br /&gt; t = 1&lt;br /&gt; s = s + 2&lt;br /&gt; &lt;br /&gt; 'Section header&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Physical Memory Information&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; s = s + 1&lt;br /&gt; t = 1&lt;br /&gt; &lt;br /&gt; 'Column header&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Total Physical Memory (MB):&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; 'Physical memory data&lt;br /&gt; For Each objSetting in colSettings&lt;br /&gt;     s = s + 1&lt;br /&gt;     t = 1&lt;br /&gt;     'convert into MB&lt;br /&gt;  phys_ram = objSetting.TotalPhysicalMemory / 1048576&lt;br /&gt;     objExcel.Cells(s, t) = int(phys_ram)&lt;br /&gt; Next&lt;br /&gt; &lt;br /&gt; Set objSetting = nothing&lt;br /&gt; &lt;br /&gt; 'Get Video Information&lt;br /&gt; &lt;br /&gt; t = 1&lt;br /&gt; s = s + 2&lt;br /&gt; &lt;br /&gt; 'Section header&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Video Card Information&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; s = s + 1&lt;br /&gt; t = 1&lt;br /&gt; &lt;br /&gt; 'Column header&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Name:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Description:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Driver Version:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Video Memory (MB):&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; 'Video card data&lt;br /&gt; For Each objVideo in colVideo&lt;br /&gt;     s = s + 1&lt;br /&gt;     t = 1&lt;br /&gt;  objExcel.Cells(s, t) = objVideo.Caption&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objVideo.Description&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objVideo.DriverVersion&lt;br /&gt;  t = t + 1&lt;br /&gt;  video_ram = objVideo.AdapterRAM / 1048576&lt;br /&gt;  objExcel.Cells(s, t) = int(video_ram)&lt;br /&gt; Next&lt;br /&gt; &lt;br /&gt; Set objVideo = nothing&lt;br /&gt; &lt;br /&gt; 'Get Network Adapter Information&lt;br /&gt; &lt;br /&gt; t = 1&lt;br /&gt; s = s + 2&lt;br /&gt; &lt;br /&gt; 'Section header&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;NIC Information&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; 'Column header&lt;br /&gt; s = s + 1&lt;br /&gt; t = 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Name:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;MAC Address:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = True&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Manufacturer:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; 'Network card data&lt;br /&gt; For Each objNet in colNet&lt;br /&gt;  'If virtual adapter, don't include&lt;br /&gt;  If objNet.MACAddress &amp;lt;&amp;gt; &amp;quot;&amp;quot; Then&lt;br /&gt;   s = s + 1&lt;br /&gt;   t = 1&lt;br /&gt;   objExcel.Cells(s, t) = objNet.Name&lt;br /&gt;   t = t + 1&lt;br /&gt;   objExcel.Cells(s, t) = objNet.MACAddress&lt;br /&gt;   t = t + 1&lt;br /&gt;   objExcel.Cells(s, t) = objNet.Manufacturer&lt;br /&gt;  End if&lt;br /&gt; Next&lt;br /&gt; &lt;br /&gt; Set objNet = Nothing&lt;br /&gt; Set objFSO = Nothing&lt;br /&gt; &lt;br /&gt; ' Autofit the first column to fit the longest name&lt;br /&gt; objExcel.Columns(&amp;quot;A:Z&amp;quot;).EntireColumn.AutoFit&lt;br /&gt; objExcel.Columns(&amp;quot;A:Z&amp;quot;).HorizontalAlignment = xlLeft&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;'*******************************************************************************&lt;br /&gt;&lt;br /&gt;Sub GetPrinterInfo()&lt;br /&gt;&lt;br /&gt; On Error Resume Next&lt;br /&gt; &lt;br /&gt; Dim s, t&lt;br /&gt; s = 1&lt;br /&gt; t = 1&lt;br /&gt; &lt;br /&gt; Set colPrintItems = objWMIService.ExecQuery(&amp;quot;Select * from Win32_Printer&amp;quot;)&lt;br /&gt; &lt;br /&gt; 'Section header&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Printer Information&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; 'Column Headers&lt;br /&gt; s = s + 1&lt;br /&gt; t = 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Default:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Name:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Server Name:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Share Name:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Driver Name:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE &lt;br /&gt; t = t + 1&lt;br /&gt; objExcel.Cells(s, t) = &amp;quot;Port Name:&amp;quot;&lt;br /&gt; objExcel.Cells(s, t).Font.Bold = TRUE&lt;br /&gt;         &lt;br /&gt; 'List printer objects        &lt;br /&gt; For Each objPrintItem in colPrintItems&lt;br /&gt;     s = s + 1&lt;br /&gt;     t = 1&lt;br /&gt;     objExcel.Cells(s, t) = objPrintItem.Default   &lt;br /&gt;     t = t + 1&lt;br /&gt;     objExcel.Cells(s, t) = objPrintItem.Name&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objPrintItem.ServerName&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objPrintItem.ShareName&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objPrintItem.DriverName&lt;br /&gt;  t = t + 1&lt;br /&gt;  objExcel.Cells(s, t) = objPrintItem.PortName&lt;br /&gt; Next&lt;br /&gt; &lt;br /&gt; Set objPrintItem = nothing&lt;br /&gt; &lt;br /&gt; ' Autofit the first column to fit the longest name&lt;br /&gt; objExcel.Columns(&amp;quot;A:Z&amp;quot;).EntireColumn.AutoFit&lt;br /&gt; objExcel.Columns(&amp;quot;A:Z&amp;quot;).HorizontalAlignment = xlLeft&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;'*******************************************************************************&lt;br /&gt;'Button Actions&lt;br /&gt;'*******************************************************************************&lt;br /&gt;&lt;br /&gt;'This sub is used if a file (array) of computers is input&lt;br /&gt;Sub BrowseForInputFile()&lt;br /&gt;&lt;br /&gt; On Error Resume Next&lt;br /&gt; 'Create File Dialog Object&lt;br /&gt; Set objDialog = CreateObject(&amp;quot;UserAccounts.CommonDialog&amp;quot;)&lt;br /&gt; Set WshShell = CreateObject(&amp;quot;WScript.Shell&amp;quot;)&lt;br /&gt; &lt;br /&gt; 'Start Logging&lt;br /&gt; CreateLog()&lt;br /&gt; &lt;br /&gt; 'Open the source file that contains the list of computers&lt;br /&gt; objDialog.Filter = &amp;quot;Text Files|*.txt&amp;quot;&lt;br /&gt; objDialog.InitialDir = strDirectory&lt;br /&gt; intResult = objDialog.ShowOpen&lt;br /&gt; &lt;br /&gt; 'If cancel button is hit&lt;br /&gt; If intResult = 0 Then&lt;br /&gt;  'Reload the interface&lt;br /&gt;     RefreshHTA()&lt;br /&gt; Else&lt;br /&gt;  'Set selected file to srcFileName&lt;br /&gt;  srcFileName = objDialog.FileName&lt;br /&gt;  'set counter to 0 index&lt;br /&gt;  i = 0 &lt;br /&gt;   Set objFSO = CreateObject(&amp;quot;Scripting.FileSystemObject&amp;quot;)&lt;br /&gt;   'Open the text file for reading&lt;br /&gt;  Set objFile = objFSO.OpenTextFile(srcFileName, 1) &lt;br /&gt;  Do Until objFile.AtEndOfStream &lt;br /&gt;   Redim Preserve arrFileLines(i) &lt;br /&gt;   arrFileLines(i) = objFile.ReadLine &lt;br /&gt;   i = i + 1 &lt;br /&gt;  Loop &lt;br /&gt;  &lt;br /&gt;  objFile.Close &lt;br /&gt;  &lt;br /&gt;  Set objFile = Nothing&lt;br /&gt;  Set objFSO = Nothing&lt;br /&gt;  &lt;br /&gt; End If&lt;br /&gt; &lt;br /&gt; '*******************************************************************************&lt;br /&gt; 'Loop through the array of computers, create a workbook with the computer name, &lt;br /&gt; '     get the list of services, &lt;br /&gt; '     and write out the services to the excel sheet&lt;br /&gt; '*******************************************************************************&lt;br /&gt; &lt;br /&gt; For l = Ubound(arrFileLines) to LBound(arrFileLines) Step -1 &lt;br /&gt;  'set computer to the current index in the array&lt;br /&gt;  strComputer = arrFileLines(l)&lt;br /&gt;  'connect to the computer's WMI service&lt;br /&gt;  Set objWMIService = GetObject(&amp;quot;winmgmts:\\&amp;quot; &amp; strComputer &amp; &amp;quot;\root\cimv2&amp;quot;)&lt;br /&gt;  Select Case Err.Number&lt;br /&gt;    Case 0&lt;br /&gt;      '&lt;br /&gt;      ' Success - begin the process&lt;br /&gt;   ProgressBar()&lt;br /&gt;      WriteLog(Err.Number) 'write success to the log&lt;br /&gt;      '&lt;br /&gt;    Case 70&lt;br /&gt;      '&lt;br /&gt;      ' Run-time error '70': Permission denied&lt;br /&gt;      WriteLog(Err.Number)&lt;br /&gt;      '&lt;br /&gt;    Case 462&lt;br /&gt;      '&lt;br /&gt;      ' The remote server machine does not exist or is unavailable&lt;br /&gt;      WriteLog(Err.Number)&lt;br /&gt;      '&lt;br /&gt;    Case -2147217375&lt;br /&gt;      '&lt;br /&gt;      ' Unknown/undocumented runtime error (till this time)&lt;br /&gt;      ' The remote server machine name was assigned erroneously&lt;br /&gt;      WriteLog(Err.Number)&lt;br /&gt;    Case Else&lt;br /&gt;      '&lt;br /&gt;      ' Unhandled Run-time error (till this time)&lt;br /&gt;      WriteLog(Err.Number)&lt;br /&gt;      '&lt;br /&gt;  End Select&lt;br /&gt;  &lt;br /&gt; Next&lt;br /&gt; &lt;br /&gt; Set objDialog = Nothing&lt;br /&gt; Set WshShell = Nothing&lt;br /&gt; Set objWMIService = Nothing&lt;br /&gt; &lt;br /&gt; 'Displays end of process on UI&lt;br /&gt; CompletedJob()&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;'*******************************************************************************&lt;br /&gt;'This sub is used if a single computer name is put into the text box&lt;br /&gt;Sub InventorySingleComputer()&lt;br /&gt;&lt;br /&gt; On Error Resume Next&lt;br /&gt; &lt;br /&gt; 'Start Logging&lt;br /&gt; CreateLog()&lt;br /&gt; &lt;br /&gt; strComputer = SingleComputerName.value&lt;br /&gt; &lt;br /&gt; Set WshShell = CreateObject(&amp;quot;WScript.Shell&amp;quot;)&lt;br /&gt; Set objWMIService = GetObject(&amp;quot;winmgmts:\\&amp;quot; &amp; strComputer &amp; &amp;quot;\root\cimv2&amp;quot;)&lt;br /&gt; &lt;br /&gt; Select Case Err.Number&lt;br /&gt;   Case 0&lt;br /&gt;     '&lt;br /&gt;     ' Success - begin the process&lt;br /&gt;  ProgressBar()&lt;br /&gt;     WriteLog(Err.Number)&lt;br /&gt;     '&lt;br /&gt;   Case 70&lt;br /&gt;     '&lt;br /&gt;     ' Run-time error '70': Permission denied&lt;br /&gt;     WriteLog(Err.Number)&lt;br /&gt;     '&lt;br /&gt;   Case 462&lt;br /&gt;     '&lt;br /&gt;     ' The remote server machine does not exist or is unavailable&lt;br /&gt;     WriteLog(Err.Number)&lt;br /&gt;     '&lt;br /&gt;   Case -2147217375&lt;br /&gt;     '&lt;br /&gt;     ' Unknown/undocumented runtime error (till this time)&lt;br /&gt;     ' The remote server machine name was assigned erroneously&lt;br /&gt;     WriteLog(Err.Number)&lt;br /&gt;   Case Else&lt;br /&gt;     '&lt;br /&gt;     ' Unhandled Run-time error (till this time)&lt;br /&gt;     WriteLog(Err.Number)&lt;br /&gt;     '&lt;br /&gt; End Select&lt;br /&gt;  &lt;br /&gt; Set objWMIService = Nothing&lt;br /&gt; 'Displays end of process on UI&lt;br /&gt; CompletedJob()&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;'*******************************************************************************&lt;br /&gt;'Use a list of computers from AD to get inventory&lt;br /&gt;Sub InventoryDomainComputers()&lt;br /&gt;&lt;br /&gt;On Error Resume Next&lt;br /&gt; 'Start Logging&lt;br /&gt; CreateLog()&lt;br /&gt; &lt;br /&gt;Dim strDomain&lt;br /&gt;Dim objConnection, objCommand, objRecordSet&lt;br /&gt;Const ADS_SCOPE_SUBTREE = 2&lt;br /&gt;strDomain = DomainComputers.value&lt;br /&gt;&lt;br /&gt;Set objConnection = CreateObject(&amp;quot;ADODB.Connection&amp;quot;)&lt;br /&gt;Set objCommand =   CreateObject(&amp;quot;ADODB.Command&amp;quot;)&lt;br /&gt;objConnection.Provider = &amp;quot;ADsDSOObject&amp;quot;&lt;br /&gt;objConnection.Open &amp;quot;Active Directory Provider&amp;quot;&lt;br /&gt;&lt;br /&gt;Set objCOmmand.ActiveConnection = objConnection&lt;br /&gt; objCommand.CommandText = _&lt;br /&gt;     &amp;quot;Select Name, Location from 'LDAP://&amp;quot; &amp; strDomain &amp; &amp;quot;' &amp;quot; _&lt;br /&gt;         &amp; &amp;quot;Where objectCategory='computer'&amp;quot;  &lt;br /&gt; objCommand.Properties(&amp;quot;Page Size&amp;quot;) = 1500&lt;br /&gt; objCommand.Properties(&amp;quot;Searchscope&amp;quot;) = ADS_SCOPE_SUBTREE &lt;br /&gt; Set objRecordSet = objCommand.Execute&lt;br /&gt;&lt;br /&gt;objRecordSet.MoveFirst&lt;br /&gt;&lt;br /&gt;i = 0 &lt;br /&gt;&lt;br /&gt;Do Until objRecordSet.EOF&lt;br /&gt; Redim Preserve arrFileLines(i) &lt;br /&gt; arrFileLines(i) = objRecordSet.Fields(&amp;quot;Name&amp;quot;).Value&lt;br /&gt; i = i + 1 &lt;br /&gt;    'Wscript.Echo &amp;quot;Computer Name: &amp;quot; &amp; objRecordSet.Fields(&amp;quot;Name&amp;quot;).Value&lt;br /&gt;    objRecordSet.MoveNext&lt;br /&gt;Loop &lt;br /&gt;&lt;br /&gt; For l = Ubound(arrFileLines) to LBound(arrFileLines) Step -1 &lt;br /&gt;  'set computer to the current index in the array&lt;br /&gt;  strComputer = arrFileLines(l)&lt;br /&gt;  'connect to the computer's WMI service&lt;br /&gt;  Set objWMIService = GetObject(&amp;quot;winmgmts:\\&amp;quot; &amp; strComputer &amp; &amp;quot;\root\cimv2&amp;quot;)&lt;br /&gt;  Select Case Err.Number&lt;br /&gt;    Case 0&lt;br /&gt;      '&lt;br /&gt;      ' Success - begin the process&lt;br /&gt;   ProgressBar()&lt;br /&gt;      WriteLog(Err.Number) 'write success to the log&lt;br /&gt;      '&lt;br /&gt;    Case 70&lt;br /&gt;      '&lt;br /&gt;      ' Run-time error '70': Permission denied&lt;br /&gt;      WriteLog(Err.Number)&lt;br /&gt;      '&lt;br /&gt;    Case 462&lt;br /&gt;      '&lt;br /&gt;      ' The remote server machine does not exist or is unavailable&lt;br /&gt;      WriteLog(Err.Number)&lt;br /&gt;      '&lt;br /&gt;    Case -2147217375&lt;br /&gt;      '&lt;br /&gt;      ' Unknown/undocumented runtime error (till this time)&lt;br /&gt;      ' The remote server machine name was assigned erroneously&lt;br /&gt;      WriteLog(Err.Number)&lt;br /&gt;    Case Else&lt;br /&gt;      '&lt;br /&gt;      ' Unhandled Run-time error (till this time)&lt;br /&gt;      WriteLog(Err.Number)&lt;br /&gt;      '&lt;br /&gt;  End Select&lt;br /&gt;  &lt;br /&gt; Next&lt;br /&gt;&lt;br /&gt; Set objWMIService = Nothing&lt;br /&gt; Set objConnection = Nothing&lt;br /&gt; Set objCommand = Nothing&lt;br /&gt; Set objRecordSet = Nothing&lt;br /&gt; &lt;br /&gt; 'Displays end of process on UI&lt;br /&gt; CompletedJob()&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;'*******************************************************************************&lt;br /&gt;'Get a list from AD and display in new window for approval&lt;br /&gt;&lt;br /&gt;Sub GetComputersFromAD()&lt;br /&gt;&lt;br /&gt;On Error Resume Next &lt;br /&gt;&lt;br /&gt;Dim strDomain, strDomainPath&lt;br /&gt;Dim objConnection, objCommand, objRecordSet&lt;br /&gt;Const ADS_SCOPE_SUBTREE = 2&lt;br /&gt;strDomain = DomainComputers.value&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Set objConnection = CreateObject(&amp;quot;ADODB.Connection&amp;quot;)&lt;br /&gt;Set objCommand =   CreateObject(&amp;quot;ADODB.Command&amp;quot;)&lt;br /&gt;objConnection.Provider = &amp;quot;ADsDSOObject&amp;quot;&lt;br /&gt;objConnection.Open &amp;quot;Active Directory Provider&amp;quot;&lt;br /&gt;&lt;br /&gt;Set objCOmmand.ActiveConnection = objConnection&lt;br /&gt; &lt;br /&gt; objCommand.CommandText = _&lt;br /&gt;     &amp;quot;Select Name, Location from 'LDAP://&amp;quot; &amp; strDomain &amp; &amp;quot;' &amp;quot; _&lt;br /&gt;         &amp; &amp;quot;Where objectCategory='computer'&amp;quot;  &lt;br /&gt; objCommand.Properties(&amp;quot;Page Size&amp;quot;) = 500&lt;br /&gt; objCommand.Properties(&amp;quot;Searchscope&amp;quot;) = ADS_SCOPE_SUBTREE &lt;br /&gt; Set objRecordSet = objCommand.Execute&lt;br /&gt;&lt;br /&gt;objRecordSet.MoveFirst&lt;br /&gt;&lt;br /&gt;i = 0 &lt;br /&gt;&lt;br /&gt;Do Until objRecordSet.EOF&lt;br /&gt; Redim Preserve arrFileLines(i) &lt;br /&gt; arrFileLines(i) = objRecordSet.Fields(&amp;quot;Name&amp;quot;).Value&lt;br /&gt; i = i + 1 &lt;br /&gt;    'Wscript.Echo &amp;quot;Computer Name: &amp;quot; &amp; objRecordSet.Fields(&amp;quot;Name&amp;quot;).Value&lt;br /&gt;    objRecordSet.MoveNext&lt;br /&gt;Loop&lt;br /&gt;&lt;br /&gt;DisplayDomainComputers(i)&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;'*******************************************************************************&lt;br /&gt;&lt;br /&gt;Sub DisplayDomainComputers(iCount)&lt;br /&gt;&lt;br /&gt;On Error Resume Next&lt;br /&gt;Dim strDomain, strDomainPath&lt;br /&gt;Dim objConnection, objCommand, objRecordSet&lt;br /&gt;Const ADS_SCOPE_SUBTREE = 2&lt;br /&gt;'Write to a new window to get approval for list&lt;br /&gt; strLocalComputer = &amp;quot;.&amp;quot;&lt;br /&gt; Set WshShell = CreateObject(&amp;quot;WScript.Shell&amp;quot;)&lt;br /&gt; Set objLocalWMIService = GetObject(&amp;quot;Winmgmts:\\&amp;quot; &amp; strLocalComputer &amp; &amp;quot;\root\cimv2&amp;quot;)&lt;br /&gt; Set colLocalItems = objLocalWMIService.ExecQuery(&amp;quot;Select * From &amp;quot; &amp;_&lt;br /&gt;  &amp;quot;Win32_DesktopMonitor&amp;quot;)&lt;br /&gt; 'Allow for multiple video cards&lt;br /&gt; For Each objLocalItem in colLocalItems&lt;br /&gt;  If intHorizontal &amp;lt;&amp;gt; &amp;quot;&amp;quot; Then&lt;br /&gt;   Exit For&lt;br /&gt;  Else&lt;br /&gt;   'Get the screen resolution&lt;br /&gt;      intHorizontal = objLocalItem.ScreenWidth&lt;br /&gt;      intVertical = objLocalItem.ScreenHeight&lt;br /&gt;     End If&lt;br /&gt; Next&lt;br /&gt; &lt;br /&gt; Set objExplorer = CreateObject _&lt;br /&gt;     (&amp;quot;InternetExplorer.Application&amp;quot;)&lt;br /&gt; &lt;br /&gt; 'Default address when window opens&lt;br /&gt; objExplorer.Navigate &amp;quot;about:blank&amp;quot; &lt;br /&gt; 'Remove toolbars  &lt;br /&gt; objExplorer.ToolBar = 0&lt;br /&gt; objExplorer.StatusBar = 0&lt;br /&gt; 'Center the window on the screen&lt;br /&gt; objExplorer.Left = (intHorizontal - 400) / 2&lt;br /&gt; objExplorer.Top = (intVertical - 200) / 2&lt;br /&gt; objExplorer.Width = 400&lt;br /&gt; objExplorer.Height = 200 &lt;br /&gt; objExplorer.Visible = 1             &lt;br /&gt; &lt;br /&gt; 'Window title&lt;br /&gt; objExplorer.Document.Title = &amp;quot;Approve Computers&amp;quot;&lt;br /&gt; 'Message for status, including the current computer&lt;br /&gt; objExplorer.Document.Body.InnerHTML = iCount &amp; &amp;quot; Computers were found in the query. &amp;quot; '&amp;_&lt;br /&gt;  '&amp;quot;&amp;lt;input id=AcceptADbutton  class=&amp;quot;&amp;quot;button&amp;quot;&amp;quot; type=&amp;quot;&amp;quot;button&amp;quot;&amp;quot; &amp;quot; &amp;_&lt;br /&gt;  '&amp;quot;value=&amp;quot;&amp;quot;Continue with Inventory...&amp;quot;&amp;quot; name=&amp;quot;&amp;quot;AcceptAD_button&amp;quot;&amp;quot;  &amp;quot; &amp;_&lt;br /&gt;  '&amp;quot;onClick=&amp;quot;&amp;quot;CloseIE&amp;quot;&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt; &lt;br /&gt; Set objLocalWMIService = Nothing&lt;br /&gt; Set objLocalItem = Nothing&lt;br /&gt; Set WshShell = Nothing&lt;br /&gt; Set objConnection = Nothing&lt;br /&gt; Set objCommand = Nothing&lt;br /&gt; Set objRecordSet = Nothing&lt;br /&gt; Set objExplorer = Nothing&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;'*******************************************************************************&lt;br /&gt;'Sub used to change the default directory&lt;br /&gt;Sub ChangeDirectory()&lt;br /&gt;&lt;br /&gt; On Error Resume Next&lt;br /&gt;&lt;br /&gt; Dim objShell, objFolder, objFolderItem, objPath&lt;br /&gt; 'Constants&lt;br /&gt; Const WINDOW_HANDLE = 0&lt;br /&gt; Const NO_OPTIONS = 0&lt;br /&gt; &lt;br /&gt; Set objShell = CreateObject(&amp;quot;Shell.Application&amp;quot;)&lt;br /&gt; 'Create the folder dialog&lt;br /&gt; Set objFolder = objShell.BrowseForFolder _&lt;br /&gt;     (WINDOW_HANDLE, &amp;quot;Select a folder:&amp;quot;, NO_OPTIONS, strDirectory)       &lt;br /&gt; Set objFolderItem = objFolder.Self&lt;br /&gt; 'Get the selected path&lt;br /&gt; objPath = objFolderItem.Path&lt;br /&gt; &lt;br /&gt; 'Handle the cancel button, keep current directory&lt;br /&gt; If Err.Number &amp;lt;&amp;gt; 0 Then&lt;br /&gt;  strDirectory = strDirectory&lt;br /&gt; Else&lt;br /&gt;  'append the \ to the end of the path&lt;br /&gt;  strDirectory = objPath &amp; &amp;quot;\&amp;quot;&lt;br /&gt; End If&lt;br /&gt; &lt;br /&gt; 'Display the new path in the UI&lt;br /&gt; DirectorySpan.innerhtml = &amp;quot;The files will be saved to &amp;quot; &amp; strDirectory&lt;br /&gt; &lt;br /&gt; Set objShell = nothing&lt;br /&gt; Set objFolder = nothing&lt;br /&gt; Set objFolderItem = nothing&lt;br /&gt; Set objPath = nothing&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;'*******************************************************************************&lt;br /&gt;&lt;br /&gt;Sub CompletedJob()&lt;br /&gt;&lt;br /&gt; On Error Resume Next&lt;br /&gt; 'Display completion on the UI&lt;br /&gt; StatusSpan.innerhtml = &amp;quot;&amp;lt;font size=&amp;quot;&amp;quot;8&amp;quot;&amp;quot; color=&amp;quot;&amp;quot;Red&amp;quot;&amp;quot;&amp;gt;&amp;quot; &amp;_&lt;br /&gt;  &amp;quot;&amp;lt;b&amp;gt;Inventory Completed&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&amp;quot;&lt;br /&gt; 'Create Exit button&lt;br /&gt; CloseSpan.innerhtml = &amp;quot;&amp;lt;input id=closebutton  class=&amp;quot;&amp;quot;button&amp;quot;&amp;quot; &amp;quot; &amp;_&lt;br /&gt;  &amp;quot;type=&amp;quot;&amp;quot;button&amp;quot;&amp;quot; value=&amp;quot;&amp;quot;Exit&amp;quot;&amp;quot; name=&amp;quot;&amp;quot;close_button&amp;quot;&amp;quot;  &amp;quot; &amp;_&lt;br /&gt;  &amp;quot;onClick=&amp;quot;&amp;quot;CloseHTA&amp;quot;&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;'*******************************************************************************&lt;br /&gt;'Used to reload the UI&lt;br /&gt;Sub RefreshHTA()&lt;br /&gt; Location.Reload(True)&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;'*******************************************************************************&lt;br /&gt;'Used to close the UI&lt;br /&gt;Sub CloseHTA()&lt;br /&gt; window.close()&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;'*******************************************************************************&lt;br /&gt;&lt;br /&gt;&amp;lt;/SCRIPT&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;table width=&amp;quot;100%&amp;quot; border=0&amp;gt;&lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;   &amp;lt;!--Title--&amp;gt;&lt;br /&gt;    &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;u&amp;gt;Computer Inventory&amp;lt;u&amp;gt;&amp;lt;b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;    &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;   &amp;lt;!-- Display the current directory --&amp;gt;&lt;br /&gt;    &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;span id=DirectorySpan&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;   &amp;lt;!-- Button To change the directory --&amp;gt;&lt;br /&gt;    &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;input id=changedirectorybutton  class=&amp;quot;button&amp;quot; type=&amp;quot;button&amp;quot; &lt;br /&gt;      value=&amp;quot;Change Directory&amp;quot; name=&amp;quot;changedirecgory_button&amp;quot;  &lt;br /&gt;      onClick=&amp;quot;ChangeDirectory&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;    &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;    &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;     &amp;lt;!-- checkboxes --&amp;gt;&lt;br /&gt;     &amp;lt;table width=&amp;quot;100%&amp;quot; border=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;      &amp;lt;tr&amp;gt;&lt;br /&gt;       &amp;lt;td&amp;gt;Items To Inventory&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;/tr&amp;gt;&lt;br /&gt;      &amp;lt;tr&amp;gt;&lt;br /&gt;       &amp;lt;td&amp;gt;&amp;lt;input type=&amp;quot;checkbox&amp;quot;name=&amp;quot;SoftwareCheckbox&amp;quot;value=&amp;quot;1&amp;quot;&amp;gt; Software&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;/tr&amp;gt;&lt;br /&gt;      &amp;lt;tr&amp;gt;&lt;br /&gt;       &amp;lt;td&amp;gt;&amp;lt;input type=&amp;quot;checkbox&amp;quot;name=&amp;quot;HardwareCheckbox&amp;quot;value=&amp;quot;1&amp;quot;&amp;gt; Hardware&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;/tr&amp;gt;&lt;br /&gt;      &amp;lt;tr&amp;gt;&lt;br /&gt;       &amp;lt;td&amp;gt;&amp;lt;input type=&amp;quot;checkbox&amp;quot;name=&amp;quot;ServicesCheckbox&amp;quot;value=&amp;quot;1&amp;quot;&amp;gt; Services&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;/tr&amp;gt;&lt;br /&gt;      &amp;lt;tr&amp;gt;&lt;br /&gt;       &amp;lt;td&amp;gt;&amp;lt;input type=&amp;quot;checkbox&amp;quot;name=&amp;quot;PrintersCheckbox&amp;quot;value=&amp;quot;1&amp;quot;&amp;gt; Printers&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;/tr&amp;gt;&lt;br /&gt;     &amp;lt;/table&amp;gt;&lt;br /&gt;    &amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;    &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt; &lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;    &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;Enter a single computer name...&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;   &amp;lt;!-- text field To enter a single computer --&amp;gt;&lt;br /&gt;    &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;SingleComputerName&amp;quot; size=&amp;quot;25&amp;quot;&amp;gt;&lt;br /&gt;     &amp;lt;input id=singlecomputerbutton  class=&amp;quot;button&amp;quot; type=&amp;quot;button&amp;quot; &lt;br /&gt;      value=&amp;quot;Inventory Computer&amp;quot; name=&amp;quot;singlecomputer_button&amp;quot;  &lt;br /&gt;      onClick=&amp;quot;InventorySingleComputer&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt; &lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;    &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;  &lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;    &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;Or select the input file...&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;   &amp;lt;!-- button To browse For a list of computeres --&amp;gt;&lt;br /&gt;    &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;input id=browsebutton  class=&amp;quot;button&amp;quot; type=&amp;quot;button&amp;quot; &lt;br /&gt;     value=&amp;quot;Browse...&amp;quot; name=&amp;quot;browse_button&amp;quot;  onClick=&amp;quot;BrowseForInputFile&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;    &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;    &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;Or Enter a Domain To Get the list from...&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;   &amp;lt;!-- button To search domain For a list of computeres --&amp;gt;&lt;br /&gt;    &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;DomainComputers&amp;quot; size=&amp;quot;25&amp;quot;&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;   &amp;lt;!-- button To search domain For a list of computeres --&amp;gt;&lt;br /&gt;    &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;input id=domainbutton  class=&amp;quot;button&amp;quot; type=&amp;quot;button&amp;quot; &lt;br /&gt;     value=&amp;quot;Calculate Number of Computers...&amp;quot; name=&amp;quot;domain_button&amp;quot;  onClick=&amp;quot;GetComputersFromAD&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;   &amp;lt;!-- button To inventory a list of computers from Domain --&amp;gt;&lt;br /&gt;    &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;input id=domainbutton  class=&amp;quot;button&amp;quot; type=&amp;quot;button&amp;quot; &lt;br /&gt;     value=&amp;quot;Inventory all Domain Computers...&amp;quot; name=&amp;quot;inventory_domain_button&amp;quot;  onClick=&amp;quot;InventoryDomainComputers&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;    &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;   &amp;lt;!--area used To display the status --&amp;gt;&lt;br /&gt;    &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;span id=StatusSpan&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;    &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;   &amp;lt;!-- area To put Exit button --&amp;gt;&lt;br /&gt;    &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;span id=CloseSpan&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-4636160340572144019?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/4636160340572144019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=4636160340572144019' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/4636160340572144019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/4636160340572144019'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/09/html-application-to-inventory-windows.html' title='HTML Application to Inventory Windows Computers'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-679716814047718686</id><published>2008-08-29T15:38:00.008-04:00</published><updated>2009-03-01T20:55:09.305-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GroupPolicy'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>Internet Explorer 7 "Fix My Settings" Domain Group Policy</title><content type='html'>As part of &lt;a href="http://www.microsoft.com/windows/products/winfamily/ie/default.mspx"&gt;Internet Explorer 7&lt;/a&gt;'s security, users are prompted to "Fix My Settings" if the application checks the security settings and sees that they are not the "default" from &lt;a href="http://www.microsoft.com/en/us/default.aspx"&gt;Microsoft&lt;/a&gt;. The prompt is a flashing "Information Bar" when  the browser is first opened, and the user is asked if they would like to "Fix My Settings". I needed a way to get rid of this for a specific group of computers, and any user that logs into the computer.&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;When &lt;a href="http://www.microsoft.com/windows/products/winfamily/ie/default.mspx"&gt;Internet Explorer 7&lt;/a&gt; is installed on a computer, an administration template is created in the local computer policy (User Configuration-&gt;Administrative Templates-&gt;Windows Components-&gt;Internet Explorer) that adds some new configuration options. One of those options is "Turn off the security settings check feature". Currently, this is not available as a domain policy. To accomplish this I copied the default Internet Explorer 7 administrative template (named inetres.adm), edited it to be the way I wanted, changed the class from USER to COMPUTER so it would apply to the computer instead of the a specific user account, saved it with a different name (so as not to confuse the group policy editor) and imported it to my domain group policy. The template is below.&lt;br&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;&lt;br /&gt;CLASS MACHINE &lt;br /&gt;CATEGORY &amp;&amp;#35&amp;#59;33&amp;#59;&amp;&amp;#35&amp;#59;33&amp;#59;WindowsComponents &lt;br /&gt;CATEGORY &amp;&amp;#35&amp;#59;33&amp;#59;&amp;&amp;#35&amp;#59;33&amp;#59;InternetExplorer7_Customized &lt;br /&gt;&amp;#35&amp;#59;if version &amp;gt;&amp;#61; 4 EXPLAIN &lt;br /&gt;&amp;&amp;#35&amp;#59;33&amp;#59;&amp;&amp;#35&amp;#59;33&amp;#59;IE_ExplainCat &lt;br /&gt;&amp;#35&amp;#59;endif &lt;br /&gt;POLICY &amp;&amp;#35&amp;#59;33&amp;#59;&amp;&amp;#35&amp;#59;33&amp;#59;Disable_Security_Settings_Check &lt;br /&gt;&amp;#35&amp;#59;if version &amp;gt;&amp;#61; 4 SUPPORTED &lt;br /&gt;&amp;&amp;#35&amp;#59;33&amp;#59;&amp;&amp;#35&amp;#59;33&amp;#59;SUPPORTED_IE7 &lt;br /&gt;&amp;#35&amp;#59;endif &lt;br /&gt;KEYNAME &amp;quot;Software\Policies\Microsoft\Internet Explorer\Security&amp;quot; &lt;br /&gt;EXPLAIN &amp;&amp;#35&amp;#59;33&amp;#59;&amp;&amp;#35&amp;#59;33&amp;#59;IE_Explain_DisableSecuritySettingsCheck &lt;br /&gt;VALUENAME DisableSecuritySettingsCheck &lt;br /&gt;VALUEON NUMERIC 1 &lt;br /&gt;VALUEOFF NUMERIC 0 &lt;br /&gt;END POLICY &lt;br /&gt;END CATEGORY &amp;#59; &lt;br /&gt;InternetExplorer7_Customized &lt;br /&gt;END CATEGORY &amp;#59; &lt;br /&gt;WindowsComponents [strings] &lt;br /&gt;WindowsComponents&amp;#61;&amp;quot;Windows Components&amp;quot; &lt;br /&gt;InternetExplorer7_Customized&amp;#61;&amp;quot;Internet Explorer 7 Customized Settings&amp;quot; &lt;br /&gt;Disable_Security_Settings_Check&amp;#61;&amp;quot;Turn off the Security Settings Check feature&amp;quot; &lt;br /&gt;IE_Explain_DisableSecuritySettingsCheck&amp;#61;&amp;quot;This policy setting turns off the Security Settings Check feature, which checks Internet Explorer security settings to determine when the settings put Internet Explorer at risk.\n\nIf you enable this policy setting, the security settings check will not be performed.\n\nIf you disable or do not configure this policy setting, the security settings check will be performed.&amp;quot; &lt;br /&gt;IE_ExplainCat&amp;#61;&amp;quot;Custom config of Internet Explorer 7&amp;quot;&amp;#59;&lt;br /&gt;Supported on Information SUPPORTED_IE7&amp;#61;&amp;quot;At least Internet Explorer 7.0&amp;quot; &amp;#59;&lt;br /&gt;Additional strings that will be used to generate Online Help &lt;br /&gt;ADM_TITLE&amp;#61;&amp;quot;Group Policy settings for Internet Explorer&amp;quot; &lt;br /&gt;USER&amp;#61;&amp;quot;User Configuration&amp;quot; &lt;br /&gt;COMPUTER&amp;#61;&amp;quot;Computer Configuration&amp;quot; &lt;br /&gt;COMPUTER_Explain&amp;#61;&amp;quot;Contains settings that may only be used to configure Computers&amp;quot; &lt;br /&gt;USER_Explain&amp;#61;&amp;quot;Contains settings that may only be used to configure Users&amp;quot; &lt;br /&gt;SUPPORTEDON&amp;#61;&amp;quot;Requirements:&amp;quot;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-679716814047718686?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/679716814047718686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=679716814047718686' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/679716814047718686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/679716814047718686'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/08/internet-explorer-7-fix-my-settings.html' title='Internet Explorer 7 &quot;Fix My Settings&quot; Domain Group Policy'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-1182713614180950597</id><published>2008-08-27T09:44:00.006-04:00</published><updated>2009-03-01T10:51:05.466-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GroupPolicy'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Windows XP Service Pack 3 Blocker Template</title><content type='html'>As an administrator of several branch offices with many dispersed systems, I rely heavily on Group Policy and WSUS (Windows Server Update Services - &lt;a href="http://technet.microsoft.com/en-us/wsus/default.aspx"&gt;http://technet.microsoft.com/en-us/wsus/default.aspx&lt;/a&gt;) to handle updates. Sometimes, there are updates that are not ready for our production environment. One of the more recent updates that we are not ready for is Windows XP Service Pack 3 (&lt;a href="http://technet.microsoft.com/en-us/windows/bb794714.aspx"&gt;http://technet.microsoft.com/en-us/windows/bb794714.aspx&lt;/a&gt;). A list of some of the problems can be found on Michael Horowitz's Blog, "Defensive Computing" (&lt;a href="http://news.cnet.com/dont-install-windows-xp-service-pack-3-yet/"&gt;http://news.cnet.com/dont-install-windows-xp-service-pack-3-yet/&lt;/a&gt;).  To combat this, I imported an ADM (administrative) template that blocks the installation of Service Pack 3 to our Windows XP workstations. Microsoft has actually provided the template and it can be found at &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=D7C9A07A-5267-4BD6-87D0-E2A72099EDB7&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=D7C9A07A-5267-4BD6-87D0-E2A72099EDB7&amp;amp;displaylang=en&lt;/a&gt;. &lt;span class="fullpost"&gt; This template adds and sets the registry key "HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\DoNotAllowSP". Setting this to 1 (or enabled through Group Policy Editor) will block the installation of this service pack.&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-1182713614180950597?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/1182713614180950597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=1182713614180950597' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/1182713614180950597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/1182713614180950597'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/08/windows-xp-service-pack-3-blocker.html' title='Windows XP Service Pack 3 Blocker Template'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-7354380489069965376</id><published>2008-08-26T11:46:00.007-04:00</published><updated>2009-03-01T11:11:17.610-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='GroupPolicy'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='ActriveDirectory'/><title type='text'>Event ID 1030 &amp; 1058: Can't Access the File GPT.INI</title><content type='html'>For some time, two (only two) of our domain controllers have been receiving the following errors every 5 minutes:&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Event Type:    Error&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Event Source:    Userenv&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Event Category:    None&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Event ID:    1030&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Date:        8/26/2008&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Time:        11:24:10 AM&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;User:        NT AUTHORITY\SYSTEM&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Computer:    ComputerName&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Description:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Windows cannot query for the list of Group Policy objects. Check the event log for possible messages previously logged by the policy engine that describes the reason for this.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;and&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Event Type:    Error&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Event Source:    Userenv&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Event Category:    None&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Event ID:    1058&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Date:        8/26/2008&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Time:        11:24:10 AM&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;User:        NT AUTHORITY\SYSTEM&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Computer:    ComputerName&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Description:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Windows cannot access the file gpt.ini for GPO CN={31B2F340-016D-11D2-945F-00C04FB984F9},CN=Policies,CN=System,DC=domain,DC=com. The file must be present at the location &lt;\\domain.com\sysvol\domain.com\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\gpt.ini&gt;. (Configuration information could not be read from the domain controller, either because the machine is unavailable, or access has been denied. ). Group Policy processing aborted. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;After many hours of research, I tried each of the below to fix the errors with no success:&lt;br /&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Domain.com\Domain Controllers group was added manually on the security of GPT.ini file - removed this as it is not the default setting&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Added the Everyone group to the Default Domain Policy-&gt;Computer Configuration-&gt;Windows Settings-&gt;Security Settings-&gt;Local Policies-&gt;User Rights Assignment ---- REMOVED ---- as this did not fix the problem&lt;/li&gt;&lt;li&gt;Removed DNS servers that are no longer running DNS&lt;/li&gt;&lt;li&gt;Added Registry Key HKLM\software\microsoft\windowsnt\currentversion\winlogon\WaitForNetwork DWORD and set it to 1&lt;/li&gt;&lt;/ol&gt;None of these changes corrected the problem. Finally, after reading the following article: &lt;a href="http://support.microsoft.com/kb/840669"&gt;http://support.microsoft.com/kb/840669&lt;/a&gt; (which says it only applies to Windows 2000, Windows XP SP1 and SP2) I added &lt;span style="color: rgb(0, 0, 0);"&gt;the Registry Key HKLM\software\microsoft\windowsnt\currentversion\winlogon\GpNetworkStartTimeoutPolicyValue set to decimal 60 on each of these servers.&lt;br /&gt;&lt;br /&gt;According to the article, "&lt;/span&gt;If the TCP/IP protocol registers with NDIS before the network adaptor driver, for a short time it prompts higher user mode networking components that network connectivity is not available. During this short time, the Group Policy startup script cannot be downloaded." Reading on, "This problem is more likely to occur on fast networks that use 1-gigabit network adaptors or in teaming environments where the network takes several additional cycles to negotiate link speed."&lt;br /&gt;&lt;br /&gt;Both of these conditions are true on these servers:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;They have teamed network cards&lt;/li&gt;&lt;li&gt;They have gigabit ethernet cards&lt;/li&gt;&lt;/ol&gt;After setting the Registry key, I rebooted and the errors have not returned.&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-7354380489069965376?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/7354380489069965376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=7354380489069965376' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/7354380489069965376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/7354380489069965376'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/08/event-id-1030-1058-cant-access-file.html' title='Event ID 1030 &amp; 1058: Can&apos;t Access the File GPT.INI'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-7281612137906157681</id><published>2008-08-20T23:01:00.008-04:00</published><updated>2009-03-01T15:44:43.876-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GroupPolicy'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Cluster'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>MSDTC: Cluster Failure</title><content type='html'>We experienced a problem with one node of our Windows Server 2003 cluster that serves a dual purpose: file sharing and Active Directory services. In fact, one of the nodes of the cluster holds our FSMO roles. The server is typically set to have the PDC as the passive node. Unfortunately (and to this day, I'm not exactly sure why), the primary node (let's call it DC1) would no longer start the MSDTC service, thus causing the cluster to flip over to the passive node (DC2 - the PDC). This caused quite a problem, for several reasons: &lt;span class="fullpost"&gt; &lt;br /&gt;&lt;ol&gt;&lt;li&gt;No redundancy for the clustered resources, as one of the nodes was unusable.&lt;/li&gt;&lt;li&gt;The active node has several IP address resources that, when on the PDC cause numerous errors due to the fact that the PDC is now multihomed.&lt;/li&gt;&lt;/ol&gt;It took quite some time for me to figure out what the problem was. There were many different (seemingly unrelated) errors in the System Log, Application Log, and the DFS Replication Log. I tried to keep with the original problem at hand, that the MSDTC resource would not operate on DC1. While developing my course of action, I found that there was something that wasn't configured according to the Microsoft documentation on setting up the MSDT resource: "How to configure Microsoft Distributed Transaction Coordinator on a Windows Server 2003 Cluster - &lt;a href="http://support.microsoft.com/kb/301600"&gt;http://support.microsoft.com/kb/301600&lt;/a&gt;. The article is very adamant about the fact that the Network DTC service must be installed and configured, prior to starting the MSDTC resouce.&lt;br /&gt;&lt;br /&gt;To accomplish this requires installing a Windows component through Add/Remove Programs and then configuring it. The instructions for "How to enable network DTC access in Windows Server 2003" are located here: &lt;a href="http://support.microsoft.com/kb/817064/"&gt;http://support.microsoft.com/kb/817064/&lt;/a&gt;. Since completing all of these things, the MSDTC service has been running smoothly. I have been able to fail it over several times and there have been no related errors for the Clussvc.&lt;br /&gt;&lt;br /&gt;Some additional notes about this problem are the many errors that are logged. An explanation of what I found is below:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;System Log&lt;br /&gt;&lt;ul&gt;&lt;li&gt;1137: Clussvc - Event Logger - event log was filling up with events due to a bigger, yet unknown problem&lt;/li&gt;&lt;li&gt;5775: Netlogon - due to multihomed PDC&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;DFS Replication Log&lt;ul&gt;&lt;li&gt;1202: DFSR - failed to contact DC to access configuration information. Replication is stopped.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;Currently, I am still receiving 1058 and 1030 errors in the Application Log, but I should be able to get this worked out now that the cluster is stable.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-7281612137906157681?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/7281612137906157681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=7281612137906157681' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/7281612137906157681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/7281612137906157681'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/08/msdtc-cluster-failure.html' title='MSDTC: Cluster Failure'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-7453688184628203925</id><published>2008-08-14T14:46:00.007-04:00</published><updated>2009-03-01T15:46:05.828-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='PowerShell'/><title type='text'>PowerShell Error Handling</title><content type='html'>When writing any script, there needs to be some level of error handling. If for no other reason, than to make it easier to debug if there is a problem. The easiest, and most basic form of error handling that I have found is the $? variable. This variable contains true if the last operation succeeded and false if it didn't. I have found that I use this a lot when using conditional statements when looping. For example, when looping through an array:&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;for-each ($objObject in $colObjects){&lt;br /&gt;     if (!$?) {&lt;br /&gt;          $foreach.movenext() }&lt;br /&gt;     else {&lt;br /&gt;          do some processing here&lt;br /&gt;     }&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;I used this in my script for exporting mailbox statistics from Exchange (see post: &lt;a href="http://bohanonb.blogspot.com/2008/08/powershell-mailbox-size-to-csv.html"&gt;PowerShell - Mailbox Size to CSV&lt;/a&gt;). I had some problems with aliases not being unique and it was causing the script to error. To avoid this, I simply said if there was any error, move to the next record.&lt;br /&gt;&lt;br /&gt;Another way to handle this would be using the $lastexitcode variable. This returns an integer, rather than true or false. If the lost operation was successful, 0 (zero) is returned and 1 (one) is returned if the last operation failed.&lt;br /&gt;&lt;br /&gt;These are global variables built-in to PowerShell. So, you don't have to assign them. Much like Err.Number in VBScript the system handles the assignment of the variable.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-7453688184628203925?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/7453688184628203925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=7453688184628203925' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/7453688184628203925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/7453688184628203925'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/08/powershell-error-handling.html' title='PowerShell Error Handling'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-4759780563877013407</id><published>2008-08-14T11:07:00.006-04:00</published><updated>2009-03-01T15:54:42.459-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='PowerShell'/><category scheme='http://www.blogger.com/atom/ns#' term='Exchange'/><title type='text'>PowerShell - Mailbox Size to CSV</title><content type='html'>Unfortunately, we don't have the luxury of using a software package that provides reporting on our mailbox sizes and statistics like Quest's MessageStats (&lt;a href="http://www.quest.com/messagestats/"&gt;http://www.quest.com/messagestats/&lt;/a&gt;). So, I had to devise a way to get the requested (from my boss) statistics for all user's mailbox sizes. The information that was requested included:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Display Name&lt;/li&gt;&lt;li&gt;Department&lt;/li&gt;&lt;li&gt;Total Items&lt;/li&gt;&lt;li&gt;Mailbox Size (MB)&lt;/li&gt;&lt;/ul&gt;All of this information needed to be put into a CSV file that could later be used for analysis using Excel.&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;There are two cmdlets needed to access this data:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;get-mailbox&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;get-mailboxstatistics&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;It is possible to get information from one command to the other by piping (|) it, but I couldn't make this work because I needed to aggregate the data for each user. To address this, I created a collection of the mailboxes, then as I looped through the collection, I create an object that contained the information from the collection &lt;code&gt;$colMailboxes&lt;/code&gt; (information from the &lt;code&gt;get-mailbox&lt;/code&gt; cmdlet) and from the &lt;code&gt;$mailboxStats&lt;/code&gt; object (information from the &lt;code&gt;get-mailboxstatistics&lt;/code&gt; cmdlet).  As I looped through the mailboxes, the script creates a string that is then appended to a file.&lt;br /&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;#create the output file&lt;br /&gt;&lt;br /&gt;#create object of mailboxes&lt;br /&gt;$colMailboxes = get-mailbox -resultsize unlimited&lt;br /&gt;&lt;br /&gt;$strHeaders = "Display Name, Department, Total Items, Mailbox Size (MB)"&lt;br /&gt;write-output $strHeaders&lt;br /&gt;&lt;br /&gt;foreach ($objMailbox in $colMailboxes) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$mailboxStats = get-mailboxstatistics -identity $objMailbox.alias&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#if there is an error&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(!$?){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$foreach.movenext()}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$strOutput = $objMailbox.DisplayName + "," + $objMailbox.office + "," + $mailboxStats.ItemCount + "," + $mailboxStats.TotalItemSize.value.toMB()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;write-output $strOutput&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I saved this as mailbox_size_toCSV.ps1. When running the script the results must be put out to a file.&lt;br /&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;./mailbox_size_toCSV.ps1 | out-file mbstats.csv&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;There are probably several things that I could do to improve this script, but it works for me and was pretty easy to put together.&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-4759780563877013407?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/4759780563877013407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=4759780563877013407' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/4759780563877013407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/4759780563877013407'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/08/powershell-mailbox-size-to-csv.html' title='PowerShell - Mailbox Size to CSV'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-4995292857675054181</id><published>2008-08-14T02:02:00.005-04:00</published><updated>2009-03-01T10:53:42.230-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Help and Support Service is Missing</title><content type='html'>If the Help and Support service is ever missing from the service snap-in, there are two things that can be tried to fix it.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Download the helpsvc.zip from here: &lt;a href="http://windowsxp.mvps.org/reg/helpsvc.zip"&gt;http://windowsxp.mvps.org/reg/helpsvc.zip&lt;/a&gt;. &lt;span class="fullpost"&gt; Extract the file and double-click it. Answer yes and reboot.&lt;/li&gt;&lt;li&gt;Go to %systemroot%\inf and locate the file named pchealth.inf. Right-click on this file and choose Install. This will force a reinstall of the entire Windows Help and Support system. Reboot.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-4995292857675054181?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/4995292857675054181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=4995292857675054181' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/4995292857675054181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/4995292857675054181'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/08/help-and-support-service-is-missing.html' title='Help and Support Service is Missing'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-563379751299588314</id><published>2008-08-14T01:34:00.004-04:00</published><updated>2009-03-01T10:53:57.101-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>File Server Resource Manager Not Working</title><content type='html'>&lt;ol&gt;&lt;li&gt;File Server Resource Manager service doesn't start&lt;/li&gt;&lt;li&gt;File Server Resource Manager snap-in doesn't display information about server (Displays the message "Unable to connect to File Server Resource Manager..."&lt;/li&gt;&lt;/ol&gt;All of this appears (just from what little information I was able to find on the web) to stem from the fact that a 64-bit R2 disc was used on a 32-bit installation of Windows Server 2003.  To correct the problems, I followed these steps:&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;ol&gt;&lt;li&gt;Compared the file %systemroot%\system32\dfsext.dll on this server with the one on another 32-bit install. The file size was 96KB on mine and 42 on the other server. I copied the file over to my server and magically, the service would start. There was no need to register the DLL with RegSrv32.exe.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Compared the file %systemroot%\system32\srmsvc.dll on my server with on on another 32-bit install. The file size was exactly the same, and even the dates were the same. Initially I didn't copy this file as it looked identical. After 2 hours of messing with this, I finally revisited this file and decided to copy it over anyway. I stopped the File Server Resource Manager service and copied the file. I did register this file using RegSrv32. The file registered and I restarted the File Server Resource Manager service, opened the snap-in and it worked perfectly.&lt;/li&gt;&lt;/ol&gt;Hopefully, I will never see this problem again, but if I do I now know how to fix it and it only took around 3 hours to get it fixed.&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-563379751299588314?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/563379751299588314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=563379751299588314' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/563379751299588314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/563379751299588314'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/08/file-server-resource-manager-not.html' title='File Server Resource Manager Not Working'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-2082807658507543918</id><published>2008-08-12T08:43:00.006-04:00</published><updated>2009-03-01T15:57:40.680-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='Backup'/><category scheme='http://www.blogger.com/atom/ns#' term='ActriveDirectory'/><title type='text'>Reset the Directory Services Restore Mode Password: Windows Server 2003</title><content type='html'>There are several different instances in which this password may need to be changed. These include:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;An administrator leaving the company&lt;/li&gt;&lt;li&gt;The server was not setup to standard&lt;/li&gt;&lt;li&gt;To ensure that you know what the password is&lt;/li&gt;&lt;/ol&gt;Additionally, a backup of AD is only as good as your ability to restore it. One of the very important items needed (in addition to a good backup) is the directory services restore mode password. Without this password, the directory will not be restored and more than likely, you won't be in a position at that time to change the password.&lt;br /&gt;&lt;br /&gt;To change the password use the ntdsutil utility at the command line (or from Start-&gt;Run):&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;ntdsutil: set dsrm password&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This will start the password reset utility. At this point, you can reset the password on a remote machine, or on the local machine. To reset the password on a remote machine, enter the command:&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;Reset DSRM Administrator Password: reset password on server &lt;span style="font-style: italic;"&gt;server name&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Use "null" to reset the local machine's password:&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;Reset DSRM Administrator Password: reset password on server &lt;span style="font-style: italic;"&gt;null&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;You will be prompted to enter the new password and to confirm it.&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;Please type password for DS Restore Mode Administrator Account:&lt;br /&gt;Please confirm new password:&lt;br /&gt;Password has been set successfully.&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;That's it.&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-2082807658507543918?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/2082807658507543918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=2082807658507543918' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/2082807658507543918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/2082807658507543918'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/08/reset-directory-services-restore-mode.html' title='Reset the Directory Services Restore Mode Password: Windows Server 2003'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-4846775630172867594</id><published>2008-08-06T16:09:00.007-04:00</published><updated>2009-03-01T10:54:36.429-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Backup'/><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>SQL 2005 Database Schema</title><content type='html'>I needed a way to view the schema of the database (all tables, columns, data types, etc.) and I found a blog (&lt;a href="http://www.digitalmediaminute.com/article/1278/printing-sql-server-database-schema"&gt;http://www.digitalmediaminute.com/article/1278/printing-sql-server-database-schema&lt;/a&gt;) that provided a quick way to get this.&lt;span class="fullpost"&gt;  It is an ASP (classic) page that you drop into IIS, change the server name, database name, user ID, and password and boom! You now have a web page that quickly displays the schema. This is great for printing, discussing, saving, or using as a comparison of another database.&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-4846775630172867594?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/4846775630172867594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=4846775630172867594' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/4846775630172867594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/4846775630172867594'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/08/sql-2005-database-schema.html' title='SQL 2005 Database Schema'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-7667091854458085967</id><published>2008-07-24T10:10:00.005-04:00</published><updated>2009-03-01T16:00:29.038-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Killing Processes Remotely</title><content type='html'>Often, people have things running on their computer that they don't even know about. In our infrastructure, we have implemented file screening on our file servers to help control storage use. We have one user that has &lt;a href="http://www.bittorrent.com/"&gt;BitTorrent&lt;/a&gt; running on his machine. He obviously isn't actively using it, because it just keeps trying to download and save the same file onto the server. Each time someone attempts to save one of these (unauthorized) files to the server we (the infrastructure team) receive an email notification. I am growing weary of this same notification from this user.&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;Using the awesome &lt;a href="http://technet.microsoft.com/en-us/sysinternals/default.aspx"&gt;Sysinternal tools&lt;/a&gt; (now part of &lt;a href="http://technet.microsoft.com/en-us/default.aspx"&gt;Microsoft's Technet&lt;/a&gt;), I was able to easily find the process (bittorrent) that was running and kill it remotely. These two commands (pslist and pskill) are command line tools.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Use pslist to find the name of the process that you want to kill.&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;pslist \\&lt;i&gt;machine&lt;/i&gt; -u &lt;i&gt;Domain&lt;/i&gt;\&lt;i&gt;username&lt;/i&gt;&lt;/code&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Use pskill to kill it.&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;pskill \\&lt;i&gt;machine&lt;/i&gt; -u &lt;i&gt;Domain&lt;/i&gt;\&lt;i&gt;username&lt;/i&gt; &lt;i&gt;Process Name&lt;/i&gt; or&lt;i&gt; PID&lt;/i&gt;&lt;/code&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-7667091854458085967?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/7667091854458085967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=7667091854458085967' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/7667091854458085967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/7667091854458085967'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/07/killing-processes-remotely.html' title='Killing Processes Remotely'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-1054758002960909248</id><published>2008-07-16T21:53:00.003-04:00</published><updated>2009-03-01T10:55:44.348-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='free'/><category scheme='http://www.blogger.com/atom/ns#' term='flock'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>Flock Toolbar</title><content type='html'>The media bar is one reason why the &lt;a href="http://flock.com/"&gt;Flock &lt;/a&gt;browser is so great (the other main reason is that it is built on &lt;a href="http://www.mozilla.com/en-US/firefox/"&gt;Firefox&lt;/a&gt;). The browser is built for &lt;a href="http://en.wikipedia.org/wiki/Social_network"&gt;social networks&lt;/a&gt;. These include &lt;a href="http://www.facebook.com/"&gt;Facebook&lt;/a&gt;, &lt;a href="http://digg.com/"&gt;Digg&lt;/a&gt;, and &lt;a href="http://www.flickr.com/"&gt;Flickr&lt;/a&gt;. The other features are the RSS reader, webmail, and blogging. &lt;span class="fullpost"&gt; The built in blog editor is pretty good (there are some limitations). &lt;a href="http://www.flock.com/"&gt;Flock &lt;/a&gt;runs all (that I have seen) &lt;a href="https://addons.mozilla.org/en-US/firefox/"&gt;Firefox add-ons&lt;/a&gt;. It has some great address bar features like, showing the feeds on the page, media streams, and a quick access to &lt;a href="http://digg.com/"&gt;Digg &lt;/a&gt;the story or email a link to the page. This has a lot of the improvements that &lt;a href="http://www.mozilla.com/en-US/firefox/"&gt;Firefox &lt;/a&gt;is lacking. Flock can be downloaded here: &lt;a href="http://www.flock.com/download/"&gt;http://www.flock.com/download/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/14402916@N03/2675480474/" title="Flockbar Legend (Windows)"&gt;&lt;br /&gt; &lt;img alt="Flockbar Legend (Windows)" src="http://static.flickr.com/3046/2675480474_1f2930e750_m.jpg" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;a href="http://www.flock.com/" title=""&gt;&lt;br /&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-1054758002960909248?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/1054758002960909248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=1054758002960909248' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/1054758002960909248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/1054758002960909248'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/07/flock-toolbar.html' title='Flock Toolbar'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-3392877191214269702</id><published>2008-07-16T00:49:00.006-04:00</published><updated>2009-03-01T10:56:30.428-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='free'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Mind Meister - Online Mind Maps</title><content type='html'>Mind Meister - &lt;a href="http://www.mindmeister.com/"&gt;http://www.mindmeister.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I am not a &lt;a href="http://en.wikipedia.org/wiki/Mind_map"&gt;mind map&lt;/a&gt; expert, but I have used them for several different brainstorming/project initiation sessions. I'm sure that there are various ways to use these ingenuous documents, I just haven't put enough effort into finding out how to do it. The main reason has been because &lt;a href="http://www.mindjet.com/"&gt;MindJet's Mind Manager&lt;/a&gt; software is $350.  My boss is a very generous guy, but I couldn't even justify that to myself for as little as I use it. Now that there is a free tool (actually two that I have found, including &lt;a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page"&gt;Freemind&lt;/a&gt;) I am going to try to get a better understanding of how to use this style of diagramming. &lt;span class="fullpost"&gt; There are a couple of things I can think of right off the bat, that I could use it for. There are some limitations to Mind Meister's free account and thus, they offer a premium account for $4/month - seriously? $48/year for a pretty cool &lt;a href="http://en.wikipedia.org/wiki/List_of_Mind_Mapping_software"&gt;mind mapping tool&lt;/a&gt;. I have used &lt;a href="http://www.mindjet.com/"&gt;Mind Manager&lt;/a&gt;, and although it does have some additional file types for exporting to and some other features, for as limited a user as I am, the free version works just fine.&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-3392877191214269702?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/3392877191214269702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=3392877191214269702' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/3392877191214269702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/3392877191214269702'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/07/mind-meister-online-mind-maps.html' title='Mind Meister - Online Mind Maps'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-7013073976791985088</id><published>2008-07-13T02:35:00.006-04:00</published><updated>2009-03-01T16:01:45.684-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Exchange'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Exchange 2007 Mailbox Journaling</title><content type='html'>For whatever reason, there may be a need to track messages coming in and out of a mailbox. These messages can be to internal recipients, external recipients, or both. Setting this up is easy, but if it isn't done often, it can be easy to forget the steps.&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;For any journaling, there needs to be a mailbox that receives the "journal reports". A journal report is basically a message with some additional detail and then a copy of the original message as an attachment. As can be expected, these mailboxes can grow quickly as there is no message management done on these mailboxes (unless needed, of course).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;After the journaling mailbox has been setup, it is now necessary to create the journal rule. This is done the Exchange console under Organization-&amp;gt;Hub Transport-&amp;gt;Journaling tab. Right-click, new rule, specify the mailbox to receive the reports, whether internal/external/global messages are journaled, then select the mailbox that is to be journaled (the source mailbox).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Grant appropriate permissions to the users that need access to the mailbox see: http://technet.microsoft.com/en-us/library/aa996343(EXCHG.80).aspx for instructions on how to do this.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;To ensure that no other messages (such as mass-mailings, everyone groups, etc) do not end up in the journaling mailboxes, run the following command to set the mailbox delivery restriction policy.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;Set-Mailbox &lt;i&gt;&amp;lt;Journaling mailbox to configure&amp;gt;&lt;/i&gt; -AcceptMessagesOnlyFrom "Microsoft Exchange" -RequireSenderAuthenticationEnabled $True&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Once all of these steps have been completed, some additional items might want to be setup, such as scripting a scheduled report of all of the messages and their subjects with recipients, etc.&lt;br /&gt;&lt;div style="margin-left: 40px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-7013073976791985088?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/7013073976791985088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=7013073976791985088' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/7013073976791985088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/7013073976791985088'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/07/exchange-2007-mailbox-journaling.html' title='Exchange 2007 Mailbox Journaling'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-382986826319053356</id><published>2008-07-12T11:26:00.009-04:00</published><updated>2009-03-01T16:02:32.956-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='PowerShell'/><category scheme='http://www.blogger.com/atom/ns#' term='Exchange'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>List Groups with Delivery Restrictions</title><content type='html'>With many distribution groups in our organization having delivery restrictions, ensuring that a user/group the ability to send to all of these groups (such as new management or a notification address) can be cumbersome. &lt;span class="fullpost"&gt; With this one command, all of the groups that have restrictions on them are immediately printed to the screen to make certain that each is addressed. Of course, this could also be written out to a text file, CSV, or whatever.&lt;br /&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;get-distributiongroup | foreach-object{if($_.AcceptMessagesOnlyFrom -ne  ""){write-host $_.Name}}&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-382986826319053356?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/382986826319053356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=382986826319053356' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/382986826319053356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/382986826319053356'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/07/list-groups-with-delivery-restrictions.html' title='List Groups with Delivery Restrictions'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-5613380897134843036</id><published>2008-07-09T15:33:00.003-04:00</published><updated>2009-03-01T10:57:52.991-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='flock'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='browser'/><title type='text'>Flock Browser - The Social Web Browser</title><content type='html'>&lt;a href="http://www.flock.com/"&gt;Flock Browser - The Social Web Browser&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Flock is my latest tool for enhancing my experience on the web. I spend hours and hours on the Internet everyday and this is a great way tool for managing the different social sites that I find myself using. &lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;The browser is based on the Mozilla Firefox code and is similar in the most important ways (e.g. installing extensions, keyboard shortcuts, general settings), but it is better. I find myself wanting to do more with &lt;a href="http://www.flickr.com"&gt;Flickr&lt;/a&gt;, &lt;a href="http://www.facebook.com"&gt;Facebook&lt;/a&gt;, and &lt;a href="http://www.twitter.com"&gt;Twitter&lt;/a&gt;. Of course, it doesn't integrate with LinkedIn, because from what I can tell, no one does. This may end up making &lt;a href="http://www.linkedin.com"&gt;LinkedIn &lt;/a&gt;irrelevant (not because of Flock, but because it doesn't integrate with other social sites - a post for another day).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flock.com"&gt;Flock &lt;/a&gt;has all of the tools needed for an Internet life today; there is a blogging interface, drag and drop image uploading of photos, and sharing of media by dragging to contacts in the sidebar. &lt;br /&gt;&lt;br /&gt;The below video is a test for uploading media from Flock to the blog post (all I did was drag the video into the window and it was automatically embedded).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object height="350" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/W8uyzUXxf90"&gt;&lt;embed src="http://www.youtube.com/v/W8uyzUXxf90" type="application/x-shockwave-flash" height="350" width="425"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;Finding and sharing media with Flock&lt;/object&gt;&lt;div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;"&gt;Blogged with the &lt;a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser"&gt;Flock Browser&lt;/a&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-5613380897134843036?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/5613380897134843036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=5613380897134843036' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/5613380897134843036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/5613380897134843036'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/07/flock-browser-social-web-browser.html' title='Flock Browser - The Social Web Browser'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-7583050240469610183</id><published>2008-07-08T13:57:00.006-04:00</published><updated>2009-03-01T21:09:26.757-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='VBScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='ActriveDirectory'/><title type='text'>VBScript to Copy One Attribute to Another in Active Directory</title><content type='html'>This script was requested by one of our help desk staff. The script gets the value of a specific property in an Active Directory user object and copies it over to the other property. In this instance, the script is using the value it finds in the "physicalDeliveryOfficeName" (Office field in ADUC) and puts that value into the "department" (Department field in ADUC). The script creates a log with all of the user names, date, and properties, before and after the change just in case something goes wrong.&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;/code&gt;&lt;br /&gt;Option Explicit &lt;br /&gt;&lt;br /&gt;On Error Resume Next &lt;br /&gt;Dim objUser, objChild, objConnection, objRootDSE, objItem&lt;br /&gt;Dim WshShell, objFSO strRoot, strDNSDomain, strContainer&lt;br /&gt;Dim strphysicalDeliveryOfficeName, strsAMAccountName &lt;br /&gt;Dim strdepartmentAfter, strDirectory, strdepartmentBefore&lt;br /&gt;Dim i, intLogFlag 'no log exists&lt;br /&gt;&lt;br /&gt;i=1 intLogFlag = 0&lt;br /&gt;&lt;br /&gt;Set WshShell = CreateObject("WScript.Shell") &lt;br /&gt;&lt;br /&gt;'Set current directory to Desktop &amp; display on page &lt;br /&gt;strDirectory = WshShell.SpecialFolders("Desktop") &amp; "\" &lt;br /&gt;Set objRootDSE = GetObject("LDAP://RootDSE") &lt;br /&gt;strDNSDomain = objRootDSE.Get("DefaultNamingContext") &lt;br /&gt;strContainer = strContainer &amp; strDNSDomain &lt;br /&gt;'To do a subcontainer, add it after//ou=OUName, - include comma &lt;br /&gt;Set strRoot =GetObject("LDAP://" &amp; strDNSDomain ) &lt;br /&gt;'Start Logging &lt;br /&gt;CreateLog() &lt;br /&gt;'**************************************************************** &lt;br /&gt;For each objChild in strRoot &lt;br /&gt;Select Case objChild.class &lt;br /&gt;Case "organizationalUnit","container" &lt;br /&gt;Call DATree &lt;br /&gt;End Select &lt;br /&gt;Next &lt;br /&gt;&lt;br /&gt;Sub DATree() &lt;br /&gt;For each objUser in objChild &lt;br /&gt;If objUser.class="user" Then &lt;br /&gt;strphysicalDeliveryOfficeName = objUser.physicalDeliveryOfficeName &lt;br /&gt;strsAMAccountName = objUser.sAMAccountName &lt;br /&gt;strdepartmentBefore = objUser.department &lt;br /&gt;If strphysicalDeliveryOfficeName &lt;&gt; "" Then &lt;br /&gt;objUser.Put "department", strphysicalDeliveryOfficeName &lt;br /&gt;objUser.SetInfo&lt;br /&gt;&lt;br /&gt;strdepartmentAfter = objUser.department &lt;br /&gt;WriteLog(strphysicalDeliveryOfficeName), (strsAMAccountName), (strdepartmentBefore), (strdepartmentAfter) &lt;br /&gt;i=i+1 &lt;br /&gt;End If &lt;br /&gt;End if &lt;br /&gt;next &lt;br /&gt;End Sub &lt;br /&gt;&lt;br /&gt;i = i -1 &lt;br /&gt;Wscript.Echo "Accounts = " &amp; i &lt;br /&gt;Wscript.Quit &lt;br /&gt;&lt;br /&gt;'**************************************************************** &lt;br /&gt;&lt;br /&gt;Sub CreateLog() &lt;br /&gt;On Error Resume &lt;br /&gt;Next Dim objFile &lt;br /&gt;Dim strFile, strText &lt;br /&gt;&lt;br /&gt;'Create log file &lt;br /&gt;strFile = "UserDepartmentLog_" &amp; Month(Date()) &amp; "_" &amp; Day(Date()) &amp; ".txt" &lt;br /&gt;Set objFSO = CreateObject("Scripting.FileSystemObject") &lt;br /&gt;Set objFile = objFSO.CreateTextFile(strDirectory &amp; strFile) &lt;br /&gt;Set objFile = Nothing &lt;br /&gt;'Write headers to the log file &lt;br /&gt;strText = "User Name,Date,Office,Department Before, Department After" &lt;br /&gt;Set objFile = objFSO.OpenTextFile(strDirectory &amp; strFile, 8, True) &lt;br /&gt;objFile.WriteLine(strText) &lt;br /&gt;intLogFlag = 1 &lt;br /&gt;Set objFSO = Nothing &lt;br /&gt;Set objFile = Nothing &lt;br /&gt;End Sub &lt;br /&gt;&lt;br /&gt;'**************************************************************** &lt;br /&gt;&lt;br /&gt;'Used to append the log for each computer the script is run against &lt;br /&gt;&lt;br /&gt;Sub WriteLog(strOfficeName, strAccountName, strDeptBefore, strDeptAfter) &lt;br /&gt;On Error Resume Next &lt;br /&gt;Dim objFile, objTextFile &lt;br /&gt;Dim strFile, strText &lt;br /&gt;&lt;br /&gt;strFile = "UserDepartmentLog_" &amp; Month(Date()) &amp; "_" &amp; Day(Date()) &amp; ".txt" &lt;br /&gt;Set objFSO = CreateObject("Scripting.FileSystemObject") &lt;br /&gt;'Check to see if the log exists &lt;br /&gt;If intLogFlag = 1 Then &lt;br /&gt;'Write to the log &lt;br /&gt;strText = strAccountName &amp; "," &amp; Date() &amp; "," &amp; strOfficeName &amp; "," &amp; strDeptBefore &amp; "," &amp; strDeptAfter &lt;br /&gt;&lt;br /&gt;Set objFile = objFSO.OpenTextFile(strDirectory &amp; strFile, 8, True) &lt;br /&gt;objFile.WriteLine(strText) &lt;br /&gt;objFile.Close &lt;br /&gt;'Reset strText for later use &lt;br /&gt;strText = "" &lt;br /&gt;Else 'If the log doesn't exist, create it &lt;br /&gt;CreateLog() &lt;br /&gt;'Reset strText for later use &lt;br /&gt;strText = "" &lt;br /&gt;End If &lt;br /&gt;Set objTextFile = Nothing &lt;br /&gt;Set objFile = Nothing &lt;br /&gt;Set objFSO = Nothing &lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-7583050240469610183?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/7583050240469610183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=7583050240469610183' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/7583050240469610183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/7583050240469610183'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/07/copy-office-to-department-script.html' title='VBScript to Copy One Attribute to Another in Active Directory'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-6574304501271923265</id><published>2008-07-02T10:07:00.004-04:00</published><updated>2009-03-01T10:58:35.029-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Telephones'/><category scheme='http://www.blogger.com/atom/ns#' term='Outlook'/><category scheme='http://www.blogger.com/atom/ns#' term='Cisco'/><title type='text'>Cisco TAPI Integration</title><content type='html'>One advantage my Blackberry has over anything else is that I can dial numbers for my contacts that are stored in Exchange. Now that I have been using my Cisco IP Communicator regularly, this has been a problem - having to look up numbers, copy them, paste them into the communicator and then dialing. I knew that Outlook offered TAPI integration, so there had to be some way to dial out on my IP Communicator using Outlook. After digging around in the Call Manager plugin section I found that Cisco offers a plugin named "Cisco Telephony Service Provider".&lt;span class="fullpost"&gt;  Although the name isn't super-intuitive to TAPI, the description did explain that this was the purpose. Downloading the plugin and installing it is relatively simple. The installation has great directions. The directions also include how to configure the CTI ports and extensions - a little more than the average user will be able to handle. Simply stated, the following things need to happen to make this work:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Call Manager user profile must have "Enable CTI Application Use" checked&lt;/li&gt;&lt;li&gt;Call Manager CTI Port make the device pool the same as the IP Communicator, give the Port a line that is the same extension number (DN) as IP Communicator&lt;/li&gt;&lt;li&gt;Follow the directions for installing the wave drivers in the CiscoTSP readme file&lt;/li&gt;&lt;li&gt;Once the computer reboots, test the connection with the dialer.exe program. Go to Edit-&gt;Options-&gt;Line tab and select the Phone radio button. Under Line used for Phone Calls drop down, select the "Cisco Line: [device name](extension number), hit OK. Click the Dial button and enter a number to test. If this works, the device is setup properly.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In Outlook, go to contacts, click on "Call Contact". When the box opens, click on dialing properties, on my location click edit, General tab, "To access an outside line...", enter 9. Enter the carrier code for long distance if desired. Add the appropriate area code rules. Click OK, Ok, then click Dialing Options, click the connect using line and select the "Cisco Line: [device name](extension number), click ok, then close.&lt;/li&gt;&lt;/ol&gt;Outlook should now be setup to dial through the IP Communicator.&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-6574304501271923265?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/6574304501271923265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=6574304501271923265' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/6574304501271923265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/6574304501271923265'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/07/cisco-tapi-integration.html' title='Cisco TAPI Integration'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-8397336599835296651</id><published>2008-06-25T09:00:00.008-04:00</published><updated>2010-10-22T13:53:11.536-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Batch'/><category scheme='http://www.blogger.com/atom/ns#' term='Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Backup'/><title type='text'>Batch File to Backup SQL Server</title><content type='html'>&lt;i&gt;Update 10/22/2010: &lt;/i&gt;Updated to rename the backup file to include the current date before copying&lt;br /&gt;&lt;br /&gt;No budget for a Backup Exec SQL agent license? Save the following as a batch file and run it as a scheduled task to back up a database. The following items must be changed in this script to appropriate values:&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;ol&gt;&lt;li&gt;-SMYSERVERNAME - MYSEVERNAME needs to be the SQL server name (note there is no space between -S and MYSERVERNAME)&lt;/li&gt;&lt;li&gt;MYSQLINSTANCE - this is the SQL instance name &lt;/li&gt;&lt;li&gt;MYDATABASENAME - the name of the database to be backed up&lt;/li&gt;&lt;li&gt;BACKUPDIRECTORY - the directory name on the SQL server to put the backup file in&lt;/li&gt;&lt;li&gt;FILENAME.bak - this is the name of the backup file&lt;/li&gt;&lt;li&gt;MyBackupServer - name of the remote server to map a drive&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;div id="divCode"&gt;&lt;br /&gt;@ECHO OFF &lt;br /&gt;&lt;br /&gt;SET CMD_PATH=%SYSTEMROOT%\system32\cmd.exe &lt;br /&gt;&lt;br /&gt;%CMD_Path% /c ""C:\Program Files\Microsoft SQL Server\90\Tools\Binn\osql" ^ -E ^ -SMYSERVERNAME\MYSQLINSTANCE ^ -Q"BACKUP DATABASE MYDATABASENAME TO DISK = ^ 'C:\BACKUPDIRECTORY\FILENAME.bak' WITH INIT" &lt;br /&gt;&lt;br /&gt;REM Rename the file to today's date&lt;br /&gt;&lt;br /&gt;for /f "tokens=1-5 delims=/ " %%d in ("%date%") do rename D:\Backups\vCenter-backup.bak vCenter-backup%%e-%%f-%%g.bak&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;REM Map a drive to a remote computer to copy it off host &lt;br /&gt;&lt;br /&gt;%CMD_PATH% /c "net use t: "\\MyBackupServer\d$\Services Backups\Backup"" &lt;br /&gt;&lt;br /&gt;REM Robocopy is a free tool from Microsoft to copy and replace the file &lt;br /&gt;&lt;br /&gt;%CMD_Path% /c "robocopy.exe "C:\BACKUPDIRECTORY" "T:" /E /ZB /COPYALL ^ /LOG:"c:\BACKUPDIRECTORY\Backup.log" &lt;br /&gt;&lt;br /&gt;REM remove the drive mapping &lt;br /&gt;&lt;br /&gt;%CMD_PATH% /c "net use t: /delete"&lt;/div&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-8397336599835296651?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/8397336599835296651/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=8397336599835296651' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/8397336599835296651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/8397336599835296651'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/06/sql-backup-script.html' title='Batch File to Backup SQL Server'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-3569886729849818613</id><published>2008-06-23T17:18:00.004-04:00</published><updated>2009-03-01T10:59:32.906-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Yugma - Free Web Conferencing</title><content type='html'>&lt;a href="http://www.yugma.com/"&gt;Yugma&lt;/a&gt; is the newest, in a long line of web conferencing services. Yugma is free, offering the availability to upgrade from a personal (free) to a premium account with all of the bells and whistles. The differences in the two levels of accounts include:&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Free is limited to 10 attendees&lt;/li&gt;&lt;li&gt;Personal doesn't allow for passing mouse/keyboard controls&lt;/li&gt;&lt;li&gt;Can't change presenter&lt;/li&gt;&lt;li&gt;Can't use annotation tools (whiteboard, screen marking, etc.)&lt;/li&gt;&lt;li&gt;No online storage&lt;/li&gt;&lt;li&gt;No tech support (online help only)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;With all of that, the free version is still very cool because you get the desktop sharing, chat, and file sharing. These are good options for free and are very useful for those of us that just need somewhere to point people for quick, free desktop sharing. &lt;/p&gt;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-3569886729849818613?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/3569886729849818613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=3569886729849818613' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/3569886729849818613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/3569886729849818613'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/06/yugma-free-web-conferencing.html' title='Yugma - Free Web Conferencing'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-6110839797090850731</id><published>2008-06-23T15:50:00.001-04:00</published><updated>2009-03-01T10:59:53.437-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>Test for Drop.io</title><content type='html'>http://drop.io is a website that allows for ad-hoc or planned social workspaces. This site will store several types of media. This is a test for embedding that information. A new post will be added after I have figured out how to fully utilize it.&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;&lt;div style="WIDTH: 230px"&gt;&lt;div&gt;&lt;object height="125" width="230"&gt;&lt;param name="movie" value="http://drop.io/40afdbfba624ad854add128e651db34f7ce114cb/2ba09f50-238a-012b-2855-0012799407ec/uploader.swf"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;br /&gt;   &lt;embed src="http://drop.io/40afdbfba624ad854add128e651db34f7ce114cb/2ba09f50-238a-012b-2855-0012799407ec/uploader.swf" type="application/x-shockwave-flash" wmode="transparent" width="230" height="125"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div style="PADDING-RIGHT: 5px; FONT-SIZE: 11px; COLOR: #595653; PADDING-TOP: 10px; FONT-FAMILY: Verdana, sans-serif; TEXT-ALIGN: center"&gt;&lt;a href="http://drop.io/"&gt;drop.io&lt;/a&gt;: simple private sharing&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-6110839797090850731?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/6110839797090850731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=6110839797090850731' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/6110839797090850731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/6110839797090850731'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/06/test-for-dropio.html' title='Test for Drop.io'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-9070924483905858380</id><published>2008-06-18T20:22:00.005-04:00</published><updated>2009-03-01T21:29:56.396-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='VBScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>VBScript to get Services from Servers</title><content type='html'>The script below was written to parse a selected text file containing server names, loop through the list, create a new worksheet for each server and put the services into that worksheet. This can be done for as many servers as needed. At the end of the routine, the script saves the Excel file to the user's desktop and closes the application.&lt;span class="fullpost"&gt;  I have run it several times and it has worked without fail so far. This is a nice script to gather all of the relevant service information for all of the computers in an environment. This information can be invaluable during recovery of a system.&lt;br /&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;&lt;br /&gt;'*********************************************************************************&lt;br /&gt;'Script to remotely inventory installed services from a list of machines from a &lt;br /&gt;'     text file, put the services into an Excel workbook, and then save the &lt;br /&gt;'     workbook to the desktop.&lt;br /&gt;' Created by: Brian Bohanon&lt;br /&gt;' Created: 6/17/2008&lt;br /&gt;'*********************************************************************************&lt;br /&gt;&lt;br /&gt;Option Explicit&lt;br /&gt;&lt;br /&gt;Dim arrFileLines() &lt;br /&gt;Dim tst&lt;br /&gt;Dim i, j, k, l&lt;br /&gt;Dim objFSO, objFile, objDialog, objExcel, objWMIService, objService, objWorkbook&lt;br /&gt;Dim WshShell&lt;br /&gt;Dim colServices&lt;br /&gt;Dim srcFileName  'source file&lt;br /&gt;Dim intResult&lt;br /&gt;Dim strComputer  'computer to inventory&lt;br /&gt;&lt;br /&gt;'Constants&lt;br /&gt;Const xlLeft = -4131&lt;br /&gt;Const xlHorizontal = -4128&lt;br /&gt;&lt;br /&gt;'Set Objects&lt;br /&gt;Set objExcel = CreateObject("Excel.Application")&lt;br /&gt;Set objDialog = CreateObject("UserAccounts.CommonDialog")&lt;br /&gt;Set WshShell = WScript.CreateObject("WScript.Shell")&lt;br /&gt;&lt;br /&gt;'Open the source file that contains the list of computers&lt;br /&gt;objDialog.Filter = "Text Files|*.txt"&lt;br /&gt;objDialog.InitialDir = WshShell.SpecialFolders("Desktop")&lt;br /&gt;intResult = objDialog.ShowOpen&lt;br /&gt; &lt;br /&gt;If intResult = 0 Then&lt;br /&gt;    Wscript.Quit&lt;br /&gt;Else&lt;br /&gt; 'Set selected file to srcFileName&lt;br /&gt; srcFileName = objDialog.FileName&lt;br /&gt;&lt;br /&gt; i = 0&lt;br /&gt; Set objFSO = CreateObject("Scripting.FileSystemObject") &lt;br /&gt; Set objFile = objFSO.OpenTextFile(srcFileName, 1) &lt;br /&gt; Do Until objFile.AtEndOfStream &lt;br /&gt; Redim Preserve arrFileLines(i) &lt;br /&gt; arrFileLines(i) = objFile.ReadLine &lt;br /&gt; i = i + 1 &lt;br /&gt; Loop &lt;br /&gt; objFile.Close &lt;br /&gt;&lt;br /&gt;'*********************************************************************************&lt;br /&gt;' Create a new Excel Workboot&lt;br /&gt;'*********************************************************************************&lt;br /&gt; objExcel.Visible = True&lt;br /&gt; Set objWorkbook = objExcel.Workbooks.Add()&lt;br /&gt;&lt;br /&gt;'*********************************************************************************&lt;br /&gt;'Loop through the array of computers, create a worksheet with the computer name, &lt;br /&gt;'     get the list of services, &lt;br /&gt;'     and write out the services to the excel sheet&lt;br /&gt;'*********************************************************************************&lt;br /&gt;&lt;br /&gt; k = 3&lt;br /&gt; objExcel.Worksheets("Sheet1").Delete&lt;br /&gt; objExcel.Worksheets("Sheet2").Delete&lt;br /&gt;&lt;br /&gt; For l = Ubound(arrFileLines) to LBound(arrFileLines) Step -1 &lt;br /&gt;  On Error Resume Next&lt;br /&gt;  if k = 3 then&lt;br /&gt;   objExcel.Worksheets("Sheet" &amp; k).Activate&lt;br /&gt;   objExcel.Worksheets("Sheet" &amp; k).Name = arrFileLines(l)&lt;br /&gt;  else&lt;br /&gt;   objExcel.Worksheets.Add&lt;br /&gt;   objExcel.Worksheets("Sheet" &amp; k).Activate&lt;br /&gt;   objExcel.Worksheets("Sheet" &amp; k).Name = arrFileLines(l)&lt;br /&gt;  end if&lt;br /&gt;&lt;br /&gt;'*********************************************************************************&lt;br /&gt;'Services Information&lt;br /&gt;'*********************************************************************************&lt;br /&gt;&lt;br /&gt;  'Select server to inventory&lt;br /&gt;  Set objWMIService = GetObject("winmgmts:\\" &amp; arrFileLines(l) &amp; "\root\cimv2")&lt;br /&gt;  Set colServices = objWMIService.ExecQuery("Select * From Win32_Service")&lt;br /&gt;&lt;br /&gt;  i = 1&lt;br /&gt;  j = 1&lt;br /&gt;&lt;br /&gt;  'Column headers&lt;br /&gt;  objExcel.Cells(i, j).Value = "Service"&lt;br /&gt;  objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;  j = j + 1&lt;br /&gt;  objExcel.Cells(i, j).Value = "Status"&lt;br /&gt;  objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;  j = j + 1&lt;br /&gt;  objExcel.Cells(i, j).Value = "Start Mode"&lt;br /&gt;  objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;  j = j + 1&lt;br /&gt;  objExcel.Cells(i, j).Value = "Start Name"&lt;br /&gt;  objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;  j = j + 1&lt;br /&gt;  objExcel.Cells(i, j).Value = "Path Name"&lt;br /&gt;  objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt;  'Services data&lt;br /&gt;  For Each objService in colServices&lt;br /&gt;   i = i + 1&lt;br /&gt;   j = 1&lt;br /&gt;   objExcel.Cells(i, j) = objService.Name&lt;br /&gt;   j = j + 1&lt;br /&gt;   objExcel.Cells(i, j) = objService.State&lt;br /&gt;   'Show stopped services in Red&lt;br /&gt;   If objService.State = "Stopped" Then&lt;br /&gt;    objExcel.Cells(i, j).Font.ColorIndex = 3&lt;br /&gt;   End If&lt;br /&gt;   j = j + 1&lt;br /&gt;   objExcel.Cells(i, j) = objService.StartMode&lt;br /&gt;   j = j + 1 &lt;br /&gt;   objExcel.Cells(i, j) = objService.StartName&lt;br /&gt;   j = j + 1 &lt;br /&gt;   objExcel.Cells(i, j) = objService.PathName&lt;br /&gt;  Next&lt;br /&gt;&lt;br /&gt;  ' Autofit the first column to fit the longest service name&lt;br /&gt;  objExcel.Columns("A:Z").EntireColumn.AutoFit&lt;br /&gt;  objExcel.Columns("A:Z").HorizontalAlignment = xlLeft&lt;br /&gt;&lt;br /&gt;  k = k + 1&lt;br /&gt; Next&lt;br /&gt;&lt;br /&gt;'Save the workbook to the desktop&lt;br /&gt;objWorkbook.SaveAs(WshShell.SpecialFolders("Desktop") &amp; "\ServerServices_" &amp; Month(Date()) &amp; "_" &amp; Day(Date()) &amp; "_" &amp; Year(Date()) &amp; ".xls")&lt;br /&gt;&lt;br /&gt;'Close Excel&lt;br /&gt;objExcel.Quit&lt;br /&gt;&lt;br /&gt;End If&lt;br /&gt;&lt;br /&gt;'*********************************************************************************&lt;br /&gt;'Cleanup &lt;br /&gt;'*********************************************************************************&lt;br /&gt;&lt;br /&gt;'Cleanup objects&lt;br /&gt;&lt;br /&gt;Set objExcel = nothing&lt;br /&gt;Set objFSO = nothing&lt;br /&gt;Set objWMIService = nothing&lt;br /&gt;Set objService = nothing&lt;br /&gt;Set objFile = nothing&lt;br /&gt;Set objDialog = nothing&lt;br /&gt;Set WshShell = nothing&lt;br /&gt;&lt;br /&gt;'Inform the user that the process is complete&lt;br /&gt;Wscript.Echo("Finished")&lt;br /&gt;&lt;br /&gt;Wscript.Quit 0&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-9070924483905858380?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/9070924483905858380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=9070924483905858380' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/9070924483905858380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/9070924483905858380'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/06/vbscript-to-get-services-from-servers.html' title='VBScript to get Services from Servers'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-1284020288206193727</id><published>2008-06-17T09:02:00.004-04:00</published><updated>2009-03-01T11:00:38.848-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>Scribd - Online Document Storage</title><content type='html'>This is a really neat tool that I stubmled on while trying to figure out how to display code in an iFrame for my blog. In my previous post (&lt;a href="http://bohanonb.blogspot.com/2008/06/vbsscript-to-inventory-windows-computer.html"&gt;VBSScript to Inventory Windows Computer&lt;/a&gt;) I used this very tool to display the code from a very long script.&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;This is a very useful tool that addresses a specific need for me. This allows me to post documents for free and embed them into my blog.&lt;br /&gt;&lt;br /&gt;Scribd - &lt;a href="http://www.scribd.com/"&gt;http://www.scribd.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Below is a sample document that I uploaded and embeded into my blog.&lt;br /&gt;&lt;br /&gt;&lt;object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" id="doc_713053220389354" name="doc_713053220389354" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" align="middle" height="500" width="100%"&gt;  &lt;param name="movie" value="http://documents.scribd.com/ScribdViewer.swf?document_id=3450382&amp;access_key=key-1w4bkgpstsrk303b4t9h&amp;page=&amp;version=1&amp;auto_size=true"&gt;   &lt;param name="quality" value="high"&gt;   &lt;param name="play" value="true"&gt;  &lt;param name="loop" value="true"&gt;   &lt;param name="scale" value="showall"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="devicefont" value="false"&gt;  &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="menu" value="true"&gt;  &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="salign" value=""&gt;  &lt;embed src="http://documents.scribd.com/ScribdViewer.swf?document_id=3450382&amp;access_key=key-1w4bkgpstsrk303b4t9h&amp;page=&amp;version=1&amp;auto_size=true" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" scale="showall" wmode="opaque" devicefont="false" bgcolor="#ffffff" name="doc_713053220389354_object" menu="true" allowfullscreen="true" allowscriptaccess="always" salign="" type="application/x-shockwave-flash" align="middle" height="500" width="100%"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;div style="font-size:10px;text-align:center;width:100%"&gt;&lt;a href="http://www.scribd.com/doc/3450382/Installing-the-Cisco-Attendant-Console"&gt;Installing the Cisco Attendant Console&lt;/a&gt; - &lt;a href="http://www.scribd.com/upload"&gt;Upload a Document to Scribd&lt;/a&gt;&lt;/div&gt;&lt;div style="display:none"&gt; Read this document on Scribd: &lt;a href="http://www.scribd.com/doc/3450382/Installing-the-Cisco-Attendant-Console"&gt;Installing the Cisco Attendant Console&lt;/a&gt; &lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-1284020288206193727?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/1284020288206193727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=1284020288206193727' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/1284020288206193727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/1284020288206193727'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/06/scribd-online-document-storage.html' title='Scribd - Online Document Storage'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-2423575906646501755</id><published>2008-06-17T07:29:00.005-04:00</published><updated>2009-03-01T21:31:44.940-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='VBScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>VBSScript to Inventory Windows Computer</title><content type='html'>As part of a goal for 2008, I wanted to get a list of services running on a given Windows computer, including the accounts used and the startup mode. Once that script was written, it was much too easy to continue gathering relevant information for a system. The script below is the result.&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;&lt;br /&gt;'******************************************************************************************&lt;br /&gt;'Script to remotely inventory a machine&lt;br /&gt;' Created by: Brian Bohanon&lt;br /&gt;' Created: 6/11/2008&lt;br /&gt;'******************************************************************************************&lt;br /&gt;&lt;br /&gt;'Get the computer name from user to begin processing&lt;br /&gt;strComputer = InputBox("Computer to Inventory", "Computer Name")&lt;br /&gt;&lt;br /&gt;'Initialize counter&lt;br /&gt;i = 0&lt;br /&gt;&lt;br /&gt;'Declare Constants&lt;br /&gt;Const xlLeft = -4131&lt;br /&gt;Const xlHorizontal = -4128&lt;br /&gt;&lt;br /&gt;'Declare Objects&lt;br /&gt;Set objExcel = CreateObject("Excel.Application")&lt;br /&gt;Set objFSO = CreateObject("Scripting.FileSystemObject")&lt;br /&gt;Set objWMIService = GetObject("winmgmts:\\" &amp; strComputer &amp; "\root\cimv2")&lt;br /&gt;&lt;br /&gt;'Initialize collections&lt;br /&gt;Set colBIOS = objWMIService.ExecQuery("Select * from Win32_BIOS")&lt;br /&gt;Set colDisks = objWMIService.ExecQuery("Select * from Win32_LogicalDisk")&lt;br /&gt;Set colDiskDrives = objWMIService.ExecQuery("Select * from Win32_DiskDrive")&lt;br /&gt;Set colDrives = objFSO.Drives&lt;br /&gt;Set colNet = objWMIService.ExecQuery("Select * from Win32_NetworkAdapter")&lt;br /&gt;Set colOSItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")&lt;br /&gt;Set colPrintItems = objWMIService.ExecQuery("Select * from Win32_Printer")&lt;br /&gt;Set colProcItems = objWMIService.ExecQuery("Select * from Win32_Processor")&lt;br /&gt;Set colQuickFixes = objWMIService.ExecQuery("Select * from Win32_QuickFixEngineering")&lt;br /&gt;Set colSCSIItems = objWMIService.ExecQuery("Select * from Win32_SCSIController")&lt;br /&gt;Set colServices = objWMIService.ExecQuery("Select * From Win32_Service")&lt;br /&gt;Set colSettings = objWMIService.ExecQuery("Select * from Win32_ComputerSystem")&lt;br /&gt;Set colSoftware = objWMIService.ExecQuery("Select * from Win32_Product")&lt;br /&gt;Set colVideo = objWMIService.ExecQuery("Select * from Win32_VideoController")&lt;br /&gt;&lt;br /&gt;'*******************************************************************************************&lt;br /&gt;' Create a new and blank spreadsheet&lt;br /&gt;'*******************************************************************************************&lt;br /&gt;objExcel.Visible = True&lt;br /&gt;objExcel.Workbooks.Add&lt;br /&gt;&lt;br /&gt;'Setup the workbook&lt;br /&gt;do while i &lt;&gt; 2&lt;br /&gt;  objExcel.Worksheets.Add&lt;br /&gt; i = i + 1&lt;br /&gt;loop&lt;br /&gt;&lt;br /&gt;'Create Sheet named %computername% for computer name, os, install date, general information&lt;br /&gt;objExcel.Worksheets("Sheet5").Name = strComputer&lt;br /&gt;'Create Sheet named software&lt;br /&gt;objExcel.Worksheets("Sheet4").Name = "Software"&lt;br /&gt;'Create Sheet named services&lt;br /&gt;objExcel.Worksheets("Sheet1").Name = "Services"&lt;br /&gt;'Create Sheet named hardware - e.g. disk drives, memory, processor&lt;br /&gt;objExcel.Worksheets("Sheet2").Name = "Hardware"&lt;br /&gt;'Create Sheet named printers&lt;br /&gt;objExcel.Worksheets("Sheet3").Name = "Printers"&lt;br /&gt;&lt;br /&gt;'*****************************************************************************************&lt;br /&gt;'Computer information&lt;br /&gt;'*****************************************************************************************&lt;br /&gt;&lt;br /&gt;'start the counter for all of the loops&lt;br /&gt;i = 1 'row counter&lt;br /&gt;j = 1   'column counter&lt;br /&gt;&lt;br /&gt;' Section header&lt;br /&gt;objExcel.Cells(i, j).Value = "Computer Information"&lt;br /&gt;objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt;i = i + 1&lt;br /&gt;&lt;br /&gt;objExcel.Cells(i, j).Value = "Computer Name: "&lt;br /&gt;objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt;j = j + i&lt;br /&gt;&lt;br /&gt;objExcel.Cells(2, 2).Value = strComputer&lt;br /&gt;&lt;br /&gt;'Get OS information&lt;br /&gt;&lt;br /&gt;i = i + 2&lt;br /&gt;j = 1&lt;br /&gt;&lt;br /&gt;For Each objOSItem in colOSItems&lt;br /&gt; objExcel.Cells(i, j).Value = "Operating System:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = objOSItem.Caption&lt;br /&gt;&lt;br /&gt; i = i + 1&lt;br /&gt; j = j - 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = "Description:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = objOSItem.Description&lt;br /&gt;&lt;br /&gt; i = i + 1&lt;br /&gt; j = j - 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = "InstallDate:" &lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = objOSItem.InstallDate&lt;br /&gt;&lt;br /&gt; i = i + 1&lt;br /&gt; j = j - 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = "Organization:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = objOSItem.Organization&lt;br /&gt;&lt;br /&gt; i = i + 1&lt;br /&gt; j = j - 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = "RegisteredUser:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = objOSItem.RegisteredUser&lt;br /&gt;&lt;br /&gt; i = i + 1&lt;br /&gt; j = j - 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = "SerialNumber:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = objOSItem.SerialNumber&lt;br /&gt;&lt;br /&gt; i = i + 1&lt;br /&gt; j = j - 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = "ServicePackMajorVersion:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = "SP " &amp; objOSItem.ServicePackMajorVersion&lt;br /&gt;&lt;br /&gt; i = i + 1&lt;br /&gt; j = j - 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = "ServicePackMinorVersion:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = objOSItem.ServicePackMinorVersion&lt;br /&gt;&lt;br /&gt; i = i + 1&lt;br /&gt; j = j - 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = "Version:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = objOSItem.Version&lt;br /&gt;&lt;br /&gt; i = i + 1&lt;br /&gt; j = j - 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = "WindowsDirectory:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = objOSItem.WindowsDirectory&lt;br /&gt;&lt;br /&gt; i = i + 1&lt;br /&gt; j = j - 1&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;Set objOSItem = nothing&lt;br /&gt;&lt;br /&gt;i = i + 1&lt;br /&gt;&lt;br /&gt;'Section header&lt;br /&gt;objExcel.Cells(i, j).Value = "Physical Machine Information"&lt;br /&gt;objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt;i = i + 1&lt;br /&gt;&lt;br /&gt;'Insert hardware serial number&lt;br /&gt;For each objBIOS in colBIOS&lt;br /&gt; objExcel.Cells(i, j).Value = "Serial Number"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = objBIOS.SerialNumber&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;Set objBIOS = nothing&lt;br /&gt;&lt;br /&gt;i = i + 1&lt;br /&gt;j = 1&lt;br /&gt;&lt;br /&gt;'Physical Machine information&lt;br /&gt;For Each objSetting in colSettings&lt;br /&gt; objExcel.Cells(i, j).Value = "Manufacturer:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = objSetting.Manufacturer&lt;br /&gt;&lt;br /&gt; i = i + 1&lt;br /&gt; j = j - 1&lt;br /&gt; &lt;br /&gt; i = i + 1&lt;br /&gt; j = 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j).Value = "Model:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = objSetting.Model&lt;br /&gt;&lt;br /&gt; i = i + 1&lt;br /&gt; j = j - 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = "System Type:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = objSetting.SystemType&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;Set objSetting = nothing&lt;br /&gt;&lt;br /&gt;' Autofit the columns &lt;br /&gt;objExcel.Columns("A:Z").EntireColumn.AutoFit&lt;br /&gt;objExcel.Columns("A:Z").HorizontalAlignment = xlLeft&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'*************************************************************************************&lt;br /&gt;'Software Information&lt;br /&gt;'*************************************************************************************&lt;br /&gt;&lt;br /&gt;'Activate the Software worksheet&lt;br /&gt;objExcel.Worksheets("Software").Activate&lt;br /&gt;&lt;br /&gt;i = 1&lt;br /&gt;j = 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Software"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; i = i + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Caption:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Name:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Version:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Description:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Vendor:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Identiying Number:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Install Date:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Install Location:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Package Cache:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; i = i + 1&lt;br /&gt; j = 1&lt;br /&gt;&lt;br /&gt;For Each objSoftware in colSoftware&lt;br /&gt; objExcel.Cells(i, j) = objSoftware.Caption&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = objSoftware.Name&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = objSoftware.Version&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = objSoftware.Description &lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = objSoftware.Vendor&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = objSoftware.IdentifyingNumber          &lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = objSoftware.InstallDate2 &lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = objSoftware.InstallLocation   &lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = objSoftware.PackageCache&lt;br /&gt;&lt;br /&gt; j = 1&lt;br /&gt; i = i + 1&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;Set objSoftware = nothing&lt;br /&gt;&lt;br /&gt;i = i + 1&lt;br /&gt;j = 1&lt;br /&gt;&lt;br /&gt;'Section header&lt;br /&gt;objExcel.Cells(i, j) = "Installed Hotfixes"&lt;br /&gt;objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt;i = i + 1&lt;br /&gt;&lt;br /&gt;'Column headers&lt;br /&gt; objExcel.Cells(i, j) = "Hot Fix ID:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Description:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Installation Date:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;  &lt;br /&gt; objExcel.Cells(i, j) = "Service Pack Level:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;'Hotfix data&lt;br /&gt;For Each objQuickFix in colQuickFixes&lt;br /&gt; i = i + 1&lt;br /&gt; j = 1&lt;br /&gt;&lt;br /&gt; If objQuickFix.HotFixID = "File 1" Then&lt;br /&gt;  objExcel.Cells(i, j) = objQuickFix.ServicePackInEffect&lt;br /&gt; Else&lt;br /&gt; objExcel.Cells(i, j) = objQuickFix.HotFixID&lt;br /&gt; End If&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = objQuickFix.Description&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = objQuickFix.InstalledBy&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = objQuickFix.ServicePackInEffect&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;Set objQuickFix = nothing&lt;br /&gt;&lt;br /&gt;' Autofit the columns &lt;br /&gt;objExcel.Columns("A:Z").EntireColumn.AutoFit&lt;br /&gt;objExcel.Columns("A:Z").HorizontalAlignment = xlLeft&lt;br /&gt;&lt;br /&gt;'*************************************************************************************&lt;br /&gt;'Services Information&lt;br /&gt;'*************************************************************************************&lt;br /&gt;&lt;br /&gt;'Activate the services worksheet&lt;br /&gt;objExcel.Worksheets("Services").Activate&lt;br /&gt;&lt;br /&gt;i = 1&lt;br /&gt;j = 1&lt;br /&gt;&lt;br /&gt;'Column headers&lt;br /&gt; objExcel.Cells(i, j).Value = "Service"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = "Status"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = "StartMode"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = "StartName"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j).Value = "PathName"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt;'Services data&lt;br /&gt;For Each objService in colServices&lt;br /&gt;    i = i + 1&lt;br /&gt; objExcel.Cells(i, 1) = objService.Name&lt;br /&gt; objExcel.Cells(i, 2) = objService.State&lt;br /&gt; objExcel.Cells(i, 3) = objService.StartMode&lt;br /&gt; objExcel.Cells(i, 4) = objService.StartName&lt;br /&gt; objExcel.Cells(i, 5) = objService.PathName&lt;br /&gt; if objService.State = "Stopped" then&lt;br /&gt;  objExcel.Cells(i, 2).Font.ColorIndex = 3&lt;br /&gt; end if&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;Set objService = nothing&lt;br /&gt;&lt;br /&gt;' Autofit the first column to fit the longest service name&lt;br /&gt;objExcel.Columns("A:Z").EntireColumn.AutoFit&lt;br /&gt;objExcel.Columns("A:Z").HorizontalAlignment = xlLeft&lt;br /&gt;&lt;br /&gt;'*****************************************************************************************&lt;br /&gt;'Hardware Section&lt;br /&gt;'*****************************************************************************************&lt;br /&gt;&lt;br /&gt;'Activate the hardware worksheet&lt;br /&gt;objExcel.Worksheets("Hardware").Activate&lt;br /&gt;&lt;br /&gt;i = 1&lt;br /&gt;j = 1&lt;br /&gt;&lt;br /&gt;'Section header&lt;br /&gt;objExcel.Cells(i, j) = "Logical Drives"&lt;br /&gt;objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt;i = i + 1&lt;br /&gt;j = 1&lt;br /&gt;&lt;br /&gt;'Column headers&lt;br /&gt; objExcel.Cells(i, j) = "Drive letters:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Volume Name:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Description:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "File System:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Total Size (GB):"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Free Space (GB):"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Volume Serial Number:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Compressed:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;i = i + 1&lt;br /&gt;j = 1&lt;br /&gt;&lt;br /&gt;'Logical disk data&lt;br /&gt;For each objDisk in colDisks&lt;br /&gt; objExcel.Cells(i, j) = objDisk.DeviceID&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = objDisk.VolumeName  &lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = objDisk.Description           &lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = objDisk.FileSystem  &lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; disk_size = objDisk.Size / 1073741824&lt;br /&gt; objExcel.Cells(i, j) = int(disk_size)    &lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; disk_free = objDisk.FreeSpace / 1073741824&lt;br /&gt; objExcel.Cells(i, j) = int(disk_free)            &lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = objDisk.VolumeSerialNumber &lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = objDisk.Compressed  &lt;br /&gt;&lt;br /&gt; j = 1&lt;br /&gt; i = i + 1&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;Set objDisk = nothing&lt;br /&gt;&lt;br /&gt;j = 1&lt;br /&gt;i = i + 1&lt;br /&gt;&lt;br /&gt;'Section header&lt;br /&gt;objExcel.Cells(i, j) = "Physical Drives"&lt;br /&gt;objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt;i = i + 1&lt;br /&gt;j = 1&lt;br /&gt;&lt;br /&gt;'Column headers&lt;br /&gt; objExcel.Cells(i, j) = "Caption:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "Device ID:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "Index:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "Interface Type:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "Manufacturer:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "Media Loaded:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "Media Type:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "Model:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "Partitions:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "SCSI Bus:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "SCSI Logical Unit:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "SCSI Port:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "SCSI TargetId:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "Sectors Per Track:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "Signature:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "Size (GB):"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "Status:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt;'Physical disk data&lt;br /&gt;For each objDiskDrive in colDiskDrives&lt;br /&gt;    &lt;br /&gt;    i = i + 1&lt;br /&gt;    j = 1&lt;br /&gt;    &lt;br /&gt;        objExcel.Cells(i, j) = objDiskDrive.Caption&lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objDiskDrive.DeviceID&lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objDiskDrive.Index&lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objDiskDrive.InterfaceType&lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objDiskDrive.Manufacturer&lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objDiskDrive.MediaLoaded&lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objDiskDrive.MediaType&lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objDiskDrive.Model&lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objDiskDrive.Partitions&lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objDiskDrive.SCSIBus&lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objDiskDrive.SCSILogicalUnit&lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objDiskDrive.SCSIPort&lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objDiskDrive.SCSITargetId &lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objDiskDrive.SectorsPerTrack&lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objDiskDrive.Signature &lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        diskDrive_size = objDiskDrive.Size / 1073741824&lt;br /&gt;        objExcel.Cells(i, j) = int(diskDrive_size)   &lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objDiskDrive.Status &lt;br /&gt;    &lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;Set objDiskDrive = nothing&lt;br /&gt;&lt;br /&gt;'Get SCSI Controller&lt;br /&gt;&lt;br /&gt;j = 1&lt;br /&gt;i = i + 2&lt;br /&gt;&lt;br /&gt;'Section header&lt;br /&gt;objExcel.Cells(i, j) = "SCSI Information"&lt;br /&gt;objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt;i = i + 1&lt;br /&gt;j = 1&lt;br /&gt;&lt;br /&gt;'Column headers&lt;br /&gt; objExcel.Cells(i, j) = "Name:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Device ID:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Driver Name:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "PNP Device ID:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Protocol Supported:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Status Information:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Configuration Manager Error Code:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Configuration Manager User Configuration:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;'SCSI controller data &lt;br /&gt;For Each objSCSIItem in colSCSIItems&lt;br /&gt;    i = i + 1&lt;br /&gt;    j = 1&lt;br /&gt;    &lt;br /&gt;        objExcel.Cells(i, j) = objSCSIItem.Name&lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objSCSIItem.DeviceID&lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objSCSIItem.DriverName&lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objSCSIItem.PNPDeviceID&lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objSCSIItem.ProtocolSupported&lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objSCSIItem.StatusInfo&lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objSCSIItem.ConfigManagerErrorCode&lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objSCSIItem.ConfigManagerUserConfig&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;Set objSCSIItem = nothing&lt;br /&gt;&lt;br /&gt;'Get BIOS information&lt;br /&gt;&lt;br /&gt;j = 1&lt;br /&gt;i = i + 2&lt;br /&gt;&lt;br /&gt;'Section header&lt;br /&gt;objExcel.Cells(i, j) = "BIOS Information"&lt;br /&gt;objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt;i = i + 1&lt;br /&gt;j = 1&lt;br /&gt;&lt;br /&gt;'Column header&lt;br /&gt; objExcel.Cells(i, j) = "Manufacturer:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Name:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Release Date:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Version:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt;'BIOS data&lt;br /&gt;For each objBIOS in colBIOS&lt;br /&gt;    i = i + 1&lt;br /&gt;    j = 1&lt;br /&gt;    &lt;br /&gt;        objExcel.Cells(i, j) = objBIOS.Manufacturer&lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objBIOS.Name&lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objBIOS.ReleaseDate&lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objBIOS.Version&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;Set objBIOS = nothing&lt;br /&gt;&lt;br /&gt;'Get Processor information&lt;br /&gt;&lt;br /&gt;j = 1&lt;br /&gt;i = i + 2&lt;br /&gt;&lt;br /&gt;'Section header&lt;br /&gt;objExcel.Cells(i, j) = "Processor Information"&lt;br /&gt;objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt;i = i + 1&lt;br /&gt;j = 1&lt;br /&gt;&lt;br /&gt;'Column headers&lt;br /&gt; objExcel.Cells(i, j) = "Name:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "Manufacturer:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "Current Clock Speed (MHz):"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "L2 Cache Size (MB):"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "Architecture:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "Address Width (bits):"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt;'Processor data&lt;br /&gt;For Each objProcItem in colProcItems&lt;br /&gt;    i = i + 1&lt;br /&gt;    j = 1&lt;br /&gt;    &lt;br /&gt;        objExcel.Cells(i, j) = objProcItem.Name&lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objProcItem.Manufacturer&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = objProcItem.CurrentClockSpeed&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = objProcItem.L2CacheSize&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = objProcItem.Architecture&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = objProcItem.AddressWidth&lt;br /&gt;&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;Set objProcItem = nothing&lt;br /&gt;&lt;br /&gt;'Get Memory Information&lt;br /&gt;&lt;br /&gt;j = 1&lt;br /&gt;i = i + 2&lt;br /&gt;&lt;br /&gt;'Section header&lt;br /&gt;objExcel.Cells(i, j) = "Physical Memory Information"&lt;br /&gt;objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt;i = i + 1&lt;br /&gt;j = 1&lt;br /&gt;&lt;br /&gt;'Column header&lt;br /&gt; objExcel.Cells(i, j) = "Total Physical Memory (MB):"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt;'Physical memory data&lt;br /&gt;For Each objSetting in colSettings&lt;br /&gt;    i = i + 1&lt;br /&gt;    j = 1&lt;br /&gt;    &lt;br /&gt;     phys_ram = objSetting.TotalPhysicalMemory / 1048576&lt;br /&gt;        objExcel.Cells(i, j) = int(phys_ram)&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;Set objSetting = nothing&lt;br /&gt;&lt;br /&gt;'Get Video Information&lt;br /&gt;&lt;br /&gt;j = 1&lt;br /&gt;i = i + 2&lt;br /&gt;&lt;br /&gt;'Section header&lt;br /&gt;objExcel.Cells(i, j) = "Video Card Information"&lt;br /&gt;objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt;i = i + 1&lt;br /&gt;j = 1&lt;br /&gt;&lt;br /&gt;'Column header&lt;br /&gt; objExcel.Cells(i, j) = "Name:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "Description:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "Driver Version:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "Video Memory (MB):"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt;'Video card data&lt;br /&gt;For Each objVideo in colVideo&lt;br /&gt;    i = i + 1&lt;br /&gt;    j = 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = objVideo.Caption&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = objVideo.Description&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = objVideo.DriverVersion&lt;br /&gt;&lt;br /&gt; j = j + 1&lt;br /&gt;&lt;br /&gt; video_ram = objVideo.AdapterRAM / 1048576&lt;br /&gt; objExcel.Cells(i, j) = int(video_ram)&lt;br /&gt; &lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;Set objVideo = nothing&lt;br /&gt;&lt;br /&gt;'Get Network Adapter Information&lt;br /&gt;&lt;br /&gt;j = 1&lt;br /&gt;i = i + 2&lt;br /&gt;&lt;br /&gt;'Section header&lt;br /&gt;objExcel.Cells(i, j) = "NIC Information"&lt;br /&gt;objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt;'Column header&lt;br /&gt; i = i + 1&lt;br /&gt; j = 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Name:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "MAC Address:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "Manufacturer:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt;'Network card data&lt;br /&gt;For Each objNet in colNet&lt;br /&gt;&lt;br /&gt; If objNet.MACAddress &lt;&gt; "" Then&lt;br /&gt;  i = i + 1&lt;br /&gt;  j = 1&lt;br /&gt;&lt;br /&gt;  objExcel.Cells(i, j) = objNet.Name&lt;br /&gt;&lt;br /&gt;  j = j + 1&lt;br /&gt;&lt;br /&gt;  objExcel.Cells(i, j) = objNet.MACAddress&lt;br /&gt;&lt;br /&gt;  j = j + 1&lt;br /&gt;  &lt;br /&gt;  objExcel.Cells(i, j) = objNet.Manufacturer&lt;br /&gt; End if&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;Set objNet = nothing&lt;br /&gt;&lt;br /&gt;' Autofit the first column to fit the longest name&lt;br /&gt;objExcel.Columns("A:Z").EntireColumn.AutoFit&lt;br /&gt;objExcel.Columns("A:Z").HorizontalAlignment = xlLeft&lt;br /&gt;&lt;br /&gt;'******************************************************************************************&lt;br /&gt;'Printers Section&lt;br /&gt;'******************************************************************************************&lt;br /&gt;&lt;br /&gt;objExcel.Worksheets("Printers").Activate&lt;br /&gt;&lt;br /&gt;i = 1&lt;br /&gt;j = 1&lt;br /&gt;&lt;br /&gt;'Section header&lt;br /&gt;objExcel.Cells(i, j) = "Printer Information"&lt;br /&gt;objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;&lt;br /&gt;'Column Headers&lt;br /&gt;i = i + 1&lt;br /&gt;j = 1&lt;br /&gt;&lt;br /&gt; objExcel.Cells(i, j) = "Default:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "Name:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "Server Name:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "Share Name:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "Driver Name:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = "Port Name:"&lt;br /&gt; objExcel.Cells(i, j).Font.Bold = TRUE&lt;br /&gt;        &lt;br /&gt;'List printer objects        &lt;br /&gt;For Each objPrintItem in colPrintItems&lt;br /&gt;    i = i + 1&lt;br /&gt;    j = 1&lt;br /&gt;    &lt;br /&gt;        objExcel.Cells(i, j) = objPrintItem.Default&lt;br /&gt;        &lt;br /&gt;        j = j + 1&lt;br /&gt;        &lt;br /&gt;        objExcel.Cells(i, j) = objPrintItem.Name&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = objPrintItem.ServerName&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = objPrintItem.ShareName&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = objPrintItem.DriverName&lt;br /&gt; &lt;br /&gt; j = j + 1&lt;br /&gt; &lt;br /&gt; objExcel.Cells(i, j) = objPrintItem.PortName&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;Set objPrintItem = nothing&lt;br /&gt;&lt;br /&gt;' Autofit the first column to fit the longest name&lt;br /&gt;objExcel.Columns("A:Z").EntireColumn.AutoFit&lt;br /&gt;objExcel.Columns("A:Z").HorizontalAlignment = xlLeft&lt;br /&gt;&lt;br /&gt;'Activate the Main worksheet&lt;br /&gt;objExcel.Worksheets(strComputer).Activate&lt;br /&gt;&lt;br /&gt;'Cleanup objects&lt;br /&gt;Set objExcel.Quit&lt;br /&gt;Set objExcel = nothing&lt;br /&gt;Set objFSO = nothing&lt;br /&gt;Set objWMIService = nothing&lt;br /&gt;&lt;br /&gt;'Initialize collections&lt;br /&gt;Set colBIOS = nothing&lt;br /&gt;Set colDisks = nothing&lt;br /&gt;Set colDiskDrives = nothing&lt;br /&gt;Set colDrives = nothing&lt;br /&gt;Set colNet = nothing&lt;br /&gt;Set colOSItems = nothing&lt;br /&gt;Set colPrintItems = nothing&lt;br /&gt;Set colProcItems = nothing&lt;br /&gt;Set colQuickFixes = nothing&lt;br /&gt;Set colSCSIItems = nothing&lt;br /&gt;Set colServices = nothing&lt;br /&gt;Set colSettings = nothing&lt;br /&gt;Set colSoftware = nothing&lt;br /&gt;Set colVideo = nothing&lt;br /&gt;&lt;br /&gt;'Inform the user that the process is complete&lt;br /&gt;wscript.echo("Finished")&lt;br /&gt;&lt;br /&gt;Wscript.Quit 0&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-2423575906646501755?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/2423575906646501755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=2423575906646501755' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/2423575906646501755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/2423575906646501755'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/06/vbsscript-to-inventory-windows-computer.html' title='VBSScript to Inventory Windows Computer'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-5841751545925625932</id><published>2008-05-11T14:41:00.009-04:00</published><updated>2009-03-01T11:01:29.915-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><title type='text'>SearchMe: Cool Idea</title><content type='html'>&lt;a href="http://www.searchme.com/" target="_blank"&gt;SearchMe.com&lt;/a&gt; is a new "visual" search engine. The uniqueness of this site is the initial page. There is no search button and hitting the "enter" key isn't required to see a small set of categories that lead to results. This search engine is still in beta testing, but it is fun to use.&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ke4YiM74LBs/SCc-RYtKT9I/AAAAAAAAAHw/ANZXSBC2P1A/s1600-h/SearchMe1.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_ke4YiM74LBs/SCc-RYtKT9I/AAAAAAAAAHw/ANZXSBC2P1A/s200/SearchMe1.JPG" alt="" id="BLOGGER_PHOTO_ID_5199192763233095634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Another, really neat feature of this site is the "iPod" type scrolling interface of the results. It gives an easy to read view of the top results. This makes a lot of the common tasks of web browsing easy, such as looking getting an idea of whether or not the page is legitimate or a squatter's page. The results can be scrolled using the wheel of a scroll mouse, the slider bar at the bottom of the page, or by clicking on the next page to bring it to the center.&lt;br /&gt;&lt;br /&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ke4YiM74LBs/SCc_nItKT-I/AAAAAAAAAH4/ZD_JhWBRJSo/s1600-h/SearchMe2.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_ke4YiM74LBs/SCc_nItKT-I/AAAAAAAAAH4/ZD_JhWBRJSo/s200/SearchMe2.JPG" alt="" id="BLOGGER_PHOTO_ID_5199194236406878178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Each result in the results view provides a quick summary, a link to the page, and the URL at the bottom of the screen shot. This information is displayed by mousing-over the page.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ke4YiM74LBs/SCdAGItKT_I/AAAAAAAAAIA/-Sx84DMkpH0/s1600-h/SearchMe3.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_ke4YiM74LBs/SCdAGItKT_I/AAAAAAAAAIA/-Sx84DMkpH0/s200/SearchMe3.JPG" alt="" id="BLOGGER_PHOTO_ID_5199194768982822898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Finally, there is a way to display the text results of the search if the visual display is not acceptable. There is a small arrow beneath the slider bar that will pop-up a half-screen window that displays the common text results, similar to a &lt;a href="http://www.google.com/"&gt;Google &lt;/a&gt;result set.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ke4YiM74LBs/SCdA0ItKUAI/AAAAAAAAAII/co-p3OhJVUU/s1600-h/SearchMe4.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_ke4YiM74LBs/SCdA0ItKUAI/AAAAAAAAAII/co-p3OhJVUU/s200/SearchMe4.JPG" alt="" id="BLOGGER_PHOTO_ID_5199195559256805378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;These are the features that popped-out to me first. Just the basics, but I'm sure that a product this innovative will include newer features that will provide a more intuitive search experience. Although &lt;a href="http://www.google.com"&gt;Google &lt;/a&gt;is still the defacto search engine, I think that this has a lot of potential because it allows the user to see the results rather than have to read the text results.&lt;br /&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-5841751545925625932?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/5841751545925625932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=5841751545925625932' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/5841751545925625932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/5841751545925625932'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/05/searchme-cool-idea.html' title='SearchMe: Cool Idea'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_ke4YiM74LBs/SCc-RYtKT9I/AAAAAAAAAHw/ANZXSBC2P1A/s72-c/SearchMe1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-303613073789075834</id><published>2008-05-06T10:54:00.016-04:00</published><updated>2009-03-01T11:02:03.316-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Outlook'/><title type='text'>Xobni Outlook Add-In</title><content type='html'>This is the coolest piece of software I have found in some time. I use Outlook constantly, and this add-in is the best. In our corporate environment, we live and die by email. &lt;a href="http://www.xobni.com/" target="_blank"&gt;Xobni&lt;/a&gt; is a tool that changes the way Outlook handles messages into something that is intuitive and consolidated. Briefly, items are linked together and grouped into conversations based on user profiles. &lt;a href="http://www.xobni.com/" target="_blank"&gt;Xobni&lt;/a&gt; pulls information together into one place, linked together in a way that matters to the end-user.&lt;span class="fullpost"&gt;  It also provides analytical data for people you communicate with and how you communicate with them. I know that all of this sounds strange right now, but I will go into more detail with it below.&lt;br /&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;br /&gt;Currently, &lt;a href="http://www.xobni.com/" target="_blank"&gt;Xobni&lt;/a&gt; is a free add-in for Outlook 2003/2007. I have already become severely addicted to this tool in one day. There aren't many tools that I need for work that I would spend my own money on. I would for this one. It changes the way I work. I have already turned off the reading pane in Outlook (I use 2007).&lt;br /&gt;&lt;br /&gt;Starting with the main screen, this tool shows how different it is than any other Outlook tool.&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ke4YiM74LBs/SCBxrqv7a3I/AAAAAAAAAGo/qV1C9Adr798/s1600-h/Xobni_1.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_ke4YiM74LBs/SCBxrqv7a3I/AAAAAAAAAGo/qV1C9Adr798/s200/Xobni_1.JPG" alt="" id="BLOGGER_PHOTO_ID_5197278965009181554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;The graph at the top of the window shows the best time to contact this user. The times at which they send you the most emails.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ke4YiM74LBs/SCByDav7a4I/AAAAAAAAAGw/9dCwfcyOBXs/s1600-h/Xobni_2.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_ke4YiM74LBs/SCByDav7a4I/AAAAAAAAAGw/9dCwfcyOBXs/s200/Xobni_2.JPG" alt="" id="BLOGGER_PHOTO_ID_5197279373031074690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It also shows the number of messages that you have sent/received from this user, as well as where that person ranks in your network.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ke4YiM74LBs/SCByN6v7a5I/AAAAAAAAAG4/ryst1k4iapI/s1600-h/Xobni_3.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_ke4YiM74LBs/SCByN6v7a5I/AAAAAAAAAG4/ryst1k4iapI/s200/Xobni_3.JPG" alt="" id="BLOGGER_PHOTO_ID_5197279553419701138" border="0" /&gt;&lt;/a&gt;&lt;div align="center"&gt;&lt;div align="left"&gt;&lt;br /&gt;The next section shows the contact information for this user. The telephone numbers are pulled from their signatures, rather than from their contact information. This avoids the problem of not having someone added to your contacts. This pane also allows you to send a quick email that shows your availability for the next week. This provides a nice way to schedule meetings with people that don't have Outlook for scheduling meetings. Finally, there is a quick link to generate a new message to the user.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ke4YiM74LBs/SCBycav7a6I/AAAAAAAAAHA/B3rIG4qr8I0/s1600-h/Xobni_4.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_ke4YiM74LBs/SCBycav7a6I/AAAAAAAAAHA/B3rIG4qr8I0/s200/Xobni_4.JPG" alt="" id="BLOGGER_PHOTO_ID_5197279802527804322" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;div align="left"&gt;The next pane shows the contacts. These contacts are associated with the currently selected user's profile. The contacts are derived from messages that the selected user has sent to these contacts. This is what constitutes a user's "network". Hovering over any of these contacts provides relevant contact information such as email address and phone number (also pulled from their signature).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ke4YiM74LBs/SCByiav7a7I/AAAAAAAAAHI/5XoQelWqvBY/s1600-h/Xobni_5.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_ke4YiM74LBs/SCByiav7a7I/AAAAAAAAAHI/5XoQelWqvBY/s200/Xobni_5.JPG" alt="" id="BLOGGER_PHOTO_ID_5197279905607019442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Below this pane is the conversations pane. This doesn't just show the current conversation, but all conversations with the selected contact, regardless of the selected message. This makes finding related information easier to find as well as quickly finding any messages for this user. This view also shows messages with attachments by displaying a small paper clip.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ke4YiM74LBs/SCBynav7a8I/AAAAAAAAAHQ/ROaOjC0JexA/s1600-h/Xobni_6.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_ke4YiM74LBs/SCBynav7a8I/AAAAAAAAAHQ/ROaOjC0JexA/s200/Xobni_6.JPG" alt="" id="BLOGGER_PHOTO_ID_5197279991506365378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div align="left"&gt;Clicking on any of the conversations displayed will open a new "tab" that will display additional details about this conversation such as, additional messages of the conversation, the original email, the other contacts that were included in this message string, and any files that were included. There is also a very neat "details" slider that can allow for the display of more or less details in the conversation. Additionally, there are some details like when the messages were sent/received, the total number of messages that make up the conversation, and the users included.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ke4YiM74LBs/SCByrqv7a9I/AAAAAAAAAHY/ndmtPMycxb8/s1600-h/Xobni_7.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_ke4YiM74LBs/SCByrqv7a9I/AAAAAAAAAHY/ndmtPMycxb8/s200/Xobni_7.JPG" alt="" id="BLOGGER_PHOTO_ID_5197280064520809426" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Finally, the "Files Exchanged" pane shows all file attachments that have been sent/received with the selected contact.This makes finding attachments quick and easy. There is no more searching (with the MSN desktop search) to find attachments that may or may not be from the user you need.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ke4YiM74LBs/SCByw6v7a-I/AAAAAAAAAHg/ki1PZ5x_BQ0/s1600-h/Xobni_8.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_ke4YiM74LBs/SCByw6v7a-I/AAAAAAAAAHg/ki1PZ5x_BQ0/s200/Xobni_8.JPG" alt="" id="BLOGGER_PHOTO_ID_5197280154715122658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Each of the panes offer a search button to search just that category. It is also possible to display only that pane so that finding attachments, contacts, or conversations only can be quick and efficient. There are also additional features that are too detailed or I haven't quite discovered how to implement into my daily work life just yet. I will.&lt;br /&gt;&lt;br /&gt;Some of our users are obscene with their emails. We have been looking for a way to help them manage the thousands of messages they send and receive each week. This is the very tool I have been searching for. I was going to try and devise several different methods for them to use Outlook's categories and search folders (which may still be necessary, but to a lesser degree), but I think this is the ticket. I will be installing it as a pilot for 1 or 2 users on Thursday.&lt;br /&gt;&lt;br /&gt;Some additional &lt;a href="http://www.xobni.com/" target="_blank"&gt;Xobni&lt;/a&gt; links:&lt;br /&gt;Homepage: &lt;a href="http://www.xobni.com/" target="_blank"&gt;http://www.xobni.com&lt;/a&gt;&lt;br /&gt;Download: &lt;a href="http://www.xobni.com/download" target="_blank"&gt;http://www.xobni.com/download&lt;/a&gt;&lt;br /&gt;Learn More: &lt;a href="http://www.xobni.com/learnmore" target="_blank"&gt;http://www.xobni.com/learnmore&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-303613073789075834?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/303613073789075834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=303613073789075834' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/303613073789075834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/303613073789075834'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/05/xobni.html' title='Xobni Outlook Add-In'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_ke4YiM74LBs/SCBxrqv7a3I/AAAAAAAAAGo/qV1C9Adr798/s72-c/Xobni_1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-6760348916163346854</id><published>2008-04-28T20:44:00.005-04:00</published><updated>2009-03-01T11:02:34.267-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Symantec'/><category scheme='http://www.blogger.com/atom/ns#' term='Backup'/><title type='text'>Backup Exec 12 Upgrade</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I have completed the upgrade from Backup Exec 11d to 12. This will free an hour or so each day from the task of manually managing the IMG media for the granular restore technology (GRT) backups. Although 11d did provide us with the ability to backup Exchange 2007, it didn't manage the IMG folders at all. So, every morning I had to log into the backup server and delete the oldest backup. Now that &lt;a href="http://www.symantec.com/"&gt;Symantec &lt;/a&gt;has corrected this "small" problem, I can completely hand the backup tasks off to another member of our team to verify success and log each day.&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;The upgrade was very smooth, but the licensing has been a little tricky. Some of our 11d licenses were covered under a support/maintenance agreement and &lt;a href="http://www.symantec.com/"&gt;Symantec&lt;/a&gt; sent me the license keys in my email. The other installation's support was expired so I purchased a new support contract through &lt;a href="http://www.cdw.com/"&gt;CDW&lt;/a&gt;. They sent me the certificate from Symantec, but when I type in the serial numbers on the certificate the &lt;a href="http://licensing.symantec.com/"&gt;Symantec Licensing Portal&lt;/a&gt; says "no license key required." So I go to install the product, and of course, it asks for a license key. I called the licensing contact telephone number (&lt;span id="phone"&gt;800-721-3934)&lt;/span&gt; only to find that their hours are 7am-6pm Eastern Time (this was at 7:33PM - Doh!).&lt;br /&gt;&lt;br /&gt;I installed it as an evaluation and will contact them in the morning.&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-6760348916163346854?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/6760348916163346854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=6760348916163346854' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/6760348916163346854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/6760348916163346854'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/04/backup-exec-12.html' title='Backup Exec 12 Upgrade'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-5852270310202848977</id><published>2008-04-22T08:29:00.008-04:00</published><updated>2009-03-01T16:05:00.019-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='PowerShell'/><category scheme='http://www.blogger.com/atom/ns#' term='Exchange'/><category scheme='http://www.blogger.com/atom/ns#' term='Backup'/><title type='text'>Export-Mailbox from PowerShell</title><content type='html'>There are many times, either when restoring a mailbox or creating a permanent copy of a former employee's mailbox, when I have needed to be able to easily copy the entire contents of the mailbox. The best way I have found to do this is with the &lt;code&gt;export-mailbox&lt;/code&gt; cmdlet using the Powershell. There are two requirements for this command:&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;ol&gt;&lt;li&gt;Must be run on a 32-bit machine&lt;/li&gt;&lt;li&gt;Must have Outlook installed&lt;/li&gt;&lt;/ol&gt;The parameters for this command depend on what format you are exporting the mailbox to. You can export it to another user's mailbox. The syntax for this process is:&lt;br /&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;export-mailbox -identity mailbox.name -targetmailbox target.mailbox -targetfolder targetfoldername&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This will place a complete copy of the exported mailbox into the target mailbox in a folder that is specified in the &lt;code&gt;-targetfolder&lt;/code&gt; switch.&lt;br /&gt;&lt;br /&gt;The other option for this command is to export the mailbox to a PST. The interesting thing about this option is that I haven't been able to get it to work. The switch is not part of the cmdlet on my workstation, but is available on the Exchange server. The Exchange server is 64-bit and doesn't have Outlook installed, so it can't be run from that machine. The syntax for this command would be:&lt;br /&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;export-mailbox -identity mailbox.name -PSTFolderPath foldername&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This will export the contents of the mailbox to a PST file and place it in the folder that is specified by the &lt;code&gt;-PSTFolderPath&lt;/code&gt; switch.&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-5852270310202848977?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/5852270310202848977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=5852270310202848977' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/5852270310202848977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/5852270310202848977'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/04/export-mailbox-from-powershell.html' title='Export-Mailbox from PowerShell'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-4306564790717452897</id><published>2008-04-16T17:08:00.003-04:00</published><updated>2009-03-01T11:03:29.868-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blackberry'/><category scheme='http://www.blogger.com/atom/ns#' term='Telephones'/><title type='text'>Dialing Letters from Blackberry</title><content type='html'>I just received my training vouchers for EMC ClarIIon training. I am very excited about this training. All that was contained in the box were two white envelopes. I opened them and there were two nice, slick, blue folders. I opened each folder to find a single sheet of paper that contained a "voucher". On the voucher was printed instructions for activating your training. To do this you needed to call the EMC training group at 1-888-EMC-TRNG. Great, except that I'm not in the office so I needed to use my Blackberry. Anyone that has ever used a Blackberry knows that the keys that have both numbers and letters are not arranged in the manner of a traditional telephone. &lt;span class="fullpost"&gt; The W key is shared with 1, the E key is shared with 2. So dialing by letters is something that I always thought you just couldn't do with a Blackberry. I know that this was a silly assumption for me to make seeing as Blackberry is, and has been the leader in hand-held "smart-phones" for many years. So today I took to task the ability to do this and was determined that I would find a way. I searched for it, low and behold, the first entry in the almighty &lt;a href="http://www.google.com"&gt;Google&lt;/a&gt; results was just what I was looking for. The directions (paraphrased from the &lt;a href="http://tech.yahoo.com"&gt;Yahoo! tech site&lt;/a&gt;) are below and for future reference the URL was: &lt;a href="http://tech.yahoo.com/gd/making-a-phone-call-with-your-blackberry/153260"&gt;http://tech.yahoo.com/gd/making-a-phone-call-with-your-blackberry/153260&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;1. From the Home screen or the Phone application, dial 1-8-8-8.&lt;br /&gt;&lt;br /&gt;As you type the first number, the Phone application opens (if it isn't opened already) and displays the numbers you dialed.&lt;br /&gt;&lt;br /&gt;2. Press and hold the ALT key and then dial (press) E-M-C-T-R-N-G.&lt;br /&gt;&lt;br /&gt;Hit the send key and the Blackberry will automatically determine the correct numbers to dial.&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-4306564790717452897?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/4306564790717452897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=4306564790717452897' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/4306564790717452897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/4306564790717452897'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/04/dialing-letters-from-blackberry.html' title='Dialing Letters from Blackberry'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-65517339197755366</id><published>2008-04-15T17:39:00.004-04:00</published><updated>2009-03-01T11:03:52.115-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='ActriveDirectory'/><title type='text'>Windows XP Authentication/Authorization Process</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;While discussing Microsoft's Best Practices for Domain Controllers, I began looking closely at the authentication process and the authorization process when accessing resources on the network. I had a mix of terms and understanding about this. I thought that the user was authenticated each time they opened a file or printed a document. I later found that this is actually called "authorization", which now makes sense.&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;This is termed as authorization because when the user is authenticated during the login process (domain) they are granted an access token. Each time the user then starts a process thread (we'll use Microsoft Word as the example), that application doesn't have a SID (Security Identification), so it "borrows" the user's token that launched the process (this is also how the "Run As" procedure works). Every file the process tries to access (such as a Word document on a network drive), also uses the user's access token. This is how the system knows when a user's account has been disabled after they have logged in, then immediately makes network resources unavailable, even though the user can still be logged into the local machine (this is because their authentication already happened when they logged on the computer - before the account was disabled).&lt;br /&gt;&lt;br /&gt;This brings me back to the point of the domain controller in each site. If it isn't configured this way, every network file that is accessed (which for us, is most every file) or a document is printed (another network resource), the user's access token is passed to the domain controller to access that resource. If there isn't a domain controller in the site, the token must be passed over the WAN and then back to the network resource to ensure that the access token is valid (see Microsoft's Windows XP TechCenter: &lt;a href="http://technet.microsoft.com/en-us/library/bb457115.aspx"&gt;http://technet.microsoft.com/en-us/library/bb457115.aspx&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;This has been a great exercise that confirmed my belief and corrected some of the terminology that I was using.&lt;br /&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-65517339197755366?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/65517339197755366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=65517339197755366' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/65517339197755366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/65517339197755366'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/04/windows-xp-authenticationauthorization.html' title='Windows XP Authentication/Authorization Process'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-7379783811632613562</id><published>2008-04-07T07:45:00.005-04:00</published><updated>2009-03-01T11:04:21.816-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Telephones'/><category scheme='http://www.blogger.com/atom/ns#' term='Cisco'/><title type='text'>Cisco Call Manager 4.1 Time Updates</title><content type='html'>This version of Call Manager is not compliant with the new Daylight Saving Time. So this morning, I was blessed with the ticket to change the time on all 660 phones. The Call Manager Server gets the time from the Windows host operating system. &lt;span class="fullpost"&gt; To get the time changed, I had to check the box for "Automatically Adjust for Daylight Saving Time" then manually change the clock to the correct time. This fixed the time and then I just reset all of the phones.&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-7379783811632613562?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/7379783811632613562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=7379783811632613562' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/7379783811632613562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/7379783811632613562'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/04/cisco-call-manager-41-time-updates.html' title='Cisco Call Manager 4.1 Time Updates'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-4544214831254476149</id><published>2008-04-06T12:01:00.006-04:00</published><updated>2009-03-01T16:05:59.282-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='HP'/><category scheme='http://www.blogger.com/atom/ns#' term='Backup'/><title type='text'>Copy HP LAN Switch Config</title><content type='html'>In our environment, we use &lt;a href="http://www.hp.com/"&gt;HP&lt;/a&gt; 2524 ProCurve switches for our LAN switching. These switches have been shown to be reliable and easy to configure. To copy the config of these switches for backup purposes there are two methods:&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;ol&gt;&lt;li&gt;Log into the web interface (if enabled) and go to the tab labeled "Diagnostics", then "Configuration Report". This tab contains a text copy of the running configuration.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Log into the CLI (Command Line Interface) and use commands to copy the configuration to a TFTP (Trivial File Transfer Protocol) server.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;I prefer the second method because although, the web interface is easy because you can just copy and paste it to a text file, the web interface uses Java (which can be slow), requires two logins and then you have to navigate to the section.&lt;br /&gt;&lt;br /&gt;To copy a switch configuration using the CLI log into the switch with telnet and type the following command:&lt;br /&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;copy startup-config tftp 192.168.x.x destination&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The command breaks down in the following way:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;copy&lt;/code&gt; - command to copy something&lt;/li&gt;&lt;li&gt;&lt;code&gt;startup-config&lt;/code&gt; - what to copy, it can be running-config if that is the configuration you want&lt;/li&gt;&lt;li&gt;&lt;code&gt;tftp&lt;/code&gt; - the protocol to use when copying&lt;/li&gt;&lt;li&gt;&lt;code&gt;192.168.x.x&lt;/code&gt; - the address of the TFTP server&lt;/li&gt;&lt;li&gt;&lt;code&gt;destination&lt;/code&gt; - the name of the file when it is placed on the server&lt;/li&gt;&lt;/ul&gt;Very simple, and can also be scripted to get many configs at one time.&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-4544214831254476149?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/4544214831254476149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=4544214831254476149' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/4544214831254476149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/4544214831254476149'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/04/copy-hp-lan-switch-config.html' title='Copy HP LAN Switch Config'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-4211540210422781150</id><published>2008-04-05T16:23:00.010-04:00</published><updated>2009-03-01T16:08:21.395-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Network'/><category scheme='http://www.blogger.com/atom/ns#' term='Telephones'/><category scheme='http://www.blogger.com/atom/ns#' term='UnityExpress'/><category scheme='http://www.blogger.com/atom/ns#' term='Cisco'/><title type='text'>Daylight Saving Time on Cisco Devices</title><content type='html'>Much of our infrastructure is made up of &lt;a href="http://www.cisco.com/"&gt;Cisco&lt;/a&gt; devices. These include 1130 wireless access points, 1720 routers, 3750 Catalyst switches, Unity Express voice mail systems, as well as some additional devices not relevant to this post. Due to the change in the effective dates for &lt;a href="http://aa.usno.navy.mil/faq/docs/daylight_time.php"&gt;Daylight Saving Time&lt;/a&gt;, we had to make a lot of different changes to our &lt;a href="http://www.cisco.com/"&gt;Cisco&lt;/a&gt; devices. During this process we found that there are different ways to approach different devices. &lt;span class="fullpost"&gt;  For example, the 1130 AP and 1720 routers don't use NTP (Network Time Protocol) but they use SNTP (Simple Network Time Protocol). This is an important distinction because as you try to make sweeping changes in a large environment, you have to know that certain devices require one extra letter as compared to all of the other devices.&lt;br /&gt;&lt;br /&gt;So, the config for the &lt;a href="http://www.cisco.com/"&gt;Cisco&lt;/a&gt; AP and 1720&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;config t&lt;br /&gt;!&lt;br /&gt;clock timezone EST -5&lt;br /&gt;!&lt;br /&gt;clock summer-time EDT recurring 2 Sunday March 02:00 1 Sunday November 02:00&lt;br /&gt;!&lt;br /&gt;sntp server 192.168.x.x&lt;br /&gt;!&lt;br /&gt;exit&lt;br /&gt;!&lt;br /&gt;show clock&lt;br /&gt;!&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;As seen above, with &lt;a href="http://www.cisco.com/"&gt;Cisco&lt;/a&gt;'s IOS you can easily set the timezone, start and end date for Daylight Saving Time, as well as the SNTP server's address.&lt;br /&gt;&lt;br /&gt;As for all of the other &lt;a href="http://www.cisco.com/"&gt;Cisco&lt;/a&gt; devices (at least in our infrastructure) the config is as follows:&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;config t&lt;br /&gt;!&lt;br /&gt;clock timezone EST -5&lt;br /&gt;!&lt;br /&gt;clock summer-time EDT recurring 2 Sunday March 02:00 1 Sunday November 02:00&lt;br /&gt;!&lt;br /&gt;sntp server 192.168.x.x&lt;br /&gt;!&lt;br /&gt;exit&lt;br /&gt;!&lt;br /&gt;show clock&lt;br /&gt;!&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;Unfortunately, there was still one more change that needed to be made. The Unity Express voice mail module doesn't use the timezone settings for whatever devices it is installed in, it has its own settings, which seems silly, but I guess someone had a use for it.&lt;br /&gt;&lt;br /&gt;To access the Unity Express module you must first enter IOS for the host device, then the "Service Engine" that is running Unity Express.  The following is the command that I used to configure this for our Unity Express time zone:&lt;br /&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;service-module service-Engine2/0 session&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;This will start the telnet session with unity express&lt;br /&gt;&lt;br /&gt;The system will need to be changed to EST (New York - for Fall) or AST (Bermuda - for Spring) using the command&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;clock timezone&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;This command will present a menu&lt;br /&gt;&lt;br /&gt;For EST choose:&lt;br /&gt;&lt;code&gt;2) Americas&lt;/code&gt;&lt;br /&gt;then&lt;br /&gt;&lt;code&gt;45)United States&lt;br /&gt;New York&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;For AST choose:&lt;br /&gt;&lt;code&gt;6)Atlantic Ocean&lt;br /&gt;Bermuda&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The system must then be reloaded (taken offline). This was the only way that I could get the Unity Express module to stamp the voice mail messages with the correct time. This means, that each March and November, I am going to have to perform this to get the messages stamped properly.&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-4211540210422781150?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/4211540210422781150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=4211540210422781150' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/4211540210422781150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/4211540210422781150'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/04/daylight-saving-time-on-cisco-devices.html' title='Daylight Saving Time on Cisco Devices'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-5954709742906606829</id><published>2008-04-05T16:05:00.006-04:00</published><updated>2009-03-01T11:05:27.439-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Telephones'/><category scheme='http://www.blogger.com/atom/ns#' term='ATT'/><category scheme='http://www.blogger.com/atom/ns#' term='Cisco'/><title type='text'>Cisco was Right...The Problem Lies with AT&amp;T</title><content type='html'>We have been having a problem over the past two months with dropped calls at one of our offices. I have had &lt;a href="http://www.att.com/"&gt;AT&amp;amp;T&lt;/a&gt; run several stress tests, replaced Cat5 cables, and even had the hardware vendor, &lt;a href="http://www.cisco.com/"&gt;Cisco&lt;/a&gt; check the hardware on the voice router (3825). We have been being notified consistently by our network monitoring software (&lt;a href="http://www.solarwinds.net/"&gt;Solarwinds&lt;/a&gt;) that the VWIC card was not available. Cisco insisted that they didn't feel like it was a problem with the hardware, so they requested that we have &lt;a href="http://www.att.com/"&gt;AT&amp;amp;T&lt;/a&gt; come out and check the connection between the smart-jack and the VWIC card.&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;Apparently, when &lt;a href="http://www.att.com/"&gt;AT&amp;amp;T&lt;/a&gt; runs a stress test to check a circuit, they only test from 'A-Z', or as I found (only because I was persistent with my questioning, not because they were forthcoming) only to the 'front side' of the smart-jack. Although the 'back side' of the smart-jack is owned and supported by &lt;a href="http://www.att.com/"&gt;AT&amp;amp;T&lt;/a&gt;, they don't include that in their normal testing process. This is due to the fact that it requires a technician to come on-site. Also, a little fact is, if they don't find any problems with that equipment, they will charge you for the visit.&lt;br /&gt;&lt;br /&gt;It turned out that &lt;a href="http://www.cisco.com/"&gt;Cisco&lt;/a&gt; was right, there wasn't anything wrong with the hardware. Rather, the &lt;a href="http://www.att.com/"&gt;AT&amp;amp;T&lt;/a&gt; technician found that there was a 'bad pair'. It was actually kind of funny, when the tech called he said 'a bad pair can cause problems with a T1'. Really? Since the 'bad pair' was replaced by AT&amp;amp;T, we have not received any alerts from our NMS.&lt;br /&gt;&lt;br /&gt;This was a very good exercise for me as I learned many things:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;If there is a problem with a VWIC card, connectivity is probably going to be lost for good, not intermittent.&lt;/li&gt;&lt;li&gt;AT&amp;amp;T doesn't like to send technicians on-site, unless they know it is a problem or they know you are going to pay them for the visit.&lt;/li&gt;&lt;li&gt;A bad pair can cause problems with a T1 (I already knew this, but it was nice of &lt;a href="http://www.att.com/"&gt;AT&amp;amp;T&lt;/a&gt; to reinforce this).&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-5954709742906606829?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/5954709742906606829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=5954709742906606829' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/5954709742906606829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/5954709742906606829'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/04/cisco-was-right.html' title='Cisco was Right...The Problem Lies with AT&amp;T'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-5422083088075536971</id><published>2008-04-05T16:01:00.007-04:00</published><updated>2009-03-01T11:07:21.201-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='Internet'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>Label Cloud for Blogger</title><content type='html'>Thanks to phydeaux3 and his simple and effective tag cloud CSS and script (&lt;a href="http://phy3blog.googlepages.com/Beta-Blogger-Label-Cloud.html"&gt;http://phy3blog.googlepages.com/Beta-Blogger-Label-Cloud.html&lt;/a&gt;)&lt;span class="fullpost"&gt;  I was able to insert this awesome tag cloud on the right side of my blog.&lt;br /&gt;&lt;br /&gt;Thanks phydeaux3!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update&lt;/b&gt;&lt;br /&gt;Since the first time I configured this tag cloud, I have done it several more times. I have successfully configured it with several different templates and color schemes.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-5422083088075536971?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/5422083088075536971/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=5422083088075536971' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/5422083088075536971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/5422083088075536971'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/04/tag-cloud.html' title='Label Cloud for Blogger'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-464023089727413973</id><published>2008-03-30T20:40:00.006-04:00</published><updated>2009-03-01T11:07:44.764-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Telephones'/><category scheme='http://www.blogger.com/atom/ns#' term='Cisco'/><title type='text'>Cisco Attendant Console - Transferring Calls</title><content type='html'>In many of our offices (and probably soon to be all of them) we use Cisco Call Manager for our call processing. In each of our offices a receptionist is used to field the incoming calls. Included with Cisco's telephone system is a Java-based application named the Attendant Console (AC). This application allows the receptionist (in our case) to see the incoming call information, answer the call, put the call on hold, transfer the call to a number (either internal or external), as well as some other cool things.&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;Often, especially with executive-level management, the receptionist needs different options for transferring calls depending on the situation. The AC offers a few different ways to accomplish this often overlooked, yet necessary and important task and that is what will be examined in this post.&lt;br /&gt;&lt;br /&gt;Types of transfers available in the AC:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;u&gt;Transfer&lt;/u&gt; - This type of transfer does not inform the receiver of the call prior to transferring the call. When the call is transferred from the receptionist, it just rings the number (internal or external) that it is transferred to. To do this, left-click on the call and drag it over to the entry in the directory or speed dial&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;u&gt;Consult Transfer&lt;/u&gt; - A consult transfer allows the receptionist to consult the receiver of the call prior to transferring. For a consult transfer, click the call, then right-click the speed dial or directory entry and choose &lt;span style="font-weight: bold;"&gt;Consult Transfer&lt;/span&gt;. Once the receiver agrees to accept the call, click on the call in the hold window and click transfer. If the receiver doesn't want to take the call, the call can be picked up as with any other hold call and a sent to VM or whatever.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;u&gt;Direct Transfer&lt;/u&gt; - Although not often used, this is a very cool feature of the Cisco system. A direct transfer will merge two calls into the same call. Simply select both calls in the call window (using the Ctrl key), right-click one of the selected calls and choose direct transfer. When the receiver picks up the phone, both calls will be on their line.&lt;/li&gt;&lt;/ol&gt;As demonstrated here, although transferring a call seems like a simple and easy task, there are additional possibilities and requirements for transferring calls. Often, those of us in the IT field don't take this into consideration because we are not receptionists and don't think in this way. However, it is important to know the features of the systems that we support and how to instruct our users to use these features when they need them.&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-464023089727413973?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/464023089727413973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=464023089727413973' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/464023089727413973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/464023089727413973'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/03/cisco-attendant-console-transferring.html' title='Cisco Attendant Console - Transferring Calls'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-1332182312670407450</id><published>2008-03-27T17:45:00.006-04:00</published><updated>2009-03-01T16:11:00.093-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='PowerShell'/><category scheme='http://www.blogger.com/atom/ns#' term='Exchange'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Exchange 2007 Address Management</title><content type='html'>While I was upgrading our Recipient Address Policies from Exchange 2003 to Exchange 2007, I inadvertently applied each of the policies to all of our user accounts (and contacts!). I searched and searched for a cmdlet that would allow me to easily remove a proxy address, aka: alias. To accomplish this I had to put together many different elements, but in the end it turned out to be an elegant, yet simple solution. In all fairness, our recipient policies were pretty messed up and needed to be overhauled anyway. We recently removed some of the domains protected by our spam filter company (http://www.securence.com). This means that anyone with those addresses would be vulnerable to all spam. So, removing these policies was on my to-do list anyway.&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;First, I pulled in the EmailAddresses property using the get-mailbox cmdlet. This allowed me to specify which mailboxes I wanted based on which ones had the proxy address listed.&lt;br /&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;get-mailbox -resultsize unlimited | where-object {$_.EmailAddresses -like "*domain2.com"}&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Next, I put all of those addresses into an array named $mailboxes.&lt;br /&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;$mailboxes = @(get-mailbox -resultsize unlimited | where-object {$_.EmailAddresses -like "*domain2.com"})&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Now that my array is populated with all of the mailboxes that have an alias with domain2.com, I can loop through and remove the proxy address. This is a variation of a really neat command that I found on the &lt;a href="http://exchangepedia.com/blog/2007/03/how-to-remove-values-from-multi-valued.html"&gt;Exchangepedia Blog&lt;/a&gt;. The "-" removes the property from the object. So, the $mailbox variable stores the mailbox object, and then the $mailbox.emailAddresses line specifies that property that I want to change and then I append the alias (first.last in our case) to the "@domain2.com" to tell it which address to remove.&lt;br /&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;foreach ($mailbox in $mailboxes){$mailbox.emailAddresses -= $mailbox.alias + "@domain2.com"}&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Finally, I loop back through the array to commit the changes using the set-mailbox command.&lt;br /&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;foreach ($mailbox in $mailboxes) {$mailbox | set-mailbox}&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;That's it. As usual, I am sure that there is a more efficient way to write this script, and if I wanted to spend an extra 30 minutes to an hour refining the script, I could, but really why? At this point I've already run the script. One day when my work load has lightened up a bit and I'm looking for a pet project, maybe I will revisit this. The entire script is below:&lt;br /&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;$mailboxes = @(get-mailbox -resultsize unlimited | where-object {$_.EmailAddresses -like "*domain2.com"})&lt;br /&gt;foreach ($mailbox in $mailboxes){$mailbox.emailAddresses -= $mailbox.alias + "@domain2.com"}&lt;br /&gt;foreach ($mailbox in $mailboxes) {$mailbox | set-mailbox}&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-1332182312670407450?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/1332182312670407450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=1332182312670407450' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/1332182312670407450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/1332182312670407450'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/03/exchange-2007-address-management.html' title='Exchange 2007 Address Management'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-6573265645953797739</id><published>2008-03-24T13:35:00.006-04:00</published><updated>2009-03-01T16:11:42.224-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PowerShell'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>PowerShell - Sorting Text</title><content type='html'>Over time I will be posting little uses I find for the &lt;a href="http://www.microsoft.com/technet/scriptcenter/topics/msh/download.mspx"&gt;Windows PowerShell&lt;/a&gt;. The PowerShell can be downloaded from &lt;a href="http://www.microsoft.com/"&gt;Microsoft's website&lt;/a&gt;. I downloaded it the first time to try and solve some VBScript woes that I was having. Later, I found that I needed it to manage Exchange 2007 during my training at &lt;a href="http://www.globalknowledge.com/"&gt;Global Knowledge&lt;/a&gt; (love this place!). Finally, I downloaded an awesome tutorial from &lt;a href="http://blogs.technet.com/chitpro-de/archive/2008/02/28/free-windows-powershell-workbook-server-administration.aspx"&gt;Frank Koch&lt;/a&gt;. This tutorial is a must for anyone new to the PowerShell.&lt;span class="fullpost"&gt; I have been through the Microsoft documentation and user guides, and they are nice but, Frank has put it together in such a way that he steps through the concepts and relates them so that they are much more intuitive and easy to remember.&lt;br /&gt;&lt;br /&gt;We have many servers (about 65) in our enterprise that I use Microsoft's Remote Desktops Console to access. As new servers are added and old ones are removed, the list quickly becomes difficult to navigate because the servers are soon in no order at all. The console doesn't allow for the moving up/down in the list or any other easy way to change them. It is possible to go through and rename each connection with what would be the next server in order, but this too is tedious and difficult. Finally, some sort of XML configuration file - but no, I couldn't find that either. I have found it much easier to just add the connections back in.&lt;br /&gt;&lt;br /&gt;The PowerShell comes into play here. In the MMC it is possible to export the list of servers to a text file. Once exported, I use the Get-Content cmdlet to read the text file in. I then pipe the results into the sort-object cmdlet and it spits out a beautifully sorted list by connection name. Here is the command that I use to accomplish this:&lt;br /&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;get-content 'Remote Desktops.txt' | sort-object&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Now I can just go down the list adding the connections back to the console and I have a nicely sorted list of servers.&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-6573265645953797739?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/6573265645953797739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=6573265645953797739' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/6573265645953797739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/6573265645953797739'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/03/powershell-tip-1-sorting-text.html' title='PowerShell - Sorting Text'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-6072749323465716767</id><published>2008-03-24T13:11:00.008-04:00</published><updated>2008-08-14T10:05:21.598-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UnityExpress'/><category scheme='http://www.blogger.com/atom/ns#' term='Cisco'/><category scheme='http://www.blogger.com/atom/ns#' term='Backup'/><title type='text'>Unity Express Backup</title><content type='html'>In many of our locations, we use a Cisco Unity Express (CUE) router for voice mail processing. This device is a nice piece, both for features and price. The caveat of this is the backup process. Although, I have heard that there is a way to automate the backup of the system, I have not been able to figure this out for myself. So, I must continue to log into the device each month, take it offline, and back it up to an FTP server.&lt;br /&gt;&lt;br /&gt;I set the FTP server with a folder for each of the CUE devices. The server uses a standard account that I have designated specifically for this purpose. To configure the device for the initial backup, go to Administration-&gt;Backup/Restore-&gt;Configuration. Enter the server URL to the FTP server, the User ID and password to be used. The Maximum Revisions field is the number of backups that should be kept on the FTP server.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ke4YiM74LBs/R-fkXiOPGWI/AAAAAAAAAFE/PcPoCXiQTB8/s1600-h/UnityExpress1.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_ke4YiM74LBs/R-fkXiOPGWI/AAAAAAAAAFE/PcPoCXiQTB8/s200/UnityExpress1.JPG" alt="" id="BLOGGER_PHOTO_ID_5181360989287684450" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Once the system is configured for the backup destination, user name, password, and maximum revisions, a backup can be run. When running the backup, the system knows how many backups it has run and automatically assigns a number to the backup. A description is optional, and the categories determine what information is to be backed up. We choose to backup both the configuration (system and application settings) and the data (application data and voice mail messages).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ke4YiM74LBs/R-fluyOPGXI/AAAAAAAAAFM/kr22_g4bDrQ/s1600-h/UnityExpress2.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_ke4YiM74LBs/R-fluyOPGXI/AAAAAAAAAFM/kr22_g4bDrQ/s200/UnityExpress2.JPG" alt="" id="BLOGGER_PHOTO_ID_5181362488231270770" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I have realized that although we pay for the 4 hour response of SmartNet with these systems, if you don't have the configuration and voice mail greetings backed up, you can still endure many, many hours of heartache when trying to restore the system to full functionality.&lt;br /&gt;&lt;br /&gt;Fortunately, we have not yet had to restore from one of these backups, so I can't give any indication as to how well the restoration works and if all data is successfully restored back to its original glory. Hopefully, I will never need to find out!&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-6072749323465716767?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/6072749323465716767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=6072749323465716767' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/6072749323465716767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/6072749323465716767'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/03/unity-express-backup.html' title='Unity Express Backup'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_ke4YiM74LBs/R-fkXiOPGWI/AAAAAAAAAFE/PcPoCXiQTB8/s72-c/UnityExpress1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-283450799909753819</id><published>2008-03-23T18:33:00.007-04:00</published><updated>2009-03-01T16:13:47.886-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='PowerShell'/><category scheme='http://www.blogger.com/atom/ns#' term='Exchange'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='ActriveDirectory'/><title type='text'>Import Contacts from CSV Into Exchange 2007</title><content type='html'>A vendor submitted a list of their employees whose contact information needed to be made available through the Exchange 2007 Global Address List (GAL).  I found a very elegant solution for this from the &lt;a href="http://forums.msexchange.org/How_to_import_outlook_contacts_to_exchange_2007/m_1800437758/tm.htm"&gt;MSExchange.org website&lt;/a&gt;. Although the solution is a great starting point, I needed to modify it. The way it is written makes this a very easy thing to do.&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;The Excel sheet sent to me this time (next time it will probably be different) had additional columns and attributes that were not included in the posted script. The original script assumes that their is not "display name" or full name. So it concatenates the first and last fields to create this to later be used at import. I find it easier to concatenate the strings (if needed) using Excel's concatenate() function. Speaking of the Excel sheet, there needs to be column headers in the sheet. These column headers will be used during the import process. The fields available bring up the point of how Exchange 2007 and Active Directory store and access the properties of a contact object. The mail-enabled contact must be created through Exchange. Then, the Active Directory-specific attributes can be changed.&lt;br /&gt;&lt;br /&gt;All of these objects are created using the Windows Powershell (more info about the Powershell can be found here: &lt;a href="http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx"&gt;http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx&lt;/a&gt;) with the Exchange Snap-in. The following are the commands used:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Import-csv&lt;/li&gt;&lt;li&gt;ForEach-object&lt;/li&gt;&lt;li&gt;New-mailcontact&lt;/li&gt;&lt;li&gt;Set-contact&lt;/li&gt;&lt;li&gt;Set-mailcontact&lt;/li&gt;&lt;/ul&gt;The format of the new-mailcontact command points to a domain controller, and then the attributes/properties of the object are manipulated using a hyphen (-) followed by the name of the property, while the name of the column is designated with a variable.&lt;br /&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;new-mailcontact -domaincontroller dc.domain.com -Name $_."Name Column" -Firstname $_."First Name" -Lastname $_."Last Name"&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The set-contact command works the same way, it just offers different attributes to manipulate.&lt;br /&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;set-contact -domaincontroller dc.domain.com -City $_."Business City" -Company $_."Company"&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The entire script is below:&lt;br /&gt;&lt;br /&gt;&lt;div id='divCode'&gt;&lt;code&gt;Add-Content c:\debug.txt "::Starting Import: ";&lt;br /&gt;&lt;br /&gt;$err = "";&lt;br /&gt;&lt;br /&gt;Import-Csv Import-CSV-Contacts.csv | ForEach-Object{&lt;br /&gt;&lt;br /&gt;New-MailContact -DomainController dc.domain.com -Name $_."displayName" -Firstname $_."FirstName" -Lastname $_."LastName" -ExternalEmailAddress $_."E-mail Address" -OrganizationalUnit "harrynorman.com/Offices/Contacts/Dickenson Gilroy Law Firm" -ErrorAction SilentlyContinue -ErrorVariable +err | Set-Contact -DomainController dc.domain.com -City $_."Business City" -Company $_."Company" -Office $_."Office" -DisplayName $_."displayName" -Fax $_."Business Fax" -Name $_."displayName" -Phone $_."Business Phone" -PostalCode $_."Business Postal Code" -StateOrProvince $_."Business State" -StreetAddress $_."Business Street" -Title $_."Title" -ErrorAction SilentlyContinue -ErrorVariable +err;&lt;br /&gt;&lt;br /&gt;Set-MailContact -Identity $_."displayName" -DomainController dc.domain.com -ErrorAction SilentlyContinue -ErrorVariable +err;&lt;br /&gt;}&lt;br /&gt;Add-Content c:\debug.txt $err;&lt;br /&gt;&lt;/code&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Finally, I created a new custom address list in Exchange to aggregate these addresses. Much like the "query-based distribution groups" in Active Directory, a query of the company can be used to create the custom address list.  As new contacts are added/removed the address list should be updated accordingly.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Side Note:&lt;/span&gt; A very nice feature in Exchange 2007 Outlook Web Access is the way the system automatically senses an address field for a contact. It provides a "Map this address..." link that then takes the user to Microsoft's map engine displaying the map for the user in a new window.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-283450799909753819?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/283450799909753819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=283450799909753819' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/283450799909753819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/283450799909753819'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2008/03/import-csv-contacts-exchange-2007.html' title='Import Contacts from CSV Into Exchange 2007'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-3827721547923456699</id><published>2007-02-02T11:41:00.006-05:00</published><updated>2009-03-01T11:09:36.323-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='Virus'/><category scheme='http://www.blogger.com/atom/ns#' term='Symantec'/><category scheme='http://www.blogger.com/atom/ns#' term='Antivirus'/><title type='text'>RPCSS.EXE: Symantec Corporate Antivirus Propogating Viruses</title><content type='html'>According to some information I have found, a few years ago there was a virus that was going around that disguised itself as a running process. This process is named rpcss.exe. It can be seen running in the Windows Task Manager. I just recently dealt with a situation where a network using Symantec Antivirus Corporate Edition 10.0.2 for their antivirus needs, realized that this process was running on several machines.&lt;span class="fullpost"&gt; &lt;br /&gt;Some of the initial symptoms were that administrative shares were disappearing on the servers. This in-turn makes it impossible for clients to utilize network services such as file shares and shared printers. After some investigation on the Internet for this process and these symptoms not very much came back. A couple of the web sites had information about how this process was necessary for Windows to run properly. The explanation was that this was the Remote Procedure Call process, which is a legitimate process. So we recreated all of the Administrative shares, but once an administrator logged into a server that was designated as an update server for Symantec clients all of the administrative shares disappeared again. What?&lt;br /&gt;The next week was spent with no one logging into servers and a lot of speculation about group policy conflicts and profiles. Unfortunately this was not the case. The next week there was still no resolution when suddenly all of the servers starting losing their shares again. As I hurried to add the shares back in, the system was removing them faster than I could add them. Finally we gave up and just accepted temporary defeat. We contacted an associate of ours that is a Microsoft partner and he spend several hours working with Microsoft to find out what the problem was. Microsoft actually had to do some double-checking of the process to verify that it wasn't a legitimate process. Turns out it isn't. The actual file is rpcss.dll - not .exe!&lt;br /&gt;All of the symptoms that we have found include&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Registry entries for Microsoft Web Live and rpcss.exe&lt;/li&gt;&lt;li&gt;Hidden operating system file in the System32 folder&lt;/li&gt;&lt;li&gt;Symantec Corporate Antivirus 10.0&lt;br /&gt;&lt;/li&gt;&lt;li&gt;MSConfig entry to run at startup&lt;/li&gt;&lt;/ul&gt;Seems that this virus is propagating itself through the Symantec Update Engine. This means that each time the server and/or the client updates itself, it is actually downloading the virus, not new updates. One way to check this is to see if the antivirus software has updated itself recently, if not try to update it and if that doesn't work, better start looking at the running processes.&lt;br /&gt;To clean the virus, if Symantec is installed stop and disable all of the Symantec services. Then kill the running process through the Windows Task Manager. Search the registry for rpcss.exe and delete all instances of this from the registry (use at your own risk!). Finally, find the file by searching hidden files and protected operating system files and delete it.&lt;br /&gt;After rebooting your machine should be clean, uninstall Symantec and get something else. Unfortunately, Symantec is not admitting that this is a problem and since it only affects this version of their product and no other manufacturer's product, nothing has been written up about it. Microsoft said that it may be a key logger (change your passwords if you have been exposed to this virus) and that it sends that information out to the Internet somewhere - great.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-3827721547923456699?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/3827721547923456699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=3827721547923456699' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/3827721547923456699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/3827721547923456699'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2007/02/rpcssexe-what.html' title='RPCSS.EXE: Symantec Corporate Antivirus Propogating Viruses'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18241657.post-8965939905652022408</id><published>2006-12-12T23:11:00.005-05:00</published><updated>2009-03-01T11:09:51.727-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GroupPolicy'/><category scheme='http://www.blogger.com/atom/ns#' term='System Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='ActriveDirectory'/><title type='text'>Restricted Groups with Windows Server 2003 Group Policy</title><content type='html'>Obviously, someone somewhere needed the ability to add a group of domain users (other than the Domain Admins) to the local administrators group. I was tasked with the challenge of using Group Policy to accomplish this very goal.&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;I read a ton of material on the subject, including:&lt;br /&gt;Microsoft – &lt;a href="http://support.microsoft.com/kb/279301"&gt;http://support.microsoft.com/kb/279301&lt;/a&gt; &lt;br /&gt;Computer Performance (I love this site) - &lt;a href="http://www.computerperformance.co.uk/w2k3/gp/group_policy_security_restricted_group.htm"&gt;http://www.computerperformance.co.uk/w2k3/gp/group_policy_security_restricted_group.htm&lt;/a&gt;&lt;br /&gt;Windows Server 2003 Group Policy book - &lt;a href="http://www.amazon.com/Microsoft-Windows-Group-Policy-Pro-One-Offs/dp/0735622175/sr=8-1/qid=1165976531/ref=pd_bbs_sr_1/002-8424295-6146452?ie=UTF8&amp;amp;s=books"&gt;http://www.amazon.com/Microsoft-Windows-Group-Policy-Pro-One-Offs/dp/0735622175/sr=8-1/qid=1165976531/ref=pd_bbs_sr_1/002-8424295-6146452?ie=UTF8&amp;amp;s=books&lt;/a&gt;&lt;br /&gt;Windows Security - &lt;a href="http://www.windowsecurity.com/articles/Increasing-Security-Limited-User-Accounts-Restricted-Groups.html"&gt;http://www.windowsecurity.com/articles/Increasing-Security-Limited-User-Accounts-Restricted-Groups.html&lt;/a&gt;&lt;br /&gt;Microsoft.Public.Windows.msi Google Group (I found this as a link in the Windows Security site above) - &lt;a href="http://groups-beta.google.com/group/microsoft.public.windows.msi/browse_thread/thread/3bfaf8d52a0f8650/2a6c9d07514c3d18?q=group+policy+local+administrator&amp;amp;_done=%2Fgroups%3Fq%3Dgroup+policy+local+administrator%26start%3D20%26hl%3Den%26lr%3D%26&amp;amp;_doneTitle=Back+to+Search&amp;amp;&amp;amp;d#2a6c9d07514c3d18"&gt;http://groups-beta.google.com/group/microsoft.public.windows.msi/browse_thread/thread/3bfaf8d52a0f8650/2a6c9d07514c3d18?q=group+policy+local+administrator&amp;amp;_done=%2Fgroups%3Fq%3Dgroup+policy+local+administrator%26start%3D20%26hl%3Den%26lr%3D%26&amp;amp;_doneTitle=Back+to+Search&amp;amp;&amp;amp;d#2a6c9d07514c3d18&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The last one is the one that finally provided the most complete instructions for how to add a security group from Active Directory to the Local Administrators of a domain member server or workstation. Hopefully, this will serve as a reminder of how to do this correctly for me and help someone that is having same problem I was. Incidentally, I have done this for a smaller group of machines using security filtering and placed them into the Power Users group.&lt;br /&gt;I am assuming no liability for anything that is attempted by the reader as it concerns to anything that I have written. I am assuming many things and still more such as, domain admin, &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=0A6D4C24-8CBD-4B35-9272-DD3CBFC81887&amp;amp;displaylang=en"&gt;GPMC&lt;/a&gt;, etc.&lt;br /&gt;&lt;br /&gt;Instructions Begin Here:&lt;br /&gt;1.       From a Windows Server 2003 member server or a Windows 2000/XP workstation, open the GPMC. Right-click on the policy and click edit.&lt;br /&gt;2.       Navigate to Computer Settings\Windows Settings\Security Settings\Restricted Groups.&lt;br /&gt;3.       Right-Click the Restricted Groups icon and select Add Group…&lt;br /&gt;4.       When the dialog box opens, select Browse, change the “Location” by clicking the “Locations” button and select the name of the local machine and Click OK&lt;br /&gt;5.       Choose the appropriate local group that you are trying to add members to (such as administrators or power users) and click OK&lt;br /&gt;6.       Click OK again.&lt;br /&gt;7.       When the next dialog box appears it will contain 2 sections name ‘Members’ and ‘Members Of’&lt;br /&gt;8.       Click on the Add button next to ‘Members’ and select the group from the domain that should be the local administrators&lt;br /&gt;9.       Click OK and OK again.&lt;br /&gt;&lt;br /&gt;When the policy is processed (depending on your environment) and the machine is rebooted the group should be members of the local administrators group.&lt;br /&gt;The domain group will appear in Computer Management for the client under Groups-&gt;Administrators.&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18241657-8965939905652022408?l=www.thedailyadmin.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.thedailyadmin.com/feeds/8965939905652022408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18241657&amp;postID=8965939905652022408' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/8965939905652022408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18241657/posts/default/8965939905652022408'/><link rel='alternate' type='text/html' href='http://www.thedailyadmin.com/2006/12/restricted-groups-with-windows-server.html' title='Restricted Groups with Windows Server 2003 Group Policy'/><author><name>Brian Bohanon</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-cd6_qc689hw/TteXi9nuD7I/AAAAAAAAAnc/Ep0WStWll6w/s220/DSCN0415-1.JPG'/></author><thr:total>1</thr:total></entry></feed>
