<?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-21640185</id><updated>2011-08-22T10:27:36.512-05:00</updated><category term='image'/><category term='mdt'/><category term='bdd'/><category term='imaging'/><category term='microsoft deployment'/><title type='text'>Life of a techno-guru</title><subtitle type='html'>My life of learning various things about technology including network administration, development, and 3D design</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>70</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-21640185.post-3133695390756705704</id><published>2009-05-10T10:39:00.001-05:00</published><updated>2009-05-10T10:40:24.184-05:00</updated><title type='text'>New Blog</title><content type='html'>Hello! I know I don't have any readers, but if any of you are interested, I have a new blog:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://trevorsullivan.wordpress.com"&gt;http://trevorsullivan.wordpress.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Cheers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-3133695390756705704?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/3133695390756705704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=3133695390756705704' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/3133695390756705704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/3133695390756705704'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2009/05/new-blog.html' title='New Blog'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-5004286833280035625</id><published>2009-03-25T09:07:00.003-05:00</published><updated>2009-03-25T09:11:16.955-05:00</updated><title type='text'>Parsing Windows 2003 Print Logs</title><content type='html'>Here is a Powershell script that parses event log ID 10 on a Windows 2003 print server. Normally, you'll have a message that looks something like this:&lt;br /&gt;&lt;br /&gt;Document 172, C:\Documents and Settings\Trevor\W5QZ4XUR\MyFinanceReport.pdf owned by Trevor was printed on 4thFloorHpPrinter via port IP_10.1.1.50.  Size in bytes: 168123; pages printed: 2&lt;br /&gt;&lt;br /&gt;Now, how do you get that information into a usable format? The answer lies below:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;#################################################################################&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;#                                                                                #&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;#    Author: Trevor Sullivan                                                        #&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;#                                                                                #&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;#      Date: February 10th, 2009                                                    #&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;#                                                                                #&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;#  Purpose: This script is meant for running against a Windows 2003 event log.    #&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;#        The verbage for the print log entries has changed for Windows Vista.    #&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;#                                                                                 #&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;#################################################################################&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Function GetPrintEntriesFromTextFile($tFileName)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    Get-Content $tFileName&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Function GetPrintEntriesFromServer()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $PrintEntries = Get-EventLog -LogName System | Where-Object { $_.EventId -eq 10 -and $_.Source -eq "Print" }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    return $PrintEntries&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;# Parses username from a Windows 2003 Print log message&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Function GetUserName($PrintEntry)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    If ($PrintEntry -eq "" -or $PrintEntry -eq $null) { return $null }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $rxUserName = [regex]"owned by ([0-9a-zA-Z]{7})"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $rxUserName = [regex]"owned by ([0-9a-zA-Z]{1,}) was"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $rxMatches = $rxUserName.Match($PrintEntry)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    return $rxMatches.Groups[1].Value&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Function GetPrinterName($PrintEntry)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    If ($PrintEntry -eq "" -or $PrintEntry -eq $null) { return $null }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    #Write-Host "Parsing printer name"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $rxPrinterName = [regex]"printed on ([0-9a-zA-Z-_\s]{5,}) via"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $rxMatches = $rxPrinterName.Match($PrintEntry)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    return $rxMatches.Groups[1].Value&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Function GetPrintSize($PrintEntry)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    If ($PrintEntry -eq "" -or $PrintEntry -eq $null) { return $null }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    #Write-Host "Getting print size"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $rxPrintSize = [regex]"Size in bytes: ([0-9]+);"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $rxMatches = $rxPrintSize.Match($PrintEntry)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    return $rxMatches.Groups[1].Value&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Function GetPageCount($PrintEntry)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    If ($PrintEntry -eq "" -or $PrintEntry -eq $null) { return $null }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    #Write-Host "Getting page count"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $rxPageCount = [regex]"pages printed\: ([0-9]+)"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $rxMatches = $rxPageCount.Match($PrintEntry)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    return $rxMatches.Groups[1].Value&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Function GetDocumentName($PrintEntry)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    If ($PrintEntry -eq "" -or $PrintEntry -eq $null) { return $null }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    #Write-Host "Getting print size"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $rxDocumentName = [regex]", ([a-zA-Z-_:/\[#\]\?\\\=\d\.\s\(\)&amp;amp;-,]{1,}) owned by"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $rxMatches = $rxDocumentName.Match($PrintEntry)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    return $rxMatches.Groups[1].Value&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;# Retrieves user's full name from AD&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Function GetUserFullName($UserId)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    if ($UserId -gt "")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $DirectorySearcher = New-Object System.DirectoryServices.DirectorySearcher&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $LdapFilter = "(&amp;amp;(objectClass=user)(samAccountName=${UserId}))"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        #Write-Host "Filter is: ${LdapFilter}"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $DirectorySearcher.Filter = $LdapFilter&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $UserEntry = [adsi]"$($DirectorySearcher.FindOne().Path)"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        #Write-Host $UserEntry.displayName&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        return $UserEntry.displayName&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    return&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Function CreatePrintJob()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $PrintJob = New-Object PsObject&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    Add-Member -Force -InputObject $PrintJob -MemberType NoteProperty -Name PageCount -Value $null&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    Add-Member -Force -InputObject $PrintJob -MemberType NoteProperty -Name UserName -Value $null&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    Add-Member -Force -InputObject $PrintJob -MemberType NoteProperty -Name DocumentName -Value $null&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    Add-Member -Force -InputObject $PrintJob -MemberType NoteProperty -Name Size -Value $null&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    Add-Member -Force -InputObject $PrintJob -MemberType NoteProperty -Name Printer -Value $null&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    Add-Member -Force -InputObject $PrintJob -MemberType NoteProperty -Name Time -Value $null&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    Add-Member -Force -InputObject $PrintJob -MemberType NoteProperty -Name UserFullName -Value $null&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    return $PrintJob&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Function ParsePrintEntry($PrintEntry)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $NewPrintJob = CreatePrintJob&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    if ($PrintEntry.GetType() -eq [System.String])&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $NewPrintJob.PageCount = GetPageCount $PrintEntry&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $NewPrintJob.UserName = GetUserName $PrintEntry&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $NewPrintJob.DocumentName = GetDocumentName $PrintEntry&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $NewPrintJob.Size = GetPrintSize $PrintEntry&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $NewPrintJob.Printer = GetPrinterName $PrintEntry&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $NewPrintJob.UserFullName = GetUserFullName $NewPrintJob.UserName&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    elseif ($PrintEntry.GetType() -eq [System.Diagnostics.EventLogEntry])&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $NewPrintJob.PageCount = GetPageCount $PrintEntry.Message&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $NewPrintJob.UserName = GetUserName $PrintEntry.Message&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $NewPrintJob.DocumentName = GetDocumentName $PrintEntry.Message&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $NewPrintJob.Size = GetPrintSize $PrintEntry.Message&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $NewPrintJob.Printer = GetPrinterName $PrintEntry.Message&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $NewPrintJob.Time = $PrintEntry.Time&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $NewPrintJob.UserFullName = GetUserFullName $NewPrintJob.UserName&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    return $NewPrintJob&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Function Main()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    #$PrintEntries = GetPrintEntriesFromServer&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $PrintEntries = GetPrintEntriesFromTextFile "c:\Users\i081225\Desktop\Powershell Scripts\Print Log Parser\PrintLog.txt"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $Global:ParsedEntries = @{}; $i = 0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    ForEach ($PrintEntry in $PrintEntries)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $ParsedEntries.Add($i, $(ParsePrintEntry $PrintEntry))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        #$ParsedEntries += (ParsePrintEntry $PrintEntry)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $i++&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        if ($i % 100 -eq 0)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        { Write-Host "Processed $i records" }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    WriteToExcel $ParsedEntries&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Function WriteToExcel($tEntries)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    # Load Excel interop assembly&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    [Void] [Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Interop.Excel")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    # Create Excel application, workbook, and worksheet objects&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $Excel = New-Object Microsoft.Office.Interop.Excel.ApplicationClass&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $Workbook = $Excel.Workbooks.Add()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $Worksheet = $Workbook.Worksheets.Add()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    # Write Excel worksheet headers&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $Worksheet.Cells.Item(1, 1).Value2 = "Username"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $Worksheet.Cells.Item(1, 2).Value2 = "Full Name"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $Worksheet.Cells.Item(1, 3).Value2 = "Time"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $Worksheet.Cells.Item(1, 4).Value2 = "Page Count"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $Worksheet.Cells.Item(1, 5).Value2 = "Printer"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $Worksheet.Cells.Item(1, 6).Value2 = "Size (bytes)"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $Worksheet.Cells.Item(1, 7).Value2 = "Document Name"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    # End writing Excel worksheet headers    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    # Iterate over each print entry&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $row = 2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    ForEach ($key in $tEntries.Keys)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $Worksheet.Cells.Item($row, 1).Value2 = $tEntries[$key].UserName&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $Worksheet.Cells.Item($row, 2).Value2 = $tEntries[$key].UserFullName&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $Worksheet.Cells.Item($row, 3).Value2 = $tEntries[$key].Time&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $Worksheet.Cells.Item($row, 4).Value2 = $tEntries[$key].PageCount&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $Worksheet.Cells.Item($row, 5).Value2 = $tEntries[$key].Printer&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $Worksheet.Cells.Item($row, 6).Value2 = $tEntries[$key].Size&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $Worksheet.Cells.Item($row, 7).Value2 = $tEntries[$key].DocumentName&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        $row++&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    # Do some formatting&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    # AutoFit the columns&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    [Void] $Excel.ActiveCell.CurrentRegion.Columns.AutoFit()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    # Add table styling and auto-filtering&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    [Void] $Excel.ActiveCell.CurrentRegion.Select()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $ListObject = $Excel.ActiveSheet.ListObjects.Add([Microsoft.Office.Interop.Excel.XlListObjectSourceType]::xlSrcRange, $Excel.ActiveCell.CurrentRegion, $null ,[Microsoft.Office.Interop.Excel.XlYesNoGuess]::xlYes)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $ListObject.Name = "TableData"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $ListObject.TableStyle = "TableStyleLight9"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    # Show the Excel window after writing data to spreadsheet&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    $Excel.Visible = $true&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;Main&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I hope this helps someone out there :)&lt;br /&gt;&lt;br /&gt;-Trevor Sullivan&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-5004286833280035625?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/5004286833280035625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=5004286833280035625' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/5004286833280035625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/5004286833280035625'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2009/03/parsing-windows-2003-print-logs.html' title='Parsing Windows 2003 Print Logs'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-1802970875340919212</id><published>2009-02-16T09:37:00.003-06:00</published><updated>2009-02-16T09:39:48.240-06:00</updated><title type='text'>Enable AutoProvision Policy with Powershell</title><content type='html'>Hello,&lt;br /&gt;&lt;br /&gt;Are you working with Out of Band Management (OOB) in ConfigMgr / SCCM? Instead of waiting for SCCM policy to apply to a client, would you like to force the auto-provisioning policy to apply on-demand? If so, then you've come to the right place. Here is some Powershell code that will enable auto-provisioning on an SCCM client.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$OobSettings = [wmiclass]”root\ccm\policy\machine\actualconfig:CCM_OutOfBandManagementSettings”&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$OobSettingsInstance = $OobSettings.CreateInstance()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$OobSettingsInstance.AutoProvision = $True&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$OobSettingsInstance.SiteSettingsKey = 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$OobSettingsInstance.Put()&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-Trevor Sullivan&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-1802970875340919212?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/1802970875340919212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=1802970875340919212' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/1802970875340919212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/1802970875340919212'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2009/02/enable-autoprovision-policy-with.html' title='Enable AutoProvision Policy with Powershell'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-7708229994444874090</id><published>2009-02-11T07:31:00.001-06:00</published><updated>2009-02-11T07:33:20.502-06:00</updated><title type='text'>Powershell - Compare Active Directory Groups</title><content type='html'>Here is a Powershell script that compares two Active Directory groups, and determines the differences between the account membership of them.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;$DN1 = "CN=Group1,OU=Groups,OU=Accounts,DC=subdomain,DC=mydomain,DC=local"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$DN2 = "CN=Group2,OU=Groups,OU=Accounts,DC=subdomain,DC=mydomain,DC=local"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$Group1 = [adsi]"LDAP://$DN1"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$Group2 = [adsi]"LDAP://$DN2"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;ForEach ($User in $Group1.member)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    if ($Group2.member -contains $User)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        Write-Host "$User belongs to $($Group2.cn)"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    else&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        Write-Host "$User does not belong to $($Group2.cn)"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;-Trevor Sullivan&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-7708229994444874090?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/7708229994444874090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=7708229994444874090' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/7708229994444874090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/7708229994444874090'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2009/02/powershell-compare-active-directory.html' title='Powershell - Compare Active Directory Groups'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-504297353206990541</id><published>2009-02-10T13:47:00.003-06:00</published><updated>2009-02-10T14:02:42.985-06:00</updated><title type='text'>Powershell - Domain Distinguished Name</title><content type='html'>Hello,&lt;br /&gt;&lt;br /&gt;The two lines below allow you to use the LDAP "RootDSE" object to dynamically access the root of an Active Directory (AD) domain, from a domain member. The &lt;span style="font-style: italic;"&gt;defaultNamingContext&lt;/span&gt; attribute on the RootDSE object contains the full distinguished name of the AD domain.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;$RootDSE = [adsi]"LDAP://RootDSE"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;$DomainRoot = [adsi]"$($RootDSE.DefaultNamingContext)"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now that you have a reference to the domain root in the $DomainRoot variable, you can perform any operations you need to from that point. For example, to enumerate the children of the domain root, simply type the following at your interactive Powershell command prompt:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;$DomainRoot.psbase.Children&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;-Trevor Sullivan&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-504297353206990541?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/504297353206990541/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=504297353206990541' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/504297353206990541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/504297353206990541'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2009/02/powershell-domain-distinguished-name.html' title='Powershell - Domain Distinguished Name'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-6477321755577879655</id><published>2009-01-16T08:14:00.001-06:00</published><updated>2009-01-16T08:14:38.332-06:00</updated><title type='text'>Office 2007, OpenXML and Powershell</title><content type='html'>Here are some tools to work with Office 2007 documents from Windows Powershell:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.codeplex.com/PowerTools"&gt;http://www.codeplex.com/PowerTools&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-6477321755577879655?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/6477321755577879655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=6477321755577879655' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/6477321755577879655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/6477321755577879655'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2009/01/office-2007-openxml-and-powershell.html' title='Office 2007, OpenXML and Powershell'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-5795706606032549815</id><published>2009-01-10T10:51:00.002-06:00</published><updated>2009-01-10T10:55:01.940-06:00</updated><title type='text'>An open letter to Criterion Games</title><content type='html'>&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face  {font-family:Verdana;  panose-1:2 11 6 4 3 5 4 4 2 4;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal  {margin:0in;  margin-bottom:.0001pt;  font-size:12.0pt;  font-family:"Times New Roman";} a:link, span.MsoHyperlink  {color:blue;  text-decoration:underline;} a:visited, span.MsoHyperlinkFollowed  {color:purple;  text-decoration:underline;} span.EmailStyle17  {mso-style-type:personal-compose;  font-family:Arial;  color:windowtext;} @page Section1  {size:8.5in 11.0in;  margin:1.0in 1.25in 1.0in 1.25in;} div.Section1  {page:Section1;} --&gt; &lt;/style&gt;&lt;div class="Section1"&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;span style="font-size: 10pt; font-family: Verdana;"&gt;I e-mailed this brief letter to Criterion Games today. If you have a PS3, and/or Xbox 360, and/or gaming PC (being released in February 2009), you should definitely purchase Burnout Paradise. It's one of the best games I have ever played, and enjoy many aspects of the game's design. I hope that everyone else, that has already bought and played this game, has gotten as much enjoyment from it as I have.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;span style="font-size: 10pt; font-family: Verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;span style="font-size: 10pt; font-family: Verdana;"&gt;------------------&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;span style="font-size: 10pt; font-family: Verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;span style="font-size: 10pt; font-family: Verdana;"&gt;Hello  Criterion,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;span style="font-size: 10pt; font-family: Verdana;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;span style="font-size: 10pt; font-family: Verdana;"&gt;I just wanted to thank you guys  for making a fabulous game. These days, it’s hard to find games that provide a  real return on investment, like Burnout Paradise (BP) does. BP achieves  outstanding success in pretty much every area of game design. It has  &lt;u&gt;breathtaking graphics&lt;/u&gt; (&lt;i&gt;&lt;span style="font-style: italic;"&gt;despite being  only 720p&lt;/span&gt;&lt;/i&gt;), it has an &lt;u&gt;incredible soundtrack&lt;/u&gt; (&lt;i&gt;&lt;span style="font-style: italic;"&gt;I love the classical music, and the electronic  remixes of other songs&lt;/span&gt;&lt;/i&gt;), it has phenomenal multiplayer integration  (&lt;i&gt;&lt;span style="font-style: italic;"&gt;the seamlessness makes it &lt;u&gt;quite&lt;/u&gt;  appealing&lt;/span&gt;&lt;/i&gt;), it has awesome-looking slow-motion crashes, and the  &lt;u&gt;continual&lt;/u&gt; support of &lt;b&gt;&lt;span style="font-weight: bold;"&gt;new, free  content&lt;/span&gt;&lt;/b&gt; has blown me away. Keep all of this up in future games, and  you will continue to be exceedingly successful and  respected.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;span style="font-size: 10pt; font-family: Verdana;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;span style="font-size: 10pt; font-family: Verdana;"&gt;---&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;span style="font-size: 10pt; font-family: Verdana;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;span style="font-size: 10pt; font-family: Verdana;"&gt;You know, of all the great things  I have to say about Burnout Paradise, it’s really only lacking one major thing …  instant replays. I can’t really think of anything else that’s missing, but  having the ability to save instant replays of crashes, and races, would make the  game all that much better.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;span style="font-size: 10pt; font-family: Verdana;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;span style="font-size: 10pt; font-family: Verdana;"&gt;---&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style="font-size: 10pt; font-family: Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;span style="font-size: 10pt; font-family: Verdana;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;span style="font-size: 10pt; font-family: Verdana;"&gt;Thanks for listening, and for  making one of the best games I’ve seen on the PS3. Your hard work, focus on the  customer, and excellent designers and developers, have made Burnout Paradise a  shining star amongst a heaping pile of failed attempts. Keep up the good work,  Criterion.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;span style="font-size: 10pt; font-family: Verdana;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;span style="font-size: 10pt; font-family: Verdana;"&gt;Sincerely,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;span style="font-size: 10pt; font-family: Verdana;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;span style="font-size: 10pt; font-family: Verdana;"&gt;Trevor  Sullivan&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-5795706606032549815?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/5795706606032549815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=5795706606032549815' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/5795706606032549815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/5795706606032549815'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2009/01/open-letter-to-criterion-games.html' title='An open letter to Criterion Games'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-2312439585066355145</id><published>2009-01-09T20:52:00.002-06:00</published><updated>2009-01-09T20:53:42.540-06:00</updated><title type='text'>Windows 7 RSAT</title><content type='html'>Microsoft has released a beta version of the Remote Server Administration Tools (RSAT) for the Windows 7 Beta Build 7000.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://social.technet.microsoft.com/Forums/en-US/w7itproappcompat/thread/d9fb1643-0094-4cfe-8cb5-58f9aa0814ab"&gt;http://social.technet.microsoft.com/Forums/en-US/w7itproappcompat/thread/d9fb1643-0094-4cfe-8cb5-58f9aa0814ab&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-------------------------------------&lt;br /&gt;&lt;p&gt;Where to Install:&lt;/p&gt; &lt;p&gt;• Microsoft Remote Server Administration Tools for Windows 7 Beta (x86): &lt;a href="http://download.microsoft.com/download/A/D/4/AD4D3903-E06D-456D-AED4-D53895D2C1A9/Windows6.1-KB958830-x86.msu"&gt;http://download.microsoft.com/download/A/D/4/AD4D3903-E06D-456D-AED4-D53895D2C1A9/Windows6.1-KB958830-x86.msu&lt;/a&gt;&lt;/p&gt; &lt;p&gt;• Microsoft Remote Server Administration Tools for Windows 7 Beta (x64): &lt;a href="http://download.microsoft.com/download/A/D/4/AD4D3903-E06D-456D-AED4-D53895D2C1A9/Windows6.1-KB958830-x64.msu"&gt;http://download.microsoft.com/download/A/D/4/AD4D3903-E06D-456D-AED4-D53895D2C1A9/Windows6.1-KB958830-x64.msu&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The main download page is here &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=82516c35-c7dc-4652-b2ea-2df99ea83dbb&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=82516c35-c7dc-4652-b2ea-2df99ea83dbb&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt; &lt;p&gt;RSAT Client is available to all customers as part of the supplemental Microsoft Software License Terms to Windows 7 licenses. &lt;/p&gt; &lt;p&gt;What Is Included in RSAT?&lt;br /&gt;This is the list of Windows Server 2008 administration tools which are included in Win7 RSAT Client:&lt;/p&gt; &lt;p&gt;Server Administration Tools:&lt;br /&gt;• Server Manager&lt;/p&gt; &lt;p&gt;Role Administration Tools:&lt;br /&gt;• Active Directory Certificate Services (AD CS) Tools&lt;br /&gt;• Active Directory Domain Services (AD DS) Tools&lt;br /&gt;• Active Directory Lightweight Directory Services (AD LDS) Tools&lt;br /&gt;• DHCP Server Tools&lt;br /&gt;• DNS Server Tools&lt;br /&gt;• File Services Tools&lt;br /&gt;• Hyper-V Tools&lt;br /&gt;• Terminal Services Tools&lt;/p&gt; Feature Administration Tools:&lt;br /&gt;• BitLocker Password Recovery Viewer&lt;br /&gt;• Failover Clustering Tools&lt;br /&gt;• Group Policy Management Tools&lt;br /&gt;• Network Load Balancing Tools&lt;br /&gt;• SMTP Server Tools&lt;br /&gt;• Storage Explorer Tools&lt;br /&gt;• Storage Manager for SANs Tools&lt;br /&gt;• Windows System Resource Manager Tools&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-2312439585066355145?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/2312439585066355145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=2312439585066355145' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/2312439585066355145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/2312439585066355145'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2009/01/windows-7-rsat.html' title='Windows 7 RSAT'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-6997800195100060924</id><published>2008-12-04T10:05:00.000-06:00</published><updated>2008-12-04T10:06:27.344-06:00</updated><title type='text'>Forcing a Task Sequence to run in ConfigMgr</title><content type='html'>This is just for my own documentation:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=4207468&amp;amp;SiteID=17&amp;amp;mode=1"&gt;http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=4207468&amp;amp;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;SiteID&lt;/span&gt;=17&amp;amp;mode=1&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-6997800195100060924?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/6997800195100060924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=6997800195100060924' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/6997800195100060924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/6997800195100060924'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2008/12/forcing-task-sequence-to-run-in.html' title='Forcing a Task Sequence to run in ConfigMgr'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-507959319682663877</id><published>2008-09-25T15:51:00.005-05:00</published><updated>2008-09-25T15:57:59.169-05:00</updated><title type='text'>Retrieving a list of SCCM SP1 compatible vPro /AMT clients</title><content type='html'>If you're running System Center Configuration Manager 2007 SP1 and you have the ConfigMgr client deployed, and you have Intel vPro clients, you may want to know how many clients you have. Here is a quick script that you can use to get a list of Intel vPro clients that are running AMT firmware version 3.2.1 or greater, and are natively supported by ConfigMgr OOB (out-of-band) management. Replace the &lt;span style="font-weight: bold;"&gt;SiteServer&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;SiteCode&lt;/span&gt; variables, and you'll be good to go!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;Option Explicit &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;dim SiteServer, SiteCode, AMTQuery, svcs, AMTAgent, AMTAgents&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SiteServer = "SCCMServer"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;SiteCode = "LAB"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;AMTQuery = "select * from SMS_G_System_AMT_Agent " &amp;amp; _&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            "join SMS_G_System_Computer_System on SMS_G_System_AMT_Agent.ResourceID = SMS_G_System_Computer_System.ResourceID " &amp;amp; _&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            "where AMT not like '3.0%' " &amp;amp; _&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            "and AMT not like '2%' " &amp;amp; _&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            "and AMT not like '1%' "&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;set svcs = GetObject("winmgmts:\\" &amp;amp; SiteServer &amp;amp; "\root\sms\site_" &amp;amp; SiteCode)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;set AMTAgents = svcs.ExecQuery(AMTQuery)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;for each AMTAgent in AMTAgents&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    wscript.echo AMTAgent.SMS_G_System_Computer_System.Name &amp;amp; vbtab &amp;amp; AMTAgent.SMS_G_System_Computer_System.Model &amp;amp; vbtab &amp;amp; AMTAgent.SMS_G_System_AMT_Agent.AMT&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;next&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;wscript.echo vbcrlf &amp;amp; vbcrlf &amp;amp; "Total count of ConfigMgr SP1 compatible vPro clients: " &amp;amp; AMTAgents.Count&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/21640185-507959319682663877?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/507959319682663877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=507959319682663877' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/507959319682663877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/507959319682663877'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2008/09/retrieving-list-of-sccm-sp1-compatible.html' title='Retrieving a list of SCCM SP1 compatible vPro /AMT clients'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-305318244313412436</id><published>2008-09-10T09:49:00.002-05:00</published><updated>2008-09-10T09:59:31.066-05:00</updated><title type='text'>Testing OSD in Configuration Manager (ConfigMgr) 2007</title><content type='html'>If you are developing and testing your ConfigMgr 2007 OSD process, and you're running into a message saying "&lt;span id="_ctl0_MainContent_PostFlatView"&gt;&lt;span&gt;&lt;span style="font-style: italic;"&gt;There are no task sequences available for this computer&lt;/span&gt;," then you might not want to have to completely reboot WinPE to restart the process.&lt;br /&gt;&lt;br /&gt;After you fix your task sequence / policy problem, you can restart the task sequence engine / wizard without exiting WinPE. Here's how:&lt;br /&gt;&lt;br /&gt;1. Enable the F8 command prompt in your Boot Image&lt;br /&gt;2. When the wizard fails in PE, press F8 to invoke the command prompt&lt;br /&gt;3. Run task manager by typing "taskmgr"&lt;br /&gt;4. Kill the process named "TsmBootStrap.exe"&lt;br /&gt;5. Start "TsBootShell.exe" (&lt;span style="font-style: italic;"&gt;note the name difference&lt;/span&gt;) from the "x:\sms\bin\i386" folder&lt;br /&gt;&lt;br /&gt;The task sequence wizard should restart!&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;NOTE: Do not kill the main instance of &lt;/span&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;TsBootShell.exe&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;! This will disable WinPE and force you to reboot into it!&lt;/span&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/21640185-305318244313412436?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/305318244313412436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=305318244313412436' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/305318244313412436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/305318244313412436'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2008/09/testing-osd-in-configuration-manager.html' title='Testing OSD in Configuration Manager (ConfigMgr) 2007'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-7059831746217733681</id><published>2008-07-08T14:42:00.000-05:00</published><updated>2008-07-08T14:45:12.524-05:00</updated><title type='text'>Deleting Disabled Configuration Manager Drivers</title><content type='html'>Hey guys, I thought I'd share a quick script I wrote to delete drivers that I had disabled in the System Center Configuration Manager 2007 (ConfigMgr) console. See, you can disable multiple drivers through the ConfigMgr console, but you can't delete multiple driver ojects, which is pretty frustrating, if you ask me. Simply update the "xxx" with your site code, and execute the script on your SCCM site server!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;namespace = "root\cimv2\site_xxx"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;qry = "select * from sms_driver where IsEnabled = 'false'"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;set sms = GetObject("winmgmts:" &amp;amp; namespace)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;set drivers = sms.ExecQuery(qry)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;for each driver in drivers&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;       call driver.Delete_()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;next&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I hope this helps!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-7059831746217733681?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/7059831746217733681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=7059831746217733681' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/7059831746217733681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/7059831746217733681'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2008/07/deleting-disabled-configuration-manager.html' title='Deleting Disabled Configuration Manager Drivers'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-1824829329688579792</id><published>2008-06-26T08:32:00.002-05:00</published><updated>2008-06-26T08:38:36.996-05:00</updated><title type='text'>Microsoft Application Virtualization (Softgrid) 4.5 RC Issue</title><content type='html'>I was recently getting an error message on a new AppVirt 4.5 Release Candidate installation stating&lt;br /&gt;&lt;br /&gt;"&lt;span style="font-style: italic;"&gt;The SoftGrid Client could not load Notepad++ 4.7.5.0.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The operation failed because you do not have sufficient permissions to stream from a file. Please report the following error code to your System Administrator.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Error code: 450260-14901604-0000180B&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;Thanks to &lt;a href="http://blog.stealthpuppy.com/virtualisation/enable-streaming-from-file-in-softgrid-45"&gt;Aaron Parker's blog entry&lt;/a&gt;, this was easily resolved by changing the "HKLM\Software\Microsoft\Softgrid\4.5\Client\Configuration:AllowIndependentFileStreaming" DWORD value from 0 to 1. Thanks Aaron!&lt;br /&gt;&lt;br /&gt;I'm still interested in knowing why this is the default behavior for the Softgrid client, however. As was &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; the case with Aaron, I was trying to stream a file from off of a server, not a local package.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-1824829329688579792?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/1824829329688579792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=1824829329688579792' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/1824829329688579792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/1824829329688579792'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2008/06/microsoft-application-virtualization.html' title='Microsoft Application Virtualization (Softgrid) 4.5 RC Issue'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-8951648698506884385</id><published>2008-04-16T12:44:00.005-05:00</published><updated>2008-04-17T07:41:18.871-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mdt'/><category scheme='http://www.blogger.com/atom/ns#' term='image'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft deployment'/><category scheme='http://www.blogger.com/atom/ns#' term='bdd'/><category scheme='http://www.blogger.com/atom/ns#' term='imaging'/><title type='text'>Media Distribution with Microsoft Deployment Toolkit 4.1</title><content type='html'>I recently ran into an interesting problem using the Microsoft Deployment Toolkit (MDT) v4.1, while trying to build a system using a DVD. I was getting an error message stating: "Non-zero return code executing command "X:\Deploy\Tools\x86\TsmBootstrap.exe" /env:SAStart, rc = -2147467259". I received this error as soon as I started the build process off of a DVD distribution.&lt;br /&gt;&lt;br /&gt;As it turns out, apparently we had a rogue TS.xml file sitting in the root of the control folder, which was left over from back when we were still running BDD 2007. For some odd reason, the task sequence engine was attempting to load the TS.xml file in this location, which uses an older schema version, and it would fail out. The same file was actually also in the Deploy\Tools\x86 folder, and somehow the task sequence engine still found it there, and used IT rather than the TS.xml that was in the proper location, the subfolder with the task sequence ID. Neither myself, nor the guy I was working with from Premiere support could figure out why it was choosing to use these files, but after we removed both instances of them, everything just magically worked as it should have in the first place!&lt;br /&gt;&lt;br /&gt;I'd be pretty confident saying that it should be treated as a bug within MDT, however maybe there's good reasoning behind why it's doing this. Either way, I'm glad to have it fixed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-8951648698506884385?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/8951648698506884385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=8951648698506884385' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/8951648698506884385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/8951648698506884385'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2008/04/media-distribution-with-microsoft.html' title='Media Distribution with Microsoft Deployment Toolkit 4.1'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-7939044848720391130</id><published>2008-04-15T08:09:00.003-05:00</published><updated>2008-04-15T08:09:59.177-05:00</updated><title type='text'>Scripting with C#</title><content type='html'>Here's a cool article about how to use C# to do scripting, and even debug them!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/colinth/archive/2007/12/31/scripting-for-c.aspx"&gt;http://blogs.msdn.com/colinth/archive/2007/12/31/scripting-for-c.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-7939044848720391130?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/7939044848720391130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=7939044848720391130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/7939044848720391130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/7939044848720391130'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2008/04/scripting-with-c.html' title='Scripting with C#'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-5539399326069575782</id><published>2008-03-22T15:36:00.002-05:00</published><updated>2008-03-22T15:40:48.353-05:00</updated><title type='text'>System Center Configuration Manager (SCCM) 2007 Installation Troubles</title><content type='html'>I recently came across some issues installing System Center Configuration Manager (SCCM) 2007 in a disconnected/lab environment. During the installation, you are prompted to download updated prerequisite files, or give SCCM a path to where you've already downloaded them. &lt;strong&gt;Setup will not let you proceed without properly performing this step.&lt;/strong&gt; After doing some additional searching, I finally came across a post by Jeff Gilbert, which stated, "&lt;em&gt;To download the files from a different computer, just start Configuration Manager Setup on a computer with Internet connectivity and use the following command: Setup /download &lt;path&gt;.&lt;/em&gt;"&lt;br /&gt;&lt;br /&gt;Here is a link to the original post:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://myitforum.com/cs2/blogs/jgilbert/archive/2007/09/01/downloading-client-setup-prerequisites.aspx"&gt;http://myitforum.com/cs2/blogs/jgilbert/archive/2007/09/01/downloading-client-setup-prerequisites.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I hope this helps someone else, who comes across a similar error. The error message itself says "Component manifest was not found or it is invalid." I tried simply creating the file it was looking for, called ConfigMgr.Manifest.cab, but then the ConfigMgrSetup.log file indicated that it failed to validate the digital signature, so it looks like there's no getting around it without doing it properly.&lt;br /&gt;&lt;br /&gt;Oh well .... on with the installation ....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-5539399326069575782?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/5539399326069575782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=5539399326069575782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/5539399326069575782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/5539399326069575782'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2008/03/system-center-configuration-manager.html' title='System Center Configuration Manager (SCCM) 2007 Installation Troubles'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-5946785771485008205</id><published>2008-01-08T22:17:00.000-06:00</published><updated>2008-01-09T17:57:04.462-06:00</updated><title type='text'>Video Playing on top of WPF 3D Mesh</title><content type='html'>Here is a video of a video playing on top of a 3D mesh inside a Viewport3D in Windows Presentation Foundation:&lt;br /&gt;&lt;br /&gt;http://www.youtube.com/watch?v=G2aPEHI16Fk&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-69f42e54b5de323c" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v15.nonxt5.googlevideo.com/videoplayback?id%3D69f42e54b5de323c%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330140856%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D4E09E30BCFF5F534D8717B171EBE8A3C0C299DE3.749A0781074D64F4784AFC696F75C7194A59DFC0%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D69f42e54b5de323c%26offsetms%3D5000%26itag%3Dw160%26sigh%3DkQ_vMj8Kr7oCJqdaqBTA6pp7f24&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v15.nonxt5.googlevideo.com/videoplayback?id%3D69f42e54b5de323c%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330140856%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D4E09E30BCFF5F534D8717B171EBE8A3C0C299DE3.749A0781074D64F4784AFC696F75C7194A59DFC0%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D69f42e54b5de323c%26offsetms%3D5000%26itag%3Dw160%26sigh%3DkQ_vMj8Kr7oCJqdaqBTA6pp7f24&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-5946785771485008205?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=69f42e54b5de323c&amp;type=video%2Fmp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/5946785771485008205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=5946785771485008205' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/5946785771485008205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/5946785771485008205'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2008/01/video-playing-on-top-of-wpf-3d-mesh.html' title='Video Playing on top of WPF 3D Mesh'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-6333802201179648566</id><published>2008-01-08T17:44:00.001-06:00</published><updated>2008-01-08T17:51:30.357-06:00</updated><title type='text'>C# Method to Set WPF PerspectiveCamera Target</title><content type='html'>Here's a method for Windows Presentation Foundation developers wanting to parse some text into a target location for a Camera, such as a PerspectiveCamera:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;        public static void SetCameraTarget(string Target, Camera Camera)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            double[] TargetPoint = Array.ConvertAll&lt;string,&gt;(Target.Split(char.Parse(" ")), new Converter&lt;string,&gt;(DoubleStringConverter));&lt;/string,&gt;&lt;/string,&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            PerspectiveCamera MyCamera = (PerspectiveCamera)Camera;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            Vector3D v1 = new Vector3D(MyCamera.Position.X, MyCamera.Position.Y, MyCamera.Position.Z);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            Vector3D v2 = new Vector3D(TargetPoint[0], TargetPoint[1], TargetPoint[2]);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            Vector3D NewVector = v2 - v1;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            MyCamera.LookDirection = NewVector;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            System.Diagnostics.Debug.WriteLine(NewVector);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        }&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Just pass a space-delimited string value into it with 3 double values such as: "2 5 3" and a reference to the camera object you want to update.&lt;br /&gt;&lt;br /&gt;Oops, I almost forgot ... you need this too:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        private double DoubleStringConverter(string StringToParse)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;            try&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;            {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;                return Double.Parse(StringToParse);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;            }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;            catch&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;            {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;                return 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;            }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        }&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-6333802201179648566?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/6333802201179648566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=6333802201179648566' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/6333802201179648566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/6333802201179648566'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2008/01/c-method-to-set-wpf-perspectivecamera_4843.html' title='C# Method to Set WPF PerspectiveCamera Target'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-564030492281520345</id><published>2007-12-24T10:20:00.000-06:00</published><updated>2007-12-24T10:25:03.722-06:00</updated><title type='text'>Debugging Powershell Cmdlets</title><content type='html'>This is great! The ability to actually use Visual Studio to debug cmdlets is awesome!&lt;br /&gt;&lt;br /&gt;Check out this article on the .NET debugging blog:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/jmstall/archive/2007/03/04/debugging-cmdlets.aspx"&gt;http://blogs.msdn.com/jmstall/archive/2007/03/04/debugging-cmdlets.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-564030492281520345?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/564030492281520345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=564030492281520345' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/564030492281520345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/564030492281520345'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2007/12/debugging-powershell-cmdlets.html' title='Debugging Powershell Cmdlets'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-369979103090004320</id><published>2007-12-24T06:27:00.000-06:00</published><updated>2008-12-12T17:25:55.456-06:00</updated><title type='text'>Windows Powershell v1.0 Problem</title><content type='html'>First of all ... I just created by first Cmdlet last week! The bad part? It doesn't work. Well, it doesn't work &lt;span style="font-weight: bold;"&gt;as expected&lt;/span&gt;, I should say. Let me give you a brief overview of the issue I ran into.&lt;br /&gt;&lt;br /&gt;I recently decided to go ahead and start developing a set of cmdlets to manage a &lt;span style="font-style: italic;"&gt;Microsoft Systems Management 2003 Server&lt;/span&gt;. Since we use SMS 2003 at my company, I figured it would be cool to expose the functionality through Powershell in case we wanted to script/automate SMS "stuff." I know that there are some existing &lt;a href="http://www.microsoft.com/technet/technetmag/issues/2007/11/UtilitySpotlight/?loc=en"&gt;SMS cmdlets&lt;/a&gt; out there, however these seem to target SMS clients rather than servers.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_OsradMn7nbU/R2-3FyGWCWI/AAAAAAAAAAs/H1V3DglrCnI/s1600-h/pscmdletproblem.bmp"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_OsradMn7nbU/R2-3FyGWCWI/AAAAAAAAAAs/H1V3DglrCnI/s320/pscmdletproblem.bmp" alt="" id="BLOGGER_PHOTO_ID_5147534209083378018" border="0" /&gt;&lt;/a&gt;I started out by writing a cmdlet called &lt;span style="font-style: italic;"&gt;Get-SMSCollections&lt;/span&gt; that did simply that ... it retrieved a list of SMS collections from an SMS server that is specified as a parameter. I ran into a bit of a bind, however, when trying to run this cmdlet. I'm currently getting an error message stating&lt;br /&gt;: "&lt;span style="font-style: italic;"&gt;format-default : Value was either too large or too small for an Int32.&lt;/span&gt;" Now, I assume, naturally, that this message is coming from the format-default cmdlet, and some value I'm passing to it from my cmdlet is larger or smaller than an Int32 can handle. I'm really at odds as to what exactly this value is, however. &lt;span style="font-weight: bold;"&gt;Please note that the yellow warning text is coming from an Exception handler in my cmdlet and is not actually reflective of the real problem (it's just some static text I wrote in, in case anything fails)&lt;/span&gt;.  Now, since the error message is coming from &lt;span style="font-style: italic;"&gt;format-default&lt;/span&gt;, I figured that I'd try something else to see what happens: &lt;span style="font-style: italic;"&gt;Get-SMSCollections | Select-Object name,collectionID&lt;/span&gt;. &lt;span style="font-weight: bold;"&gt;This&lt;/span&gt; command actually works, and outputs the names and collection IDs of all my SMS collections! Now, that tells me that something, somewhere, some sort of data is messing up the &lt;span style="font-style: italic;"&gt;format-default&lt;/span&gt; cmdlet.&lt;br /&gt;&lt;br /&gt;I wish I knew what it was ...&lt;br /&gt;&lt;br /&gt;The really weird thing though, is that I can run a &lt;span style="font-style: italic;"&gt;Select-Object&lt;/span&gt; on any of the properties individually, and successfully retrieve them! So, what sort of data is Powershell trying to retrieve that it's unable to display???&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-369979103090004320?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/369979103090004320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=369979103090004320' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/369979103090004320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/369979103090004320'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2007/12/windows-powershell-v10-problem.html' title='Windows Powershell v1.0 Problem'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_OsradMn7nbU/R2-3FyGWCWI/AAAAAAAAAAs/H1V3DglrCnI/s72-c/pscmdletproblem.bmp' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-2148177035895911105</id><published>2007-12-21T13:08:00.001-06:00</published><updated>2007-12-21T13:10:03.308-06:00</updated><title type='text'>Odd Powershell FileSystemProvider Behavior</title><content type='html'>So, I've been working with Powershell more and more recently. I ran into a rather interesting ... bug, at least, I think it is anyway. The other day I decided to use Powershell instead of my normal command prompt to mount a WIM file to a folder on the filesystem, so I could view/edit it. I ran the command, and was told that the folder successfully mounted to a folder on the root of my c:\ drive. As per my personal custom, I quickly did a dir (alias for &lt;em&gt;Get-ChildItem&lt;/em&gt; in Powershell) to make sure the folder was there (don't ask me why, but I do ... it's just habit). Surprisingly enough, however, the folder disappeared!&lt;br /&gt;&lt;br /&gt;After opening up Windows Explorer, and traversing the folder structure, I knew something had to be up. I did an actual dir command in the regular command prompt, and it showed up. So, I guess what the problem is, is some sort of bug in the &lt;em&gt;FileSystemProvider&lt;/em&gt; .NET class, which is the provider used in the &lt;em&gt;Get-ChildItem&lt;/em&gt; Cmdlet to browse an NTFS (at least) filesystem.&lt;br /&gt;&lt;br /&gt;I'm kinda curious to know if anyone else has noticed this same behavior ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-2148177035895911105?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/2148177035895911105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=2148177035895911105' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/2148177035895911105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/2148177035895911105'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2007/12/odd-powershell-filesystemprovider.html' title='Odd Powershell FileSystemProvider Behavior'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-8317548744410488745</id><published>2007-08-13T13:29:00.000-05:00</published><updated>2007-08-13T13:39:39.397-05:00</updated><title type='text'>Why I doubt FOSS will catch on anytime soon</title><content type='html'>So, you keep hearing about "OMGZLINUCKSISTAKINGOVERTHESOFTWAREMARKET" and other such abusrd comments by Linux fanboys and such, right? Well, if you're a Linux fanboy, and reading this, then you would most likely say "no," however I hear plenty of it myself, mostly over at &lt;a href="http://www.digg.com/"&gt;Digg&lt;/a&gt;. It's kind of sad that people don't understand how powerful the Windows platform is, not just in regards to &lt;em&gt;using&lt;/em&gt; it, but &lt;em&gt;developing&lt;/em&gt; software around it using the .NET platform as well.&lt;br /&gt;&lt;br /&gt;So, you're asking yourself about the title of my post, right? Well, I was just poking around looking at &lt;a href="http://www.freebsd.org/"&gt;FreeBSD&lt;/a&gt;, 'cuz I've been thinking about playing with it again, and a few links later, I found myself looking at the source code for &lt;a href="http://gnuwin32.sourceforge.net/packages/libarchive.htm"&gt;libarchive&lt;/a&gt;. Within the README file contained in the source code download, I noticed the following paragraph:&lt;br /&gt;&lt;br /&gt;"&lt;em&gt;This is a heavily stream-oriented system. There is no direct support for in-place modification or random access and no intention of ever adding such support. Adding such support would require sacrificing a lot of other features, so don't bother asking.&lt;/em&gt;"&lt;br /&gt;&lt;br /&gt;Wow. Sounds like somebody has an attitude problem. Since when are you going to convince any customers to use your product when you clearly, and openly, state that you have absolutely no intention of complying with their potential needs? Now, don't get me wrong, I understand that there are some technical details as to why this particular feature isn't realistic in this scenario, but the whole approach to the situation is absolutely enthralling. I can't imagine any company being very successful without focusing on their customer's needs, and this snippet from the README in libarchive is no exception. I'm sure that some businesses, and individuals, out there are using this software library, but without offering to be dynamic and at least working with your customer to understand and ultimately meet their needs, then you can forget about business support.&lt;br /&gt;&lt;br /&gt;Honestly, I wish people would grow up sometimes. The author of libarchive sounds like a stubborn 2 year old. If he is one, then I'm amazed at his programming talent at such an early age, but if he is not, then I suggest that he act his age. That is all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-8317548744410488745?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/8317548744410488745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=8317548744410488745' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/8317548744410488745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/8317548744410488745'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2007/08/why-i-doubt-foss-will-catch-on-anytime.html' title='Why I doubt FOSS will catch on anytime soon'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-3452568263255922319</id><published>2007-06-07T11:15:00.000-05:00</published><updated>2007-06-07T11:16:03.263-05:00</updated><title type='text'>Key Finder</title><content type='html'>I came across this nice key finder today, since no one at my company had the licensing information for SQL Server 2000 from 3 years ago. Here's a link for it:&lt;br /&gt;&lt;br /&gt;http://www.mydigitallife.info/2006/11/24/decrypt-and-retrieve-serial-numbers-or-cd-product-keys-of-applications-with-keyfinder-thing/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-3452568263255922319?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/3452568263255922319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=3452568263255922319' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/3452568263255922319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/3452568263255922319'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2007/06/key-finder.html' title='Key Finder'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-3451798268270905632</id><published>2007-05-16T09:33:00.000-05:00</published><updated>2007-05-16T09:34:43.503-05:00</updated><title type='text'>Groupwise Fun</title><content type='html'>So, I created a group in my personal contacts in Groupwise. I sent an e-mail to the group yesterday. This morning, I realized that it sent it to no-one. Thankfully it was not a time-critical e-mail, but .. what if it was?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-3451798268270905632?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/3451798268270905632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=3451798268270905632' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/3451798268270905632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/3451798268270905632'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2007/05/groupwise-fun.html' title='Groupwise Fun'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-644679819810645402</id><published>2007-05-07T09:35:00.000-05:00</published><updated>2007-05-07T09:36:36.464-05:00</updated><title type='text'>WMI Helps Those Who Help Themselves</title><content type='html'>I highly recommend the article, by Greg Stemp, called &lt;a href="http://msdn2.microsoft.com/en-us/library/ms974554%28d=printer%29.aspx"&gt;WMI Helps Those Who Helps Themselves&lt;/a&gt;. It just might teach you something new about how WMI works. Also, the concept of writing your own WMI class to do what you need it to ... is awesome :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-644679819810645402?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/644679819810645402/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=644679819810645402' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/644679819810645402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/644679819810645402'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2007/05/wmi-helps-those-who-help-themselves.html' title='WMI Helps Those Who Help Themselves'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-7481161783216884108</id><published>2007-04-24T06:02:00.000-05:00</published><updated>2007-04-24T06:07:04.304-05:00</updated><title type='text'>Microsoft Visual Studio 9.0 C# Express Orcas Beta</title><content type='html'>Hey everyone! Microsoft has released a &lt;a href="http://blogs.msdn.com/danielfe/archive/2007/04/19/download-visual-studio-express-orcas-we-need-your-feedback.aspx"&gt;free, beta version of Visual Studio&lt;/a&gt;, known as Visual Studio Express, that allows you to visually develop applications based on the Windows Presentation Foundation! This is amazing news, especially for beginning programmers, and even for myself, as I use the Express edition of Visual Studio on several other computers that I use on a regular basis, where I don't have access to my copy of Visual Studio 2005 Standard. Unfortunately, installing the Fall CTP of the Orcas extensions for VS2005 didn't work on VS Express 2005, so I guess this required them releasing a new version to fix (which they did!). Remember, it's only a beta, and I've already noticed that 30 seconds in, the XAML element tag completion isn't working (when you close the opening tag, it doesn't insert a closing tag), but I'm sure they'll have this fixed. I &lt;a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1512877&amp;amp;SiteID=1"&gt;posted in the MSDN forums about this problem&lt;/a&gt; so that it hopefully gets full attention from the Visual Studio development team.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-7481161783216884108?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/7481161783216884108/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=7481161783216884108' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/7481161783216884108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/7481161783216884108'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2007/04/microsoft-visual-studio-90-c-express.html' title='Microsoft Visual Studio 9.0 C# Express Orcas Beta'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-8900755532469466380</id><published>2007-04-23T09:29:00.000-05:00</published><updated>2007-04-23T09:47:12.887-05:00</updated><title type='text'>Free VBscript COM Objects</title><content type='html'>Just to make you all aware, and for the purposes of documenting this for myself, here is a link to the &lt;a href="http://www.toolsack.com/"&gt;Toolsack Baseline 1.0 Components&lt;/a&gt;. This is a &lt;span style="font-weight: bold;"&gt;free&lt;/span&gt; product that consists of 30 COM objects for visual basic scripters. Some of the tools include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Timer&lt;/li&gt;&lt;li&gt;DNS Client&lt;/li&gt;&lt;li&gt;Socket Client &amp;amp; Listener&lt;/li&gt;&lt;li&gt;SMTP client&lt;/li&gt;&lt;li&gt;Binary File Saving/Loading&lt;/li&gt;&lt;li&gt;HTTP retriever&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;To be fully honest, I haven't actually used these yet, but I have been aware of their existence for some time. It came up in a Google search a few months ago when I was looking for "VBscript sockets." Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-8900755532469466380?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/8900755532469466380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=8900755532469466380' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/8900755532469466380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/8900755532469466380'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2007/04/free-vbscript-com-objects.html' title='Free VBscript COM Objects'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-6442778447709042739</id><published>2007-04-21T22:25:00.000-05:00</published><updated>2008-12-12T17:25:55.647-06:00</updated><title type='text'>Programming Using the Windows Presentation Foundation</title><content type='html'>Well guys, sorry I haven't posted recently, but I've been learning some new tricks to stuff up my sleeve ;-)&lt;br /&gt;&lt;br /&gt;One of the primary things I have been studying recently, is the &lt;a href="http://wpf.netfx3.com/"&gt;Windows Presentation Foundation&lt;/a&gt; (WPF) component of the Microsoft .NET Framework version 3.0. WPF is an &lt;span style="FONT-WEIGHT: bold"&gt;extremely&lt;/span&gt; powerful framework for building rich, interactive user interfaces both quickly and easily for Microsoft Windows systems. The separation of user interface design and procedural code is a very significant change between the .NET 2.0 and .NET 3.0 frameworks, however, I believe that it is for the better. The tools I have been using to learn about the Windows Presentation Foundation include the (very extensive) &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=7614FE22-8A64-4DFB-AA0C-DB53035F40A0&amp;displaylang=en"&gt;Windows SDK documentation&lt;/a&gt;, and a book I purchased from Amazon last week called &lt;a href="http://www.amazon.com/Windows-Presentation-Foundation-Unleashed-WPF/dp/0672328917/ref=pd_bbs_sr_1/104-0472564-9995947?ie=UTF8&amp;amp;s=books&amp;qid=1177212715&amp;amp;sr=8-1"&gt;Windows Presentation Foundation: Unleashed&lt;/a&gt; by Adam Nathan.&lt;br /&gt;&lt;br /&gt;I figured that I would show you all (if anyone really reads my blog, I'd be surprised ;-) ) a screenshot of one proof-of-concept application that I put together really quick. It basically proves my earlier point of being able to build rich UIs without much effort at all. In fact, this entire example was built using &lt;a href="http://www.xaml.net/"&gt;XAML&lt;/a&gt;, and I wrote absolutely zero lines of procedural code. The purpose of this example was mostly to show the capabilities of embedding WPF controls inside of other WPF controls, to show how much you can do in WPF without procedural code, and also I wanted to show off the performance of WPF-based applications. I believe that Microsoft has done an excellent job of making the .NET 3.0 framework the most powerful and easy to use software development framework, and I can't say that I have any reservations about using it exclusively for any major application development.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_OsradMn7nbU/RirZc7335zI/AAAAAAAAAAM/MHcSXKAIASU/s1600-h/wpf.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5056092622808409906" style="FLOAT: left; MARGIN: 0pt 10px 10px 0pt; CURSOR: pointer" alt="" src="http://3.bp.blogspot.com/_OsradMn7nbU/RirZc7335zI/AAAAAAAAAAM/MHcSXKAIASU/s320/wpf.JPG" border="0" /&gt;&lt;/a&gt;This application is very simple. It has a Button control, and a couple labels, and two &lt;a href="http://msdn2.microsoft.com/en-us/library/system.windows.controls.slider.aspx"&gt;Slider&lt;/a&gt; controls. On the Button control, is a &lt;a href="http://msdn2.microsoft.com/en-us/library/system.windows.controls.stackpanel.aspx"&gt;StackPanel&lt;/a&gt; that hosts a &lt;a href="http://msdn2.microsoft.com/en-us/library/system.windows.controls.treeview.aspx"&gt;TreeView &lt;/a&gt;control and a &lt;a href="http://msdn2.microsoft.com/en-us/library/system.windows.controls.mediaelement.aspx"&gt;MediaElement&lt;/a&gt; control. One Slider control controls the rotation of the Button, and the other controls the rotation of the MediaElement directly on top of the Button, independently. The Treeview control is host to a few &lt;a href="http://msdn2.microsoft.com/en-us/library/system.windows.controls.menuitem.aspx"&gt;MenuItems&lt;/a&gt;, and it also has a &lt;a href="http://msdn2.microsoft.com/en-us/library/system.windows.controls.contextmenu.aspx"&gt;ContextMenu&lt;/a&gt;, that has a couple MenuItems, but one of &lt;span style="FONT-WEIGHT: bold"&gt;those&lt;/span&gt; MenuItems contains yet &lt;span style="FONT-STYLE: italic"&gt;another&lt;/span&gt; MediaElement control that's independent of the one on the Button. Yes, that's all kind of confusing, but just look at the screenshot and you'll see for yourself!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;window class="DeleteMe.Window1"&gt;&lt;/window&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;treeview.contextmenu&gt;&lt;/TREEVIEW.CONTEXTMENU&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Edit: E-mail me for the XAML if you're curious to see how I did it. Hint: It's really, really easy ... I just think it's cool ;-)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Google Mail: pcgeek86&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;contextmenu&gt;&lt;/contextmenu&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;menuitem header="ContextItem1"&gt;&lt;/menuitem&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold; FONT-STYLE: italic"&gt;Edit2: Here's a link to the &lt;/span&gt;&lt;a style="FONT-WEIGHT: bold; FONT-STYLE: italic" href="http://msdn2.microsoft.com/en-us/library/ms750413.aspx"&gt;Binding Markup Extension&lt;/a&gt;&lt;span style="FONT-WEIGHT: bold; FONT-STYLE: italic"&gt; I used to bind the output value from the Slider controls to the Angle property of the RotateTransform objects. This is mainly what kept me from having to use any C#&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-6442778447709042739?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/6442778447709042739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=6442778447709042739' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/6442778447709042739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/6442778447709042739'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2007/04/programming-using-windows-presentation.html' title='Programming Using the Windows Presentation Foundation'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_OsradMn7nbU/RirZc7335zI/AAAAAAAAAAM/MHcSXKAIASU/s72-c/wpf.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-7315203028617637558</id><published>2007-04-11T07:21:00.000-05:00</published><updated>2007-04-11T07:24:24.422-05:00</updated><title type='text'>Dell Service Tag Converter</title><content type='html'>Just so you all are aware, in the event that you call Dell Gold Tech Support (1-866-876-3355), and you are requested to input an &lt;span style="font-style: italic;"&gt;Express Service Code&lt;/span&gt; number, there's a handy utility at &lt;a href="http://www.creativyst.com/Doc/Articles/HT/Dell/DellNumb.htm"&gt;this website&lt;/a&gt;, that allows you to convert a &lt;span style="font-style: italic;"&gt;Service Tag&lt;/span&gt; to an &lt;span style="font-style: italic;"&gt;Express Service Code&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-7315203028617637558?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/7315203028617637558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=7315203028617637558' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/7315203028617637558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/7315203028617637558'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2007/04/dell-service-tag-converter.html' title='Dell Service Tag Converter'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-7861972285837078667</id><published>2007-04-03T10:51:00.000-05:00</published><updated>2007-04-03T10:55:57.621-05:00</updated><title type='text'>Novell Groupwise [is lame]</title><content type='html'>This will be a very short post. I simply would like to express my extreme discontent and frustration with the Novell Groupwise system. It is buggy, very slow when your mailbox fills up, and best of all, when the Groupwise server in question is having problems (read: slow), it locks up the Groupwise client on all your client systems as well. Isn't that nice?&lt;br /&gt;&lt;br /&gt;It reminds me of using Outlook/Exchange at my old job. Exchange server goes down? Continue working. Exchange server comes back online? Continue working, and all your pending mail gets sent in the background. It's just a much better stream-lined interface. Novell fails at enterprise-level software development.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-7861972285837078667?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/7861972285837078667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=7861972285837078667' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/7861972285837078667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/7861972285837078667'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2007/04/novell-groupwise-is-lame.html' title='Novell Groupwise [is lame]'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-493750649581669730</id><published>2007-03-16T15:47:00.000-05:00</published><updated>2007-04-01T10:58:35.464-05:00</updated><title type='text'>Installing Print Drivers Remotely</title><content type='html'>Well, someone else seemed to appreciate this tip a lot, and I don't know where else it may be posted online (I'm sure quit a few places), but basically, if you want to install a print driver on someone's computer for them, and don't wish to interrupt them, you can do so through a script or through Windows Explorer.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Goto Start --&gt; Run&lt;/li&gt;&lt;li&gt;Type "\\[computername]&lt;computername&gt;"&lt;/computername&gt;&lt;/li&gt;&lt;li&gt;Open &lt;span style="font-style: italic;"&gt;Printers and Faxes&lt;/span&gt; (should now be at &lt;span style="font-style: italic;"&gt;Printers and Faxes on &lt;computername&gt;&lt;/computername&gt;&lt;/span&gt;)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Right-click in an open area and choose Server Properties&lt;/li&gt;&lt;li&gt;In the new window, choose the &lt;span style="font-style: italic;"&gt;Drivers&lt;/span&gt; tab and click the &lt;span style="font-style: italic;"&gt;Add&lt;/span&gt; button&lt;/li&gt;&lt;/ol&gt;Hopefully this helps you streamline your IT operations throughout the day :-) Perhaps I'll post a how-to on scripting this operation later on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-493750649581669730?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/493750649581669730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=493750649581669730' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/493750649581669730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/493750649581669730'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2007/03/installing-print-drivers-remotely.html' title='Installing Print Drivers Remotely'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-6214384873699245591</id><published>2007-02-08T22:38:00.001-06:00</published><updated>2007-02-08T22:57:28.316-06:00</updated><title type='text'>Using the Altiris Software Virtualization Solution (SVS)</title><content type='html'>Here's a video I briefly made on how to use Altiris SVS to switch which version of the Java Runtime you are using &lt;span style="FONT-WEIGHT: bold"&gt;without&lt;/span&gt; removing/re-installing anything.&lt;br /&gt;&lt;br /&gt;Sorry, video link didn't work ... it's a flash video, and I guess I can't upload it anywhere :(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-6214384873699245591?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/6214384873699245591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=6214384873699245591' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/6214384873699245591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/6214384873699245591'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2007/02/using-altiris-software-virtualization_08.html' title='Using the Altiris Software Virtualization Solution (SVS)'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-117048605015239779</id><published>2007-02-02T23:56:00.000-06:00</published><updated>2007-02-08T18:27:52.107-06:00</updated><title type='text'>Resolving CRC Errors on Windows XP</title><content type='html'>Everyone hates errors, right? Yeah, well, I am certainly no exception to that ... so allow me to tell you a short story about some problems I have been having, and how I (finally) resolved them.&lt;br /&gt;&lt;br /&gt;To give you a quick overview of the symptoms of my problem, I've been having an ongoing problem trying to install GTA: San Andreas on my gaming PC. I would always get a CRC error at the &lt;strong&gt;same&lt;/strong&gt; spot every time; Needless to say, this was quite aggravating. I had all sorts of ideas flying through my head, including hardware problems (my friend was convinced it was my ECS KN1 Extreme motherboard ... it wasn't).&lt;br /&gt;&lt;br /&gt;After trying re-installing the nForce 4 Ultra platform drivers (thinking the software interface between the DVD-RW and mobo was faulty), stopping every single background service I could, removing all un-used devices from Device Manager (search Microsoft support for "devmgr_show_nonpresentdevices"), removing VMware (thinking that it had something to do with VMware's virtual CD interface) , and so on ... it &lt;strong&gt;still&lt;/strong&gt; wasn't working. What the hell??&lt;br /&gt;&lt;br /&gt;Well, it finally turns out that the least of my worries, Daemon Tools (v3.47), which has never failed me in the past, and I have relied on for quite some time now, has turned its back on me. After removing DT, rebooting, and installing GTA: SA, everything worked &lt;strong&gt;perfectly&lt;/strong&gt;. So, for anyone out there getting CRC's trying to install GTA: San Andreas ... &lt;strong&gt;make sure you aren't running DT&lt;/strong&gt;!!&lt;br /&gt;&lt;br /&gt;Cheers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-117048605015239779?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/117048605015239779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=117048605015239779' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/117048605015239779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/117048605015239779'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2007/02/resolving-crc-errors-on-windows-xp.html' title='Resolving CRC Errors on Windows XP'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-117045375761396460</id><published>2007-02-02T15:56:00.000-06:00</published><updated>2007-02-02T16:02:37.630-06:00</updated><title type='text'>Running Novell ConsoleOne as Non-admin</title><content type='html'>So, the other day, I ran into some issues running ConsoleOne under my standard user account. It didn't really surprise me, as ConsoleOne seems like a pretty prematurely released tool, however, it is the latest tool that Novell has provided to work with their products, so it's kind of a necessity. Actually, IIRC, the issues I had were specifically related to the snap-ins for Zenworks for Desktop Management version 7, not ConsoleOne by itself.&lt;br /&gt;&lt;br /&gt;I was getting some weird behavior from the Zenworks application objects when I'd try to open up the properties on them; In fact, what happened, was that ConsoleOne would lock up entirely. I started by giving the &lt;em&gt;&lt;localmachine&gt;\Users&lt;/em&gt; security group modify access to the ConsoleOne folder. This seemed to clear up the issue of ConsoleOne locking up, however I ran into something new; I began receiving a pop-up message when trying to open an Application object, saying that I was using a Zenworks trial version. Since we had not had any such issues in the past, this led me to believe that I had another issue to work through. Luckily, I had noticed earlier on that ConsoleOne took the liberty of creating a file on the root of my harddisk called licenses7.read. Without too much thought, I granted permissions to this file as well, to the local Users group. Since then, I believe everything has been working OK.&lt;br /&gt;&lt;br /&gt;If you have any questions regarding my quest to run my machine at work as a non-Administrator, please feel free to contact me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-117045375761396460?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/117045375761396460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=117045375761396460' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/117045375761396460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/117045375761396460'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2007/02/running-novell-consoleone-as-non-admin.html' title='Running Novell ConsoleOne as Non-admin'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-117034210635440024</id><published>2007-02-01T08:59:00.000-06:00</published><updated>2007-02-01T09:01:46.420-06:00</updated><title type='text'>Fresh Groupwise Client Install</title><content type='html'>So, the whole Outlook connector thing wasn't quite working out. I get this message saying "The messaging interface has returned an unknown error" when replying to an e-mail on our Groupwise 7 system. I have no idea what's going on, and it's pretty clear that Novell has no intentions of working with Microsoft products (surprise, surprise).&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/6085/2190/1600/560147/gwclientsucks.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/6085/2190/200/933415/gwclientsucks.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So ... I ended up loading the Groupwise 7 client this morning. Uhm .... anyone see anything wrong here?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-117034210635440024?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/117034210635440024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=117034210635440024' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/117034210635440024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/117034210635440024'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2007/02/fresh-groupwise-client-install.html' title='Fresh Groupwise Client Install'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-117017703755487471</id><published>2007-01-30T11:03:00.000-06:00</published><updated>2007-01-30T11:10:37.580-06:00</updated><title type='text'>Using Outlook 2003 With Groupwise 7 Server</title><content type='html'>Okay, well I didn't really find an explicit guide on using Outlook with Groupwise, and I really don't want to use the Groupwise 7 client, so I figured I would put together a quick guide on how to get it up and running here. First and foremost, in my experiences, you &lt;span style="font-weight: bold;"&gt;must&lt;/span&gt; set a Groupwise password, as Outlook will not authenticate using your eDirectory userID/password.&lt;br /&gt;&lt;br /&gt;1. Install Outlook 2003&lt;br /&gt;2. Download/Install the &lt;a href="http://download.novell.com/Download?buildid=4mcyJ_tKJqQ%7E"&gt;Outlook connector for Groupwise&lt;/a&gt; (registration required to access downloads; The name of the file is &lt;span style="font-style: italic; font-weight: bold;"&gt;gw301olcm.exe&lt;/span&gt;)&lt;br /&gt;3. Run Outlook, goto Tools --&gt; E-mail Accounts --&gt; Add New&lt;br /&gt;4. Choose Additional Server Types, then Novell Groupwise&lt;br /&gt;5. Specify your server/user information&lt;br /&gt;6. Make sure you have Outlook deliver new e-mail to your Groupwise account (Tools --&gt; E-mail Accounts --&gt; View/Change Existing --&gt; Deliver New E-mail ...&lt;br /&gt;&lt;br /&gt;That's pretty much all there is to it. Unfortunately it took a bit of searching and experimenting to gather all this information, but now that it's working, it's ... well, working well I guess. At least I don't have to deal with the Groupwise client anymore! :) Hope this helps someone out there ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-117017703755487471?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/117017703755487471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=117017703755487471' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/117017703755487471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/117017703755487471'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2007/01/using-outlook-2003-with-groupwise-7.html' title='Using Outlook 2003 With Groupwise 7 Server'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-117016797574009633</id><published>2007-01-30T08:37:00.000-06:00</published><updated>2007-01-30T08:39:35.756-06:00</updated><title type='text'>Running as Non-Admin</title><content type='html'>Ok, well today at work, I loaded up a new computer, and am running as a non-admin. I am still logging in with my domain admin account, however, I removed Domain Admins from the local Administrators group on my PC. I'm installing software simply by using right-click --&gt; Run As. We'll see how it goes, but I'm not too worried about it .. I think I will feel safer, and have a better-running PC since I won't be able to make mistakes as easily. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-117016797574009633?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/117016797574009633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=117016797574009633' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/117016797574009633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/117016797574009633'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2007/01/running-as-non-admin.html' title='Running as Non-Admin'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-116619509896387015</id><published>2006-12-15T09:00:00.000-06:00</published><updated>2006-12-15T09:06:09.616-06:00</updated><title type='text'>Auditing File Shares on Clients</title><content type='html'>Here is a script I wrote that will list out all the file and printer shares on all the machines in your domain. The script uses the RootDSE object to locate the root of your domain, and then connects to the WMI service on all your machines remotely, so you'll need to be logged in as a Domain Administrator for this script to work properly.&lt;br /&gt;&lt;br /&gt;Output: The script will output a set of comma-separated headers that have been statically entered (Computer Name, Share Name, Share Type), and then will echo out a line for each printer or file share it encounters that contains the previously mentioned variables. The script will also detect if any computers were not able to be contacted, or had errors when attempting a connection to the remote WMI service and will echo those out at the end. I encourage you to run the script and review the output. Then, modify the script as necessary to suit your needs! I would be welcome to any suggestions you have as to how to improve this to assist your network administration and monitoring!&lt;br /&gt;&lt;br /&gt;&lt;font style="font-family: courier"&gt;set pcsDown = CreateObject("Scripting.Dictionary")&lt;br /&gt;set pcsErr = CreateObject("Scripting.Dictionary")&lt;br /&gt;main()&lt;br /&gt;&lt;br /&gt;function main()&lt;br /&gt; set rootdse = GetObject("LDAP://RootDSE")&lt;br /&gt; domain  = rootdse.Get("defaultNamingContext")&lt;br /&gt; wscript.echo "Computer Name,Share Name,Share Type"&lt;br /&gt; searchDir(domain)&lt;br /&gt; printBadPCs()&lt;br /&gt;end function&lt;br /&gt;&lt;br /&gt;'***************************&lt;br /&gt;'Declaration: function searchDir(ldappath)&lt;br /&gt;'Purpose: Takes LDAP-formatted string as parameter. Performs an operation based on the directory object's class&lt;br /&gt;'Return value: none&lt;br /&gt;'***************************&lt;br /&gt;function searchDir(ldappath)&lt;br /&gt; set ou = GetObject("LDAP://" &amp; ldappath)&lt;br /&gt; &lt;br /&gt; for each dirObj in ou&lt;br /&gt;  select case dirObj.class&lt;br /&gt;   case "organizationalUnit"&lt;br /&gt;    searchDir(dirObj.distinguishedName)&lt;br /&gt;   case "container"&lt;br /&gt;    searchDir(dirObj.distinguishedName)&lt;br /&gt;   case "computer"&lt;br /&gt;    if isAlive(dirObj.cn) then&lt;br /&gt;     printShares(dirObj.cn)&lt;br /&gt;    else&lt;br /&gt;     pcsDown.Add dirObj.cn, ""&lt;br /&gt;    end if&lt;br /&gt;  end select&lt;br /&gt; next&lt;br /&gt;end function&lt;br /&gt;&lt;br /&gt;'***************************&lt;br /&gt;'Declaration: printShares(pcname)&lt;br /&gt;'Purpose: Prints the name of any type 0 (disk) or type 1 (print queue) shares on the machine&lt;br /&gt;'Return value: nothing&lt;br /&gt;'***************************&lt;br /&gt;function printShares(pcname)&lt;br /&gt; on error resume next&lt;br /&gt; numShares = 0&lt;br /&gt; set shares = GetObject("winmgmts:\\" &amp; pcname &amp; "\root\cimv2:Win32_Share").Instances_&lt;br /&gt; if Err.Number &lt;&gt; 0 then&lt;br /&gt;  pcsErr.Add pcname, ""&lt;br /&gt;  exit function&lt;br /&gt; end if&lt;br /&gt;&lt;br /&gt; for each share in shares&lt;br /&gt;  select case share.Type&lt;br /&gt;   case 0&lt;br /&gt;    wscript.echo pcname &amp; "," &amp; share.Name &amp; ",disk"&lt;br /&gt;    numShares = numShares + 1&lt;br /&gt;   case 1&lt;br /&gt;    wscript.echo pcname &amp; "," &amp; share.Name &amp; ",printer"&lt;br /&gt;    numShares = numShares + 1&lt;br /&gt;  end select&lt;br /&gt; next&lt;br /&gt;' if numShares &lt;&gt; 0 then wscript.echo "Total number of shares on " &amp; pcname &amp; ": " &amp; numShares&lt;br /&gt;end function&lt;br /&gt;&lt;br /&gt;'***************************&lt;br /&gt;'Declaration: function isAlive(pcname)&lt;br /&gt;'Purpose: Sends ICMP packet to remote machine&lt;br /&gt;'Return value: BOOL true if machine is alive, else BOOL false&lt;br /&gt;'***************************&lt;br /&gt;function isAlive(pcname)&lt;br /&gt; isAlive = false&lt;br /&gt; set ping = GetObject("winmgmts:").ExecQuery("select * from Win32_PingStatus where Address = '" &amp; pcname &amp; "'")&lt;br /&gt; &lt;br /&gt; for each png in ping&lt;br /&gt;  if png.StatusCode = 0 then isAlive = true&lt;br /&gt; next&lt;br /&gt;end function&lt;br /&gt;&lt;br /&gt;function printBadPCs()&lt;br /&gt; wscript.echo vbcrlf &amp; "&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;"&lt;br /&gt; wscript.echo "The following computers could not be contacted"&lt;br /&gt; wscript.echo "&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;"&lt;br /&gt; for each pc in pcsDown&lt;br /&gt;  wscript.echo pc&lt;br /&gt; next&lt;br /&gt;&lt;br /&gt; wscript.echo vbcrlf &amp; "&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;"&lt;br /&gt; wscript.echo "The following computers generated an error msg"&lt;br /&gt; wscript.echo "&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;"&lt;br /&gt; for each pc in pcsDown&lt;br /&gt;  wscript.echo pc&lt;br /&gt; next&lt;br /&gt;end function&lt;/font&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-116619509896387015?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/116619509896387015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=116619509896387015' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/116619509896387015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/116619509896387015'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/12/auditing-file-shares-on-clients.html' title='Auditing File Shares on Clients'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-116541410735608712</id><published>2006-12-06T06:08:00.000-06:00</published><updated>2006-12-06T08:08:27.453-06:00</updated><title type='text'>Response to Digg Article Claiming to Free up Memory</title><content type='html'>So, a post on Digg.com recently came up where someone claimed that running &lt;i&gt;rundll32.exe advapi32.dll,ProcessIdleTasks&lt;/i&gt; would in reality "clear up your system memory" and make your system run faster as a result! Of course, no claim like this should be believed these days without some factual basis, so I decided to do a little bit of research since I have a relatively good understanding of Windows as an o/s, and a novice understanding of programming.&lt;br /&gt;&lt;br /&gt;As it turns out, there truly is a function in advapi32.dll called &lt;i&gt;ProcessIdleTasks&lt;/i&gt;; This can be found using a tool from &lt;a href="http://www.nirsoft.net"&gt;Nirsoft&lt;/a&gt; called &lt;a href="http://www.nirsoft.net/utils/dll_export_viewer.html"&gt;DllExport Viewer&lt;/a&gt;. What is not correct, however, is the general understanding of what this function does. Simply doing a Google search for this function's name yielded quite a few results including articles and forum postings in which people claimed that this function freed up memory in Windows. Another interesting search result came from Microsoft itself, in the form of an &lt;a href="http://www.microsoft.com/whdc/system/sysperf/benchmark.mspx#EFF"&gt;article about benchmarking&lt;/a&gt;. In this article, it clearly states the following:&lt;br /&gt;&lt;br /&gt;&lt;font style="font-family: courier"&gt;"The file placement optimization, which is done no more often than once every three days, is an example of a task that is carried out when the system is deemed to be idle. System Restore and other features of Windows XP also attempt to defer some work until the system is deemed to be idle. There are also some done-once-after-setup work items that also operate under the Idle Task Scheduling mechanisms. &lt;br /&gt;&lt;br /&gt;All of these "idle tasks" are controllable by a system API in advapi32.dll, ProcessIdleTasks. The APIs sole purpose is to allow benchmarks a simple way to force any pending idle tasks to be executed immediately, without having to wait a lengthy period of time."&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;That, to me, seems like it has absolutely &lt;b&gt;nothing&lt;/b&gt; to do with "memory optimization." It would seem that this function simply puts Windows XP into an idle state, enabling it to perform tasks that it wouldn't normally do while the computer is in use. Anyway, I hope this clears up some misunderstandings regarding the usage of this function.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-116541410735608712?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/116541410735608712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=116541410735608712' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/116541410735608712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/116541410735608712'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/12/response-to-digg-article-claiming-to.html' title='Response to Digg Article Claiming to Free up Memory'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-116498299579263210</id><published>2006-12-01T08:22:00.000-06:00</published><updated>2006-12-01T08:23:15.820-06:00</updated><title type='text'>Sketching out the Lightbox</title><content type='html'>Here is the next video in which I draw out a quick sketch of the lightbox.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/J8QdZlbMhRM"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/J8QdZlbMhRM" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-116498299579263210?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/116498299579263210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=116498299579263210' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/116498299579263210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/116498299579263210'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/12/sketching-out-lightbox.html' title='Sketching out the Lightbox'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-116494446070796454</id><published>2006-11-30T21:34:00.000-06:00</published><updated>2006-11-30T21:41:40.646-06:00</updated><title type='text'>Creating a Lightbox for Indoor Photography</title><content type='html'>Okay, so all my posts until now have been pretty much related to systems administration. It's time to take a turn and focus on the hobby that has recently been consuming a portion of my time, photography. The temperature was around 60 the past several days and the weather has been great ... until today. It dropped all the way to the mid 20's, it's overcast, and just gloomy in general. I decided this afternoon after work that I was going to find something to photography. I got some street clothes on, grabbed my camera, and headed out the door to find my photography subject(s). Not more than 30 seconds after walking out the door, I noticed that my hoody wasn't keeping me very warm, and before another 15 seconds passed, I was complaining to myself about how cold and windy it was. Due to my determination, I continued on for a couple minutes and went to my apartment complex's commons area, which has a nice pond and a path around it, expecting to find something to photograph. Unfortunately, by the time I reached the path, I was done, and I sure wasn't going to find any good photos outdoors today, so I headed back home.&lt;br /&gt;&lt;br /&gt;Determined to not be phased by the unfortunate turn of events this afternoon, I decided that I was going to make a lightbox. After all, I have been wanting to do close-up photography, and the weather can't affect what you're doing inside :-) I did some quick searching online, found a basic idea for a lightbox, and headed over to Home Depot, and then Hobby Lobby in search of my materials. In an hour's time, I was home with everything I needed to get started! I documented the process of building a lightbox for anyone who has never done it before, and I have just posted my first video in the short series on Youtube. For all of you out there, here it is:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/_YL8orseLKE"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/_YL8orseLKE" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-116494446070796454?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/116494446070796454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=116494446070796454' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/116494446070796454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/116494446070796454'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/11/creating-lightbox-for-indoor.html' title='Creating a Lightbox for Indoor Photography'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-116480727667454558</id><published>2006-11-29T07:27:00.000-06:00</published><updated>2006-11-29T07:34:36.696-06:00</updated><title type='text'>Windows XP Shortcut Key Frustrations</title><content type='html'>Okay, so my machine at work was imaged for me when I started here, and unfortunately, one person seemed to think that using ctrl+alt+home on a shortcut file to a script, and then sticking it in the All Users profile was something that &lt;span style="font-weight: bold;"&gt;everyone&lt;/span&gt; should use. Since I have other uses for ctrl+alt+home, specifically Winamp's global hotkeys to pause my music, I really wanted to get rid of this shortcut. At the time, I didn't know the shortcut existed, much less&lt;span style="font-weight: bold;"&gt; where&lt;/span&gt; it existed, so after searching around, I found a utility that lists out shortcut files with XP global shortcut keys assigned to them. I deleted the shortcut file, but lo and behold Winamp &lt;span style="font-weight: bold;"&gt;still&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;wouldn't register my global shortcut key!&lt;br /&gt;&lt;br /&gt;Great ... I figured I was stuck, but then I thought of a workaround: Find another shortcut file, assign the global hotkey to it, apply the change, and then remove it. Voila ... after doing this, Winamp was able to successfully register the hotkey :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-116480727667454558?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/116480727667454558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=116480727667454558' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/116480727667454558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/116480727667454558'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/11/windows-xp-shortcut-key-frustrations.html' title='Windows XP Shortcut Key Frustrations'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-116231758924358787</id><published>2006-10-31T11:47:00.000-06:00</published><updated>2006-11-01T06:11:38.256-06:00</updated><title type='text'>Comparing Machine Accounts in Two Directories</title><content type='html'>&lt;p&gt;The purpose of this script is to pull a registry key from all of our client machines to determine whether it has statically configured DNS servers or not. The challenge I am targeting is that some of our machines are joined to our Active Directory domain and can be authenticated against using my domain user account, however, about half of them are still &lt;strong&gt;not&lt;/strong&gt; and I need to use a local user account on those machines to authenticate with. I approached this challenge, instead of using error handling, by using a &lt;em&gt;Scripting.Dictionary&lt;/em&gt; object in which the keys contain the computer names ("Workstation" objects) from eDirectory/ZENworks, and the value contains the same machine name ("computer" objects) in Active Directory IF, and only IF the machine account exists in Active Directory. If Active Directory does not have a corresponding machine account, the value for the key will remain (string) "NULL". By iterating over the &lt;em&gt;Scripting.Dictionary&lt;/em&gt; object, I can easily determine whether I should use domain authentication or local authentication based on whether the value for each key contains the same computer name or "NULL". Of course, I'm sure there will be some exceptions that need to be handled via error handling, but at least I'm not using error handling as my primary method of testing authentication. Here is the main logic of the script without the nitty gritty registry stuff:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;'Dictionary will hold name of computer from eDirectory AND Active Directory (if applicable). Use this to test for local or domain authentication!&lt;br /&gt;dim computers, cycle&lt;br /&gt;set computers = CreateObject("Scripting.Dictionary")&lt;br /&gt;&lt;br /&gt;'Dynamically obtain root of Active Directory domain partition&lt;br /&gt;set rootdse = GetObject("LDAP://RootDSE")&lt;br /&gt;dirRoot = rootdse.Get("defaultNamingContext")&lt;br /&gt;&lt;br /&gt;main()&lt;br /&gt;&lt;br /&gt;function main()&lt;br /&gt;'Populate computer names from eDirectory&lt;br /&gt;searchDir "o=[YourRootNetwareOrg]&lt;rootorganization&gt;","[eDirectoryServerIP]&lt;novellserverip&gt;/"&lt;br /&gt;'Populate computer names from Active Directory&lt;br /&gt;searchDir dirRoot, ""&lt;br /&gt;&lt;br /&gt;pckeys = computers.keys()&lt;br /&gt;for each key in pckeys&lt;br /&gt;wscript.echo key &amp; " :: " &amp;amp; computers(key)&lt;br /&gt;next&lt;br /&gt;end function&lt;br /&gt;&lt;br /&gt;'Server is OPTIONAL parameter. If connecting to Active Directory from a domain account, just use double quotes.&lt;br /&gt;'Please put a slash after the name/IP if you specify one.&lt;br /&gt;function searchDir(dn, server)&lt;br /&gt;set root = GetObject("LDAP://" &amp; server &amp;amp; dn)&lt;br /&gt;&lt;br /&gt;for each dirobj in root&lt;br /&gt;select case dirobj.class&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;case "ndsContainerLoginProperties"&lt;br /&gt;searchDir dirobj.name &amp; "," &amp;amp; dn, server&lt;br /&gt;case "organizationalUnit"&lt;br /&gt;searchDir dirobj.distinguishedName, ""&lt;br /&gt;case "container"&lt;br /&gt;searchDir dirobj.distinguishedName, ""&lt;br /&gt;case "computer"&lt;br /&gt;'Need to use Right function to cut of "cn=" from the computer's name&lt;br /&gt;pcname = right(dirobj.name,len(dirobj.name)-3)&lt;br /&gt;if computers.exists(pcname) then computers.item(pcname) = pcname&lt;br /&gt;case "Workstation"&lt;br /&gt;'Need to use Right function to cut of "cn=" from the computer's name&lt;br /&gt;computers.add right(dirobj.name,len(dirobj.name)-3),"NULL"&lt;br /&gt;end select&lt;br /&gt;next&lt;br /&gt;&lt;br /&gt;end function&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Now that you have this much, you can write another function that iterates over the Dictionary object and perform some random operation based on whether or not each computer has a corresponding computer object in Active Directory, or, any directory really. Due to the differences in directories though, you might have to tweak the object classes that the select case statement is testing for. If you have any questions, please feel free to e-mail me!&lt;/p&gt;&lt;p&gt;Trevor Sullivan&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-116231758924358787?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/116231758924358787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=116231758924358787' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/116231758924358787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/116231758924358787'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/10/comparing-machine-accounts-in-two.html' title='Comparing Machine Accounts in Two Directories'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-116225933704700284</id><published>2006-10-30T19:46:00.000-06:00</published><updated>2006-10-30T19:48:57.063-06:00</updated><title type='text'>Reading EXIF Data from VBscript</title><content type='html'>Well, today I came across &lt;a href="http://www.reneris.com/tools/default.asp"&gt;SImage&lt;/a&gt;. This free, and open-source COM object allows you to work with EXIF data from image files. Pretty nifty ... I'm playing with a classic ASP that'll display such data using this free library :) Perhaps I'll post some examples ... enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-116225933704700284?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/116225933704700284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=116225933704700284' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/116225933704700284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/116225933704700284'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/10/reading-exif-data-from-vbscript.html' title='Reading EXIF Data from VBscript'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-116047926825038858</id><published>2006-10-10T05:58:00.000-05:00</published><updated>2006-10-10T06:21:08.263-05:00</updated><title type='text'>Disabling NetBIOS over TCP/IP Via Registry</title><content type='html'>So, if anyone out there is trying to get rid of NetBIOS to reduce broadcast traffic and optimize their network, I'm putting together a short guide on how to disable NetBIOS via the registry, should you need to perform this operation on a large number of computers. Since manually visiting each computer requires too much work, we'll look at the registry value we need to change using a script to disable NetBIOS.&lt;br /&gt;&lt;br /&gt;The registry value we need to change resides in the HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\NetBT\Parameters\Interfaces\Tcpip_&lt;nicguid&gt;\ key, and the value's name is NetBIOSOptions. There are three valid values for this value:&lt;br /&gt;&lt;br /&gt;0x0: Use NetBIOS setting from DHCP server or Enable if static IP is used&lt;br /&gt;0x1: Enable NetBIOS over TCP/IP&lt;br /&gt;0x2: Disable NetBIOS over TCP/IP&lt;br /&gt;&lt;br /&gt;As you can probably tell, we want to use the last option, 0x2 as the correct value to disable NetBIOS. Let's look at how we can use WMI to access the registry of a computer remotely and change this value for us.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;strComputer = "."&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;HKLM = 2147483650&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;valuename = "NetBIOSOptions"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;subkey = "System\CurrentControlSet\Services\NetBT\Parameters\Interfaces\"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;'Get registry provider from WMI&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;set&lt;/span&gt; registry = GetObject("winmgmts:\\" &amp; strComputer &amp;amp; "\root\default:StdRegProv")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;'Get subkeys of Interfaces key ... these will be random GUIDs, so we need to grab them dynamically&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;registry.EnumKey HKLM, subkey, subkeys&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;for&lt;/span&gt; i = 0 &lt;span style="color: rgb(51, 51, 255);"&gt;to&lt;/span&gt; ubound(subkeys)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    'Set hex value of registry value to 0x2. We have to use the built-in VBscript hex function to convert from decimal to hex data type&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    registry.SetDWORDValue HKLM, subkey &amp; subkeys(i), valuename, hex(2)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;next&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-116047926825038858?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/116047926825038858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=116047926825038858' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/116047926825038858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/116047926825038858'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/10/disabling-netbios-over-tcpip-via.html' title='Disabling NetBIOS over TCP/IP Via Registry'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-115953074658842275</id><published>2006-09-29T06:38:00.000-05:00</published><updated>2006-09-29T11:51:22.713-05:00</updated><title type='text'>Using the ShellExec Object to Your Advantage</title><content type='html'>Good day everyone! Today, I have for you a short article on using the &lt;a href="http://msdn2.microsoft.com/en-us/library/2f38xsxe.aspx"&gt;WshScriptExec&lt;/a&gt; object to help you write quality VBscripts while still being able to make calls to external executables. The WshScriptExec object cannot be directly instantiated, but rather is captured when executing a process. By setting a variable equal to the output of the WshShell.Exec method, you can grab an instance of the WshScriptExec object. Once you "get" this object, you are able to manipulate the running process by sending commands to it, or by looking at the console output of the program. Let's run through a quick example of how we can use the WshScriptExec object to make a better script.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);font-size:130%;" &gt;Sample Script&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Purpose&lt;/span&gt;: We will create a sample script to back up some plain-text log files (IIS logs for example), compress them into an archive folder using &lt;a href="http://www.7-zip.org/"&gt;7-zip&lt;/a&gt;, and then delete the temporary copy of the log files we create. Yes, I know we could back them up directly from the source, but it's always good to have a temporary working copy and clean up afterwards.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Strategy&lt;/span&gt;: 1) Using the FileSystemObject (FSO), copy the log files from a network path to the local machine. 2) Use the WshShell.Exec method to execute 7-zip with proper arguments. 3) We will use the StdOut property of the WshScriptExec object to determine when 7-zip has completed. 4) Use existing FSO to remove the (now compressed) log files.&lt;br /&gt;&lt;br /&gt;&lt;div  style="background-color: rgb(205, 205, 205);font-family:courier new;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-style: italic;"&gt;'Create FSO and Shell object&lt;/span&gt;&lt;br /&gt;set fso = CreateObject("Scripting.FileSystemObject")&lt;br /&gt;set shell = CreateObject("Wscript.Shell")&lt;br /&gt;&lt;span style="font-style: italic;"&gt;'Establish local and remote working directories&lt;/span&gt;&lt;br /&gt;remotedir = "\\fileserver01\logs"&lt;br /&gt;localdir = shell.SpecialFolders("MyDocuments") &amp; "\logs\"&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;'Function to copy log files from remotedir to localdir&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;function copyFiles()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    'Use CopyFile method of FSO to copy files&lt;/span&gt;&lt;br /&gt;  fso.copyfile remotedir &amp; "\*.log", localdir&lt;br /&gt;end function&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;'Function to compress files with 7-zip&lt;/span&gt;&lt;br /&gt;function compressFiles()&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    'use WshShell.Exec method to execute 7-zip command. Double-double quotes are there to encapsulate file paths with spaces--IMPORTANT&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    'Capture return value (the WshScriptExec object we want) in variable &lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;output&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;  set output = shell.exec "7za a """ &amp; localdir &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp; "archive"" """ &amp; localdir &amp;amp; "*.log"""&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    'Don't proceed with rest of script (log clean-up) until 7-zip is done executing. 7-zip will normally write "Everything is OK" to the console when completed successfully&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    while not (instr(output.stdout.readall, "Everything") &lt;&gt; 0)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    wscript.sleep 100&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    wend&lt;/span&gt;&lt;br /&gt;end function&lt;br /&gt;&lt;br /&gt;function cleanUp()&lt;br /&gt;   fso.deletefile localdir &amp;amp; "*.log"&lt;br /&gt;end function&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;So there you have it. By using the StdOut property, we can test the console output to see if 7-zip executed properly. It's missing a main function to make calls to the other functions, but ... the concept is there, and 7-zip compression is awesome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-115953074658842275?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/115953074658842275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=115953074658842275' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/115953074658842275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/115953074658842275'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/09/using-shellexec-object-to-your.html' title='Using the ShellExec Object to Your Advantage'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-115948291815446111</id><published>2006-09-28T17:25:00.000-05:00</published><updated>2006-09-28T17:35:18.210-05:00</updated><title type='text'>A little more personal info, and ...</title><content type='html'>Well, I've mostly recovered from the vehicle accident, and I've got a new car now, a 2006 Hyundai Sonata v6 :-) Finally settled with the insurance company and all ... which took much longer than it should have, but oh well, at least I got my reimbursement and hopefully I won't have to deal with this type of situation again in the near future ... *sigh*&lt;br /&gt;&lt;br /&gt;Anyway, you all aren't here to hear about my personal life, I don't think ... so, I figured I would introduce a small utility included with VMware Server called &lt;span style="font-style: italic;"&gt;vmware-mount&lt;/span&gt;. This utility is great, because it allows you to mount a virtual hard disk image as a partition in another Windows computer! Pretty neat isn't it? Well, here's the situation I've got: I'm installing Windows 2003 on a VM at work, and I need to transfer 2003 SP1 to the VM. I'm not sure if there's a way to do this through the VMware GUI, but I know that vmware-mount will come to the rescue! Here's the basic syntax to mount a hard-disk image: &lt;span style="font-weight: bold;"&gt;vmware-mount x: "c:\virtual machines\imagefile.vmdk"&lt;/span&gt; &lt;-- this will mount the specified hard-disk to x:. Pretty handy 'eh?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-115948291815446111?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/115948291815446111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=115948291815446111' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/115948291815446111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/115948291815446111'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/09/little-more-personal-info-and.html' title='A little more personal info, and ...'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-115515067300748974</id><published>2006-08-09T14:08:00.000-05:00</published><updated>2006-08-09T14:11:13.026-05:00</updated><title type='text'>On a More Personal Note ...</title><content type='html'>This is what happens when a semi turns in front of you at an intersection ... my dead 2003 Saturn ION.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6085/2190/1600/IMG_0212.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/6085/2190/320/IMG_0212.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6085/2190/1600/IMG_0211.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/6085/2190/320/IMG_0211.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6085/2190/1600/IMG_0210.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/6085/2190/320/IMG_0210.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-115515067300748974?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/115515067300748974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=115515067300748974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/115515067300748974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/115515067300748974'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/08/on-more-personal-note.html' title='On a More Personal Note ...'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-115438270352962121</id><published>2006-07-31T16:24:00.000-05:00</published><updated>2006-07-31T17:42:00.356-05:00</updated><title type='text'>Deploying a BIOS Update to Dell Systems</title><content type='html'>&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="color: rgb(255, 0, 0);font-size:100%;" &gt;DISCLAIMER: I am in no way responsible for any damage to any system cause by following the instructions in this article. This is purely informational and should only be used by trained Systems Administrators well-versed in both computer hardware and software. Your actions, your responsibilities. :-)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;Introduction&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;So, if you're a Systems/Network Administrator, a Desktop Admin, or maybe even part of a smaller helpdesk staff, you may be familiar with the task of BIOS upgrades. BIOS upgrades have been a pesky task, often because there hasn't been a method of upgrading large numbers of systems simultaneously, or at least automatically. What I'm going to show you today is how you can use a few simple components to update the firmware on any number of Dell Systems automatically. For simplicity's sake, I'm not going to go into the details of how to actually deploy a script, because that's ultimately up to you, although I'll leave a couple of recommendations for how you &lt;span style="font-weight: bold;"&gt;could &lt;/span&gt;do it.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;My Situation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;In my particular case, I have approximately 550 client computers needing BIOS upgrades, which consist of a variety of Dell Optiplex GX270 and GX280 small form-factor (SFF) desktops; Most of them are the older 270's. This morning, I happened to notice that on 7/21/2006, Dell released a new revision of the GX270's firmware. This prompted me to investigate some method of deploying the BIOS update, especially since I've come across this situation before, but haven't had the brains to find a real resolution to it; That said, Dell's Support department didn't exactly help that much ... despite a couple calls placed this morning, I ended up telling both technicians I spoke to how to do it in the end. One of them didn't even know what Dell OpenManage was before I told him about it ... *yikes*&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="color: rgb(51, 51, 255);"&gt;What You Need&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;You really don't need much to complete this seemingly onerous task. Within about the next 15 minutes, I'll bet you have a pretty good idea in mind of how to approach this. The four things you need to mass-update your desktop computer's firmware are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Dell OpenManage Client Instrumentation (OMCI)&lt;/li&gt;&lt;li&gt;Basic Windows Scripting Host skills&lt;/li&gt;&lt;li&gt;The executable file for upgrading your system's BIOS (I've only tested the GX270's)&lt;/li&gt;&lt;li&gt;Some method of deploying a script file (I'll get into this later)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Armed with these four tools, you'll be able to get your entire network up-to-date in no time. Now that we know what we need ahead of time, let's get down to the grindstone and make things happen!&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 51, 255);"&gt;How It Works&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The basic process is going to look something like this:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Deploy the OMCI to all client machines (no reboot required)&lt;/li&gt;&lt;li&gt;Extract the ever so valuable HDR file from the BIOS update executable&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Whip up a quick script that uses the OMCI's WMI provider to flash the BIOS&lt;/li&gt;&lt;li&gt;Deploy the script&lt;/li&gt;&lt;/ol&gt;&lt;span style="color: rgb(51, 51, 255);font-size:130%;" &gt;&lt;span style="font-weight: bold;"&gt;Deploying the OMCI&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Deploying Dell's OMCI is pretty simple. You'll want to download the latest version of the client for your system from &lt;a href="http://support.dell.com"&gt;http://support.dell.com&lt;/a&gt;. As of this writing, the most current version if &lt;a href="http://support.dell.com/support/downloads/download.aspx?c=us&amp;l=en&amp;amp;s=gen&amp;releaseid=R118485&amp;amp;SystemID=PLX_PNT_CEL_GX270&amp;os=WW1&amp;amp;osl=en&amp;deviceid=12043&amp;amp;amp;amp;devlib=0&amp;typecnt=1&amp;amp;vercnt=1&amp;formatcnt=1&amp;amp;libid=36&amp;fileid=157133"&gt;v7.3&lt;/a&gt;. After unpacking the file you download from Dell Support, you'll be left with a &lt;span style="font-style: italic;"&gt;setup.exe&lt;/span&gt; and a couple other files. &lt;span style="font-style: italic;"&gt;Setup.exe &lt;/span&gt;is the one we want from here; You'll want to run this from the command-line on each computer you want to install the OMCI on: "setup.exe /s /v/qn". This will instruct &lt;span style="font-style: italic;"&gt;setup.exe&lt;/span&gt; to execute silently, and will pass the /qn CLI parameters to &lt;span style="font-style: italic;"&gt;msiexec.exe &lt;/span&gt;which instruct it to operate quietly with no user interface. Once you get this packaged up, here's a few methods you could use to deploy it:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Novell Zenworks Desktop Management&lt;/li&gt;&lt;li&gt;Microsoft Active Directory Group Policy Startup Script&lt;/li&gt;&lt;li&gt;Microsoft Systems Management Server 2003 Application Package&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Script using WMI's Win32_Process class to spawn a process locally &lt;span style="font-style: italic;"&gt;or remotely&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="color: rgb(51, 51, 255);font-size:130%;" &gt;&lt;span style="font-weight: bold;"&gt;Extracting the HDR File&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Since we are using the OMCI to install the BIOS update, we can't pass the executable file to it, we have to give it an HDR file. If you're using a Windows computer to extract the HDR file, open a command prompt, cd to the folder where the BIOS executable resides, and run the following command: "&lt;span style="font-style: italic;"&gt;&lt;biosexe&gt; -writehdrfile&lt;/biosexe&gt;&lt;/span&gt;" minus the quotes. If you're running a Linux system, Dell has &lt;a href="http://linux.dell.com/libsmbios/main/bios_hdr.html"&gt;some instructions&lt;/a&gt; on how to extract the HDR file from the executable. I'm assuming that most of you will have a Windows workstation available to do these operations on. Now that we've got the HDR file, put it on a network share accessible to your clients (eg. \\server\ITshare), and then let's look at how to create a script to install the new update.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 51, 255);font-size:130%;" &gt;Write a Quick Script&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Well, when I said whip up a script earlier on, I really meant it; This script will be 2 lines long and will perform the task of updating the machine's BIOS. First, a little bit of background; The Dell OMCI actually isn't much more than a WMI provider that exposes quite a bit of information and functionality to the WMI service. Once installed though, it started popping up a bunch of messages at me about chassis intrusion, but how to disable those dumb notifications is beyond the scope of this article. Basically, our script will connect to the newly installed namespace (root\dellomci), grab the &lt;span style="font-style: italic;"&gt;Dell_Configuration&lt;/span&gt; class, and call the &lt;span style="font-style: italic;"&gt;FlashBios &lt;/span&gt;static method (&lt;a href="http://msdn2.microsoft.com/en-us/library/79b3xss3.aspx"&gt;more on static classes/members&lt;/a&gt;), passing it the path to the HDR file as its only parameter, to finally update the system's BIOS. Without further to do, here we go:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;set dellconf = GetObject("winmgmts:root\dellomci:Dell_Configuration)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;dellconf.FlashBIOS("\\server\ITshare\gx270.hdr")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yep, that's it. This is what you'll want to run on the systems you want to update with this BIOS version. Pretty simple script isn't it? &lt;span style="color: rgb(255, 0, 0);"&gt;If you want to investigate more functionality in the OMCI, I encourage you to use the &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;wbemtest&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; utility provided by Microsoft in Windows XP and connect to the root\dellomci namespace. Choose Enum Classes --&gt; Recursive --&gt; OK for a full list of classes in this namespace.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 51, 255);font-size:130%;" &gt;&lt;span style="font-weight: bold;"&gt;Deploying Your Script&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Well, now that we have all the pieces together, we can finally deploy the script to our clients. Again, we can use similar methods as above to deploy the script:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Novell Zenworks Desktop Management&lt;/li&gt;&lt;li&gt;Active Directory Startup Scripts (untested)&lt;/li&gt;&lt;li&gt;Remotely spawn a process using the Win32_Process class in WMI (root\cimv2)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;E-mail out a script file to users (unreliable/insecure)&lt;/li&gt;&lt;/ul&gt;Once you've decided on one of these methods to deploy your script, you should be good to go.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-size:130%;" &gt;&lt;span style="font-weight: bold;"&gt;Conclusion&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Well, I hope this short tutorial has provided some insight to someone out there. I took the time to write this guide because my own attempts to locate information regarding BIOS deployment failed pitifully. I couldn't really find any firm answers to many of my questions, especially about using OpenManage IT Assistant to send out the firmware updates. No one at Dell could give me straight answers, and no one knew how all the pieces fit together properly. My initial attempts to resolve this predicament began a little over a year ago, but I gave up trying to find information on it. After learning about scripting, WMI, and other general computing concepts, I was finally able to gather the pieces myself and make everything work the way I wanted it to. If anyone would like to ask questions about this tutorial, or about WSH scripting, WMI, or related technologies, I'd love to hear them. Please feel free to e-mail me at pcNOSPAMgeek101 at gmail.com. Until next time ....&lt;br /&gt;&lt;br /&gt;Trevor Sullivan&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-115438270352962121?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/115438270352962121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=115438270352962121' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/115438270352962121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/115438270352962121'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/07/deploying-bios-update-to-dell-systems.html' title='Deploying a BIOS Update to Dell Systems'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-115271738238058277</id><published>2006-07-12T09:45:00.000-05:00</published><updated>2006-07-12T11:30:06.526-05:00</updated><title type='text'>DNS Client :: DNS Resolution Suffixes</title><content type='html'>&lt;span style="color: rgb(102, 102, 204);font-size:180%;" &gt;What is DNS?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;DNS is an interesting, but very well thought-out concept for name-to-IP, IP-to-name, SRV-to-name, and other types of resolution. It is much more versatile than NetBIOS, it's easier to manage, it's more organized, and it just makes sense, plain and simple. DNS also allows you to have multiple servers of the same name, but still be able to tell them apart.&lt;br /&gt;&lt;br /&gt;Microsoft's Active Directory relies heavily on DNS and is &lt;span style="font-weight: bold;"&gt;required &lt;/span&gt;for operating an Active Directory Domain. It is required for clients to locate vital services via DNS Service Records (SRV records) such as LDAP, Global Catalogue, and a Kerberos Key Distribution Center (KDC). With this in mind, you ought to realize that without DNS, you can't really have a working Active Directory Domain. So ... what if you have &lt;span style="font-weight: bold;"&gt;several&lt;/span&gt; Active Directory domains and you need to set up proper DNS name resolution on your client machines?&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 204);font-size:180%;" &gt;A Multi-Domain Environment&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Well, say you have a tri-Active Directory Domain environment with the names &lt;span style="font-style: italic;"&gt;DomA.local&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;DomB.local&lt;/span&gt;, and &lt;span style="font-style: italic;"&gt;DomC.local&lt;/span&gt;, and you need your clients to be able to access resources in each of these domains (in case you haven't guessed, this is the scenario at my current employer). Well, normally (I shouldn't say normally, because these are all old technologies), your clients would resolve names via NetBIOS broadcasts, a HOSTS file (ugh), or WINS, but WINS is dying, so we're left with a pure DNS environment (ahhhhhh, when properly set up, DNS is best). So your clients are most likely pointed to whichever DNS server is authoritative for the client's domain, and when you ping a resource by hostname &lt;span style="font-weight: bold;"&gt;alone, &lt;/span&gt;everything works okay, right? Well, that depends entirely on which domain you are trying to access a resource in. If your client is a member of &lt;span style="font-style: italic;"&gt;DomA.local&lt;/span&gt;, is pointed at the authoritative server for that domain, and you're trying to access a resource in &lt;span style="font-style: italic;"&gt;DomB.local&lt;/span&gt; by only its hostname (eg. &lt;span style="font-style: italic;"&gt;server01&lt;/span&gt;), chances are that you'll be unable to resolve its name properly. Why is this?&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 204);font-size:180%;" &gt;A Scenario of Ambiguous Names&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When a DNS client attempts to resolve a name in DNS, it must resolve its Fully Qualified Domain Name (FQDN) because you could have an identically named resource that's in a different domain. The DNS suffix (the actual domain name itself) is what separates an identically named resource in &lt;span style="font-style: italic;"&gt;DomA.local&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;DomB.local&lt;/span&gt;, and even &lt;span style="font-style: italic;"&gt;DomC.local&lt;/span&gt;. What this means is that if you have a server named &lt;span style="font-style: italic;"&gt;server01 &lt;/span&gt;in each of your three domains, your clients would have to resolve it via its FQDN to void the ambiguity of the three identically named servers. So how can you avoid having to type the FQDN of a server if it has an similarly named twin in another domain? Well, you can't! But there is a way to tell your clients which one to locate &lt;span style="font-weight: bold;"&gt;first&lt;/span&gt;, and this is what we'll investigate below.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 204);font-size:180%;" &gt;Also ...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Another scenario may be this: You have a client that is a member of &lt;span style="font-style: italic;"&gt;DomA.local&lt;/span&gt;. The client needs to resolve the IP of &lt;span style="font-style: italic;"&gt;server99.DomB.local&lt;/span&gt;, but doesn't specify the domain name (aka domain suffix), only the hostname (server99). If it doesn't try to append &lt;span style="font-style: italic;"&gt;DomB.local&lt;/span&gt; when resolving the name, it will fail, because &lt;span style="font-style: italic;"&gt;DomA.local&lt;/span&gt; doesn't have a server99, and it stops there. You must instruct the client to append &lt;span style="font-style: italic;"&gt;DomB.local&lt;/span&gt; when trying to resolve the hostname in order for it to work properly (this is assuming that your DNS Administrator has properly set up conditional forwarding for each of the domains).&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 204);font-size:180%;" &gt;So What Do I&lt;/span&gt;&lt;span style="color: rgb(102, 102, 204);font-size:180%;" &gt; Have to Change?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Once you know &lt;span style="font-weight: bold;"&gt;how &lt;/span&gt;the setting is stored, you can then decide on how to &lt;span style="font-weight: bold;"&gt;change&lt;/span&gt; the given setting. The setting in question is a comma-separated string value stored in the &lt;span style="font-style: italic;"&gt;HKEY_LOCAL_MACHINE&lt;/span&gt; registry hive on each computer. Here is the full path: &lt;span style="font-style: italic;"&gt;SYSTEM\CurrentControlSet\Services\TcpIp\Parameters\SearchList&lt;/span&gt;. So in order to change this setting, all you need to do is figure out what domains you have (&lt;span style="font-style: italic;"&gt;DomA.local, DomB.local, &lt;/span&gt;and &lt;span style="font-style: italic;"&gt;DomC.local&lt;/span&gt;), and decide on what order you would like clients to resolve names in. In most, if not all, circumstances your clients should first try the domain suffix which they are a member of (eg. client is member of &lt;span style="font-style: italic;"&gt;DomA.local&lt;/span&gt;, and should therefore attempt to resolve names to that domain first) so that they can contact Domain Controllers and such properly, but beyond that it's basically up to you what order you'd like them to try name resolution in. Basically, you'll end up having a string value looking like "&lt;span style="font-style: italic;"&gt;doma.local,domb.local,domc.local&lt;/span&gt;". If you ever add a 4th domain (DomD.local), just append a comma and the domain name to it.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6085/2190/1600/searchList.0.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/6085/2190/200/searchList.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="color: rgb(102, 102, 204);font-size:180%;" &gt;And How Do I Change It?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In Windows, the DNS client's &lt;span style="font-style: italic;"&gt;Default Search Suffix(es)&lt;/span&gt; is configurable via the TCP/IP properties of a particular network adapter. This setting tells the client which Domain Names (aka Suffixes) to append to a hostname, when only a hostname is provided, to attempt to resolve its name. Multiple domains can be specified, and the top one is always tried first, followed by the 2nd, 3rd, and so on. If none of the FQDNs generated by appending the suffix to the hostname can be resolved, the client will fail. Setting this option through the Windows GUI is easy (see screenshot), but how, as a desktop administrator, can you configure this option on 10 clients at once? What about 50, or 500?&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 204);font-size:180%;" &gt;I Knew You'd Say That ...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes indeed, once again in our lifetime, we'll need to write a script to change this. As you probably can recall from a previous article, I showed you how to change registry data with a Visual Basic Script plus the added strength of WMI. You don't &lt;span style="font-weight: bold;"&gt;need&lt;/span&gt; WMI and can also change registry data with a&lt;span style="font-style: italic;"&gt; Wscript.Shell&lt;/span&gt; object which we'll review here briefly; The nice thing about WMI is that you can run &lt;span style="font-weight: bold;"&gt;one&lt;/span&gt; script locally on your management workstation or server, instead of having to delpoy a script to all your workstations. We'll write one script to see how to change the actual registry value using a &lt;span style="font-style: italic;"&gt;Wscript.Shell&lt;/span&gt; object, and then we'll write a script with WMI and ADSI/LDAP to grab all your computer accounts from your Active Directory domain, and connect to each of them to change this value. Here goes:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;'Create a shell object&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;set myShell = CreateObject("Wscript.Shell")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;'Write the registry value&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;myShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TcpIp\Parameters\SearchList","doma.local,domb.local,domc.local"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Simply save that text to a file with a vbs extension and double-click it. OMG was that hard or what? Two lines of actual code to accomplish our simple administration task? It cannot be! My hope is that you realize that programming/scripting is not as hard as it seems, and that you too can master it even if you haven't started, or just recently starting learning it. The code to connect to a directory service and use WMI is almost just as easy, it's just a little bit more code. &lt;span style="font-weight: bold; font-style: italic;"&gt;For simplicity purposes, this script will assume that all your computer objects are in the default Computers container in Active Directory.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;'Get the RootDSE LDAP object&lt;br /&gt;set oLDAP = GetObject("LDAP://RootDSE")&lt;br /&gt;'Extract the domain name in LDAP format&lt;br /&gt;myDomain = oLDAP.Get("defaultNamingContext")&lt;br /&gt;'Get the default computers container in your domain&lt;br /&gt;set oLDAP = GetObject("LDAP://cn=computers," &amp; myDomain)&lt;br /&gt;&lt;br /&gt;'For each computer object in the computers container, call the updateDNSSearchOrder method with the computer's name LDAP attribute&lt;br /&gt;for each item in oLDAP&lt;br /&gt;if item.class = computer then updateDNSSearchOrder(item.name)&lt;br /&gt;next&lt;br /&gt;&lt;br /&gt;'Create a function that takes the target PC name as a parameter&lt;br /&gt;function updateDNSSearchOrder(computername)&lt;br /&gt;'Get a WMI object on the remote machine pointing to the StdRegProv class in the root\default namespace&lt;br /&gt;set objWMI = GetObject("winmgmts:\\" &amp;amp;amp;amp;amp;amp;amp;amp; computername &amp;amp; "\root\default:StdRegProv")&lt;br /&gt;'Set the string value using the SetStringValue method of the StdRegProv class. Note the comma at the beginning. Because HKEY_LOCAL_MACHINE is the default hive, you don't need to specify the value for it&lt;br /&gt;objWMI.SetStringValue ,"SYSTEM\CurrentControlSet\Services\TcpIp\Parameters","SearchList","doma.local,domb.local,domc.local"&lt;br /&gt;end function&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;There, that wasn't so bad was it? If you remove all the comments in the code, it's only a few lines long, in fact it's exactly 10! Not bad at all for making a domain-wide change! Anyway, I hope you learned something from this tutorial! Feel free to e-mail me if you have any questions at pcNOgeekSPAM101@gmail.com!&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&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/21640185-115271738238058277?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/115271738238058277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=115271738238058277' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/115271738238058277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/115271738238058277'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/07/dns-client-dns-resolution-suffixes.html' title='DNS Client :: DNS Resolution Suffixes'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-115229159814123477</id><published>2006-07-07T11:45:00.000-05:00</published><updated>2006-07-07T12:09:21.603-05:00</updated><title type='text'>Firefox Rant</title><content type='html'>&lt;span style="font-family: verdana;"&gt;Okay, Firefox is really starting to annoy me. Don't get me wrong, it's a fabulous browser, and I could go on for hours (almost literally) about why it's better (yes, it is unarguably &lt;/span&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;much &lt;/span&gt;&lt;span style="font-family: verdana;"&gt;better) than Microsoft's Internet Explorer. Some of the nicest things about Firefox are:&lt;/span&gt;&lt;br /&gt;&lt;ul style="font-family: verdana;"&gt;&lt;li&gt;The &lt;span style="font-weight: bold;"&gt;about:config&lt;/span&gt; page that allows you to configure almost anything&lt;/li&gt;&lt;li&gt;Tabbed browsing&lt;/li&gt;&lt;li&gt;Search as you type :: I &lt;span style="font-weight: bold;"&gt;love&lt;/span&gt; this&lt;/li&gt;&lt;li&gt;Clear Private Data :: Keep your personal data secure&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Nice bookmark manager&lt;/li&gt;&lt;li&gt;Keyboard shortcuts to open/close/switch tabs, and more&lt;/li&gt;&lt;li&gt;Extensions :: I use &lt;span style="font-weight: bold;"&gt;Forecast Fox&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Adblock&lt;/span&gt;, and &lt;span style="font-weight: bold;"&gt;SessionSaver &lt;/span&gt;(not using SS right at the moment though)&lt;/li&gt;&lt;li&gt;Page source viewer and nicely organized Page Properties window&lt;/li&gt;&lt;li&gt;Resizable text :: This is great for my laptop's high-res LCD panel, ouch on the eyes&lt;/li&gt;&lt;/ul&gt;&lt;a style="font-family: verdana;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6085/2190/1600/firefoxugh.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/6085/2190/320/firefoxugh.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family: verdana;"&gt;Okay, so there I've named off exactly (wow) 10 points that I like about Firefox without really even trying to think of much. Now why am I going off on a rant about why I dislike it? Well, maybe because my laptop has 2GB of RAM in it, and Firefox is using TWENTY-FIVE percent of it! (see screenshot to the left) I currently have FIVE tabs open in Firefox, nothing special, no big images, no embedded flash objects, no media player objects. Just text, some basic images in the respective web pages, and that's it. Why in heaven's name would Firefox be using 512MB+ of RAM for five tabs? I've read stuff on this phenomenon before, and people say it's not memory leaks, they say it's because Firefox caches stuff in memroy. That may or may not be true, but all I know is that I &lt;/span&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;really&lt;/span&gt;&lt;span style="font-family: verdana;"&gt; don't appreciate Firefox using up 25% of my RAM; That's not caching, that's either a memory leak, or they need to fix the amount of caching that Firefox does. Also, did you notice the 6 &lt;/span&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;hours&lt;/span&gt;&lt;span style="font-family: verdana;"&gt; of CPU time there? My laptop has been running for 16 days now, and Firefox has used 6 &lt;/span&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;hours&lt;/span&gt;&lt;span style="font-family: verdana;"&gt; of CPU time. The system process on here has only used &lt;/span&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;half&lt;/span&gt;&lt;span style="font-family: verdana;"&gt; of that, and everybody complains about Explorer's use of CPU time, and that's only 24 minutes. Firefox is a generally good browser, but talk about a &lt;/span&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;resource hog&lt;/span&gt;&lt;span style="font-family: verdana;"&gt;! I wouldn't recommend people with computers older than maybe a year or two to use Firefox ... it's either that, or when Firefox is open for a while, you might as well kiss other program's access to system resources goodbye. Anyway, make your own judgments about Firefox, but I'm seriously thinking about trying Opera for my daily browsing tasks. It seems to run a lot quicker, and there isn't lag opening tabs after a while like Firefox has. Okay, I'm done.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-115229159814123477?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/115229159814123477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=115229159814123477' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/115229159814123477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/115229159814123477'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/07/firefox-rant.html' title='Firefox Rant'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-115133687362700487</id><published>2006-06-26T10:38:00.000-05:00</published><updated>2006-06-26T10:49:32.290-05:00</updated><title type='text'>Finding the Most Recently Used Direct3D Application</title><content type='html'>&lt;span style="font-family: verdana;"&gt;The Windows registry stores a lot of interesting information, and is home to a lot of settings in Windows. Many people seem to overlook this when looking for information, most likely because it can be very intimidating. Things aren't always as hard to find as you might imagine; Most settings are spelled out in plain english. One interesting piece of information I just found out you can obtain is the most recently used application that utilized the Direct3D API. I'm not exactly sure how this could be useful information, but in the right environment, it might be something you need to know. Anyway, the name of the last executable to initialize the Direct3D API is located in the following registry key: HKEY_CURRENT_USER\Software\Microsoft\Direct3D\MostRecentApplication, and the value's name is Name. For example, my computer is currently set to googleearth.exe because that is the last Direct3D-enabled app I used. Anyway, hopefully someone finds this interesting and useful :) Here's a VB script to grab the value, and if you want to use it, copy/paste the text into a .VBS file and double-click it to run it:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: rgb(220,220,220);"&gt;&lt;span style="font-family: courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;dim &lt;/span&gt;appname&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;set &lt;/span&gt;regprov = &lt;span style="color: rgb(51, 51, 255);"&gt;GetObject&lt;/span&gt;("winmgmts:root\default:stdregprov")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;regprov.GetStringValue &lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;2147483649&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;, &lt;/span&gt;"Software\Microsoft\Direct3D\MostRecentApplication", "Name", appname&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;wscript&lt;/span&gt;.echo appname&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-115133687362700487?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/115133687362700487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=115133687362700487' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/115133687362700487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/115133687362700487'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/06/finding-most-recently-used-direct3d.html' title='Finding the Most Recently Used Direct3D Application'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-115110301464154888</id><published>2006-06-23T17:42:00.000-05:00</published><updated>2006-06-23T17:51:25.686-05:00</updated><title type='text'>Remote Task Manager</title><content type='html'>&lt;span style="font-family:verdana;"&gt;    So ... I decided I would post a small HTML application I wrote a little while ago. I've been thinking about how I could improve it, but I don't see much else other than being able to specify a username and password perhaps. I'm sure I could be creative, but that's too much effort :) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    Anyway, you're probably itching to know what the HTA &lt;/span&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;does.&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; As you may derive from the title, it is basically a task manager that allows you to view and kill tasks either locally or remotely. Basically, you use it by typing a computer name in the box, and click &lt;span style="font-style: italic;"&gt;List Processes&lt;/span&gt;. Assuming you are logged on as a user with administrative access to the remote machine (eg. Domain Admin), you'll be able to then view the processes running on the machine, and click the small &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;Kill&lt;/span&gt; link beside the respective process to  make it go bye-bye. It doesn't really do all that much, but it's still sort of cool. Any comments or recommendations on improvements?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Try it yourself&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://www.filehosting.cc/download.php?id=D32ED46D"&gt;&lt;span style="font-family:verdana;"&gt;http://www.filehosting.cc/download.php?id=D32ED46D&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-115110301464154888?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/115110301464154888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=115110301464154888' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/115110301464154888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/115110301464154888'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/06/remote-task-manager.html' title='Remote Task Manager'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-115041336506418602</id><published>2006-06-15T17:11:00.000-05:00</published><updated>2006-06-15T18:16:09.370-05:00</updated><title type='text'>Fixing problems with WMI</title><content type='html'>&lt;span style="font-family: verdana;"&gt;Sometimes (rarely though) you will have a case where the WMI repository gets corrupted, and when you have a script that attempts to run, you get a Null Exception or something like that. Anyway, that's what I got a couple of times today when I deployed a script that applies a few registry changes using the &lt;/span&gt;&lt;span style="font-style: italic; font-family: verdana;"&gt;root\default:StdRegProv&lt;/span&gt;&lt;span style="font-family: verdana;"&gt; class, and I got a couple of reports of it erroring. I didn't initially know any better, but I thought that maybe the StdRegProv class didn't exist in Windows XP SP1 (hence the &lt;/span&gt;&lt;span style="font-style: italic; font-family: verdana;"&gt;Null Reference&lt;/span&gt;&lt;span style="font-family: verdana;"&gt;), but that wasn't the case, because it worked on some other SP1 machines. It wasn't until I tried connecting to the root\cimv2 namespace on the couple of affected machines that I understood what was going on; the WMI repository was corrupt. Here's a quick way of testing if there's a problem with WMI: &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul style="font-family: verdana;"&gt;&lt;li&gt;Goto Start --&gt; Run ... --&gt; type &lt;span style="font-style: italic;"&gt;wbemtest&lt;/span&gt; --&gt; hit &lt;span style="font-style: italic;"&gt;Enter&lt;/span&gt;&lt;/li&gt;&lt;li&gt;In the Tester utility, press &lt;span style="font-style: italic;"&gt;Connect&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Type &lt;span style="font-style: italic;"&gt;root\cimv2&lt;/span&gt; in the top-left box where by default it says &lt;span style="font-style: italic;"&gt;root\default&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Press Enter&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: verdana;"&gt;At this point, if you get an error saying &lt;/span&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;Invalid Namespace&lt;/span&gt;&lt;span style="font-family: verdana;"&gt; or &lt;/span&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;This Operation is Not Supported&lt;/span&gt;&lt;span style="font-family: verdana;"&gt;, or anything to that effect, chances are that you have a problem with the WMI repository. The reason for this, is that the root\cimv2 is what you could call the "primary" namespace of WMI, or the one that provides the most information about your system; If this namespace isn't working, it's likely that none of them are.  &lt;/span&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;Now&lt;/span&gt;&lt;span style="font-family: verdana;"&gt;, here's the steps you can take to actually fix the problem:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    &lt;u&gt;Refresh the WMI Repository&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul style="font-family: verdana;"&gt;&lt;li&gt;Goto Start --&gt; Run ... --&gt; type &lt;span style="font-style: italic;"&gt;net stop winmgmt &lt;/span&gt;--&gt; press enter&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Input &lt;span style="font-style: italic;"&gt;Y&lt;/span&gt;, if prompted --&gt; press &lt;span style="font-style: italic;"&gt;Enter&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Open Windows Explorer ([Windows] + E, keyboard shortcut) and navigate to &lt;span style="font-style: italic;"&gt;%WINDIR%\System32\wbem\repository&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Delete all the contents of the &lt;span style="font-style: italic;"&gt;wbem\repository&lt;/span&gt; folder&lt;/li&gt;&lt;li&gt;Goto Start --&gt; Run ... --&gt; type &lt;span style="font-style: italic;"&gt;net start winmgmt &lt;/span&gt;--&gt; press enter&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: verdana;"&gt;   &lt;span style="font-weight: bold;"&gt; &lt;u&gt;Test the WMI Repository&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul style="font-family: verdana;"&gt;&lt;li&gt;Goto Start --&gt; Run ... --&gt; type &lt;span style="font-style: italic;"&gt;wbemtest&lt;/span&gt; --&gt; press enter&lt;/li&gt;&lt;li&gt;Press the connect button&lt;/li&gt;&lt;li&gt;Type &lt;span style="font-style: italic;"&gt;root\cimv2&lt;/span&gt; in the upper-left box&lt;/li&gt;&lt;li&gt;Press Enter&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family: verdana;"&gt;At this point, your computer may hesitate for a moment while it rebuilds the WMI repository. Remember, after you delete the repostiory and restart the service, WMI doesn't rebuild the repository until you actually &lt;/span&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;use&lt;/span&gt;&lt;span style="font-family: verdana;"&gt; the WMI service. From this point forward, your problems ought to be resolved and you can go on scripting (or programming) happily :-)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-115041336506418602?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/115041336506418602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=115041336506418602' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/115041336506418602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/115041336506418602'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/06/fixing-problems-with-wmi.html' title='Fixing problems with WMI'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-115030218398295930</id><published>2006-06-14T10:48:00.000-05:00</published><updated>2006-06-15T18:49:23.086-05:00</updated><title type='text'>Microsoft Office 2007 Development</title><content type='html'>&lt;span style="font-family: verdana;"&gt;Well, I finally installed the Microsoft Office 2007 beta today. The interface has been change significantly, and I must admit, I had trouble finding the file menu. &lt;/span&gt;&lt;a style="font-family: verdana;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6085/2190/1600/excel.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/6085/2190/320/excel.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family: verdana;"&gt;While that may sound quite embarrassing, you'd have to understand that there &lt;/span&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;is&lt;/span&gt;&lt;span style="font-family: verdana;"&gt; no file menu; Instead, Microsoft has replaced it with a shiny Office logo in the upper-left corner of Excel, the first application I played with. The entire toolbar system has been replaced also, with several groups of tasks that you may come across in your usage of Excel. Along the top, there are the following groups: &lt;/span&gt;&lt;span style="font-style: italic; font-family: verdana;"&gt;Home&lt;/span&gt;&lt;span style="font-family: verdana;"&gt;, &lt;/span&gt;&lt;span style="font-style: italic; font-family: verdana;"&gt;Insert&lt;/span&gt;&lt;span style="font-family: verdana;"&gt;, &lt;/span&gt;&lt;span style="font-style: italic; font-family: verdana;"&gt;Page Layout&lt;/span&gt;&lt;span style="font-family: verdana;"&gt;, &lt;/span&gt;&lt;span style="font-style: italic; font-family: verdana;"&gt;Formulas&lt;/span&gt;&lt;span style="font-family: verdana;"&gt;, &lt;/span&gt;&lt;span style="font-style: italic; font-family: verdana;"&gt;Data&lt;/span&gt;&lt;span style="font-family: verdana;"&gt;, &lt;/span&gt;&lt;span style="font-style: italic; font-family: verdana;"&gt;Review&lt;/span&gt;&lt;span style="font-family: verdana;"&gt;, and &lt;/span&gt;&lt;span style="font-style: italic; font-family: verdana;"&gt;View&lt;/span&gt;&lt;span style="font-family: verdana;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;What I'm more interested in than the UI though, is development around the Microsoft Office object model. Microsoft has kindly provided wrappers for all the various Office components for use in managed code. Since using DllImport to call unmanaged code seems to be somewhat of a pain in .NET, the fact that Microsoft Provided the wrappers is &lt;/span&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;very&lt;/span&gt;&lt;span style="font-family: verdana;"&gt; nice, and hopefully everything will be as straightforward to work with as the Microsoft Office COM interfaces were in Visual Basic 6. Anyway, feel free to grab the &lt;a href="http://www.microsoft.com/office/preview/beta/getthebeta.mspx"&gt;Office 2007 beta&lt;/a&gt; and give it a whirl! All the managed code libraries are in the root of the install directory, I believe, so load up Visual Studio and start coding! :-) Enjoy!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-115030218398295930?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/115030218398295930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=115030218398295930' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/115030218398295930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/115030218398295930'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/06/microsoft-office-2007-development.html' title='Microsoft Office 2007 Development'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-115025734493552841</id><published>2006-06-13T22:46:00.000-05:00</published><updated>2006-06-13T23:01:00.920-05:00</updated><title type='text'>First Thoughts on Vista</title><content type='html'>&lt;span style="font-family:verdana;"&gt;Well, I'm going to make this brief, but I though&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;t I'd post a couple of comments about Windows Vista. I just got it up and running on VMware, and thankfully I didn't have any problems with the installation. The initial installation of Vista is very nice, and while not by &lt;/span&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;any&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; means quick, it's not ridden with dialog boxes until after all the major stuff is finished; I always hated coming back to a Windows XP install and seeing it waiting for some bit of user input. Anyway, the GUI setup is a breeze, and the initial boot up is pretty normal. A balloon popup warns you of out-of-date definition files for Windows Defender, and of missing anti-virus software, a nice background awaits you, an&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;d that's about it. The UI layout really hasn't been changed all that much, which comes as somewhat of a di&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;sappointment to me, but I guess you can't change too much between each version of Windows without confusing your entire userbase :-| I did happen across one thing which I'd like to post a screenshot of tonight before I actually do go to bed (I'm wondering if that will &lt;/span&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;ever&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; happen right about now). I came across the Performance Monitor application whilst browsing the System32 folder, and I must say I'm rather impressed. The new layout is well-designed, and it certainly provides a better feel for an overall idea of how your system is running. Also, I took a quick look at the blank MMC console, and it seems that they've done a nice job updati&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;ng the MMC UI as well. For some reason (and I can't figure out &lt;/span&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;why&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;), the text is easier to read, everything&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; looks a bit more organized, and I feel a bit more in control of what's going on. So anyway, with that ... I'll leave you to make your own assumptions about the rest of the o/s. I'm going to bed now :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6085/2190/1600/MMCsnapins.0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6085/2190/320/MMCsnapins.0.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6085/2190/1600/perfmon.0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/6085/2190/320/perfmon.0.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-115025734493552841?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/115025734493552841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=115025734493552841' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/115025734493552841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/115025734493552841'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/06/first-thoughts-on-vista.html' title='First Thoughts on Vista'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-115025238609539427</id><published>2006-06-13T21:18:00.000-05:00</published><updated>2006-06-14T06:07:13.256-05:00</updated><title type='text'>Script to find ProgID's Registered with the local COM server</title><content type='html'>&lt;span style="font-family:verdana;"&gt;Here's a script I wrote up quickly tonight that grabs all the registered COM objects with ProgID's and outputs it to comma-delimited text. Basically, what I do with it, since I was way too lazy (hey, I had other things going on too :-) to use a Scripting.FileSystemObject is to run it from the command line using &lt;/span&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;cscript.exe&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; and use the "&gt;" to redirect to a file. Here's an example from the command line:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    cscript findProgIDs.vbs &gt; progIDs.csv&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Then remove the first couple lines from the text document, and open the CSV file with &lt;a href="http://www.openoffice.org/"&gt;OpenOffice&lt;/a&gt; Calc. Select columns A and B, goto Data --&gt;&lt;/span&gt;&lt;a style="font-family: verdana;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6085/2190/1600/progids.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/6085/2190/320/progids.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; Sort --&gt; OK, and voila! You now have a list of COM objects, complete with both &lt;span style="font-weight: bold;"&gt;ProgID &lt;/span&gt;and &lt;span style="font-weight: bold;"&gt;VersionIndependentProgID &lt;/span&gt;pulled fresh from your local computer's registry! Now, as for what you can do with these, I have absolutely no idea, but this is at least a start :) Here's what I do: find something that sounds interesting that you'd want to script with (I chose &lt;span style="font-style: italic;"&gt;Microsoft.Update.ServiceManager&lt;/span&gt;), goto &lt;a href="http://www.google.com/search?q=microsoft.update.servicemanager&amp;start=0&amp;amp;amp;amp;amp;ie=utf-8&amp;oe=utf-8&amp;amp;client=firefox-a&amp;rls=org.mozilla:en-US:official"&gt;Google&lt;/a&gt;, type in the name of the COM object, and see if anyone has examples or documentation on how to use it. Anyway, hopefully this helps someone out or puts some new ideas in someone's mind .... just throwing it out there for fun. You never know what you can find ... maybe even a &lt;a href="http://72.14.203.104/search?q=cache:IjhbJijNVMEJ:cwashington.netreach.net/depo/view.asp%3FIndex%3D793%26ScriptType%3Djscript+pdf.pdfctrl&amp;amp;hl=en&amp;gl=us&amp;amp;amp;amp;amp;ct=clnk&amp;cd=7&amp;amp;client=firefox-a"&gt;script that prints out a PDF document without taking the steps of opening it up and choosing print&lt;/a&gt;? Until next time ...&lt;br /&gt;&lt;br /&gt;EDIT: Here's a link I found to some documentation on using the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wua_sdk/wua/portal_client.asp"&gt;Windows Update API&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;on error resume next&lt;br /&gt;subkey = "CLSID"&lt;br /&gt;const  HKEY_CLASSES_ROOT = 2147483648&lt;br /&gt;set objWMI = GetObject(&lt;a class="moz-txt-link-rfc2396E" href="winmgmts:root%5Cdefault:StdRegProv"&gt;"winmgmts:root\default:StdRegProv"&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;objWMI.EnumKey  HKEY_CLASSES_ROOT, subkey, keys&lt;br /&gt;&lt;br /&gt;for each key in keys&lt;br /&gt;    skey = subkey  &amp; "\" &amp;amp; key &amp; "\ProgID"&lt;br /&gt;    svkey = subkey &amp; "\" &amp;amp; key  &amp; "\VersionIndependentProgID"&lt;br /&gt;    objWMI.GetStringValue HKEY_CLASSES_ROOT, skey, "", ProgID&lt;br /&gt;    objWMI.GetStringValue HKEY_CLASSES_ROOT, svkey, "", IProgID&lt;br /&gt;    if ProgID  &lt;&gt; "" and IProgID = "" then&lt;br /&gt;        wscript.echo ProgID&lt;br /&gt;    elseif  ProgID &lt;&gt; "" and IProgID &lt;&gt; "" then&lt;br /&gt;        wscript.echo ProgID  &amp; "," &amp;amp; IProgID&lt;br /&gt;    end if&lt;br /&gt;next&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-115025238609539427?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/115025238609539427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=115025238609539427' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/115025238609539427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/115025238609539427'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/06/script-to-find-progids-registered-with.html' title='Script to find ProgID&apos;s Registered with the local COM server'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-114987692427358113</id><published>2006-06-09T11:48:00.000-05:00</published><updated>2006-06-10T08:47:26.380-05:00</updated><title type='text'>Using Oleview.exe to find scriptable COM objects</title><content type='html'>&lt;span style="font-family:verdana;"&gt;Hello everyone ... today, I have for you, a quick posting on how to use the Oleview program to locate COM objects that are scriptable in your daily VB scripting! I'm guessing that from the few search &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.google.com/search?q=oleview.exe&amp;start=0&amp;amp;amp;amp;amp;amp;ie=utf-8&amp;oe=utf-8&amp;amp;client=firefox-a&amp;rls=org.mozilla:en-US:official"&gt;results on Google&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;, that not many people are aware of this, but the &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd&amp;displaylang=en"&gt;Windows Resource Kit &lt;/a&gt;&lt;span style="font-family:verdana;"&gt;tools has a handy tool that allows you to view information about the type libraries registered with the COM server on a Windows computer. First, download and install the Windows 2003 resource kit, and then navigate to the folder you installed it to. Open up the oleview executable and browse around in it for a bit if you'd like.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;The purpose of using this tool (at least &lt;/span&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;my&lt;/span&gt;&lt;span style="font-family:verdana;"&gt; purpose) is to find some COM objects that I can use with VB script to do cool stuff. One particular object I came across is the Windows Media Player type library. This can be instantiated with the following code:&lt;/span&gt;&lt;br /&gt;&lt;blockquote style="font-family: verdana;"&gt;set playerobject = CreateObject("wmplayer.ocx")&lt;/blockquote&gt;&lt;span style="font-family:verdana;"&gt;For beginners out there who are asking "How do you know to use wmplayer.ocx?" I do have an answer! Using the oleview tool, you can figure out the name of the object you would like to create an instance of. If you'd like, follow along by opening up Oleview, and navigating to &lt;span style="font-style: italic;"&gt;Objects Classes --&gt;  Grouped by Component Category --&gt; Automation Objects --&gt; Windows Media Player&lt;/span&gt;, and click that item. In the right-hand pane of Oleview, you'll see some information about the type library, and more specifically, the &lt;span style="font-weight: bold;"&gt;ProgID &lt;/span&gt;(or &lt;span style="font-weight: bold;"&gt;VersionIndependentProgID&lt;/span&gt;) of the object. This is what you need to know in order to create an instance of a COM object. While writing this article, I decided to randomly choose another object in the same list as another example, so go ahead and navigate to &lt;span style="font-style: italic;"&gt;Microsoft Agent Control 2.0&lt;/span&gt;. Again, on the right side you should see the &lt;span style="font-weight: bold;"&gt;VersionIndependentProgID &lt;/span&gt;of "Agent.Control". By calling the built-in VBscript function CreateObject, you can instantiate this object as well.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Now, you might be asking yourself: "What can I do with this object once I've got an instance of it?" That will hopefully come in another article shortly as I'm running out of time, however, I will tell you that you can use Oleview to find out the answer for yourself. Happy scripting!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-114987692427358113?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/114987692427358113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=114987692427358113' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/114987692427358113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/114987692427358113'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/06/using-oleviewexe-to-find-scriptable.html' title='Using Oleview.exe to find scriptable COM objects'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-114987136940298932</id><published>2006-06-09T11:33:00.000-05:00</published><updated>2006-06-09T11:42:57.853-05:00</updated><title type='text'>Novell vs Windows login prompt?</title><content type='html'>&lt;span style="font-family: verdana;"&gt;Well, I started a new job, and I have been re-introduced to Novell Netware! :-o Anyway, I updated my computer provided to me from Windows XP Service Pack 1 to SP2, and I started having trouble getting the login prompt to show up. I remember having come across this problem almost 2 years ago now, but I thankfully remembered how to get around it. Besides, for whatever reason, it seems that the Novell authentication still works even without using the Novell login box. Well, here's how to fix the problem if you upgrade to XP Service Pack 2 while you've got the Novell client installed:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;First, a little background information. Windows XP uses a DLL file called msgina.dll (located in %windir%\system32) to display the login prompt and accept user credentials. When the Netware client is installed, it "takes over your system" by replacing msgina.dll with its own login prompt, appropriately named nwgina.dll. The setting that changes which login prompt is used, is found in the registry under the HKEY_LOCAL_MACHINE hive. If you can't get the Netware login prompt to display after upgrading to SP2, here's a method that worked for me to get around the problem:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol style="font-family: verdana;"&gt;&lt;li&gt;Boot into Windows XP safe mode by pressing F8 right between POST (Power-on self-test) and Windows XP loading&lt;/li&gt;&lt;li&gt;Make sure you choose basic safe mode, &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; safe mode with networking, as this will still attempt to load nwgina.dll&lt;/li&gt;&lt;li&gt;Login to a local user account with administrative access to the computer&lt;/li&gt;&lt;li&gt;Choose Start --&gt; Run ... --&gt; type "regedit" and press enter&lt;/li&gt;&lt;li&gt;Navigate to the following path: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\Current Version\Winlogon&lt;/li&gt;&lt;li&gt;Find the GinaDLL value, double-click to change it, and type in "msgina.dll"&lt;/li&gt;&lt;li&gt;Reboot your computer into normal mode, and login&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-family: verdana;"&gt;I hope this helps someone out there who's still forced to work with Netware :) Feel free to leave a comment if this works for you. Cheers!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-114987136940298932?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/114987136940298932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=114987136940298932' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/114987136940298932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/114987136940298932'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/06/novell-vs-windows-login-prompt.html' title='Novell vs Windows login prompt?'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-114805883819597403</id><published>2006-05-18T08:39:00.000-05:00</published><updated>2006-05-19T12:13:58.226-05:00</updated><title type='text'>Adding Time Servers to Windows XP</title><content type='html'>&lt;span style="font-family: verdana;"&gt;Windows XP normally only has two time servers configured. Actually, on the fresh installation of XP Media Center Edition that came on my new Inspiron e1705  had a few additional ones as well, but nonetheless, I was curious to know if there was a way to permanently add additional time servers. While I was working on a completely unrelated project this morning, however, I found a registry key that would allow you to do just this. If you're looking for the DNS addresses of additional time servers, I recommend doing a &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://www.google.com/search?hl=en&amp;q=public+time+servers&amp;amp;btnG=Google+Search"&gt;Google search&lt;/a&gt;&lt;span style="font-family: verdana;"&gt; for time servers, or try &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://ntp.isc.org/bin/view/Servers/NTPPoolServers"&gt;here&lt;/a&gt;&lt;span style="font-family: verdana;"&gt; or here. Following below are the directions you'll need to add these DNS addresses to your computer to synchronize with:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol style="font-family: verdana;"&gt;&lt;li&gt;Open the Registry Editor by choosing Start --&gt; Run ... --&gt; type "regedit" in the prompt, and press OK&lt;/li&gt;&lt;li&gt;Navigate your way through the registry tree to this location: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers&lt;/li&gt;&lt;li&gt;Create a new REG_SZ (string value) by right-clicking in the right-hand pane, select New --&gt; String Value and make sure to use a integer as its name. The way this works is that the lowest numbered value shows up at the top of the NTP time server list in the Windows Date/Time utility&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Open the reg key and type in the Fully Qualified Domain Name (FQDN) of the NTP server you'd like to use&lt;/li&gt;&lt;li&gt;Open the Date/Time Windows utility by right-clicking the systray and click "Adjust Date/Time"&lt;/li&gt;&lt;li&gt;Go to the Internet Time tab and select the new NTP server you added to the registry&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-family: verdana;"&gt;As you can see, there are quite a few things that you may not normally think of sitting in the registry, you just have to find them. Later on when you do happen across them, you think ... hey I always wondered how to do that! :)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-114805883819597403?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/114805883819597403/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=114805883819597403' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/114805883819597403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/114805883819597403'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/05/adding-time-servers-to-windows-xp.html' title='Adding Time Servers to Windows XP'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-114779642886563019</id><published>2006-05-16T11:01:00.000-05:00</published><updated>2006-05-16T11:20:28.886-05:00</updated><title type='text'>Enumerate Administrators</title><content type='html'>&lt;span style="font-size:100%;"&gt;&lt;span style="font-family: verdana;"&gt;Well, here's a script that pulls a list of computers from your Active Directory domain, connects to each computer, and enumerates a list of users, groups, or computer accounts that have local administrative permissions. When I wrote this script, I had in mind security auditing, as I wanted to make sure that no one who didn't need Administrator privileges, didn't have them. The script will also echo out the user currently logged onto each computer. For terminal servers, this will only show one user, but it was designed with single-logon XP clients after-all, so don't be picky :) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;If you have any trouble running this script, feel free to let me know. I designed it be cross-domain compatible so that I could post it up here and anyone could use it. I welcome any comments, questions, and constructive criticism; I'm always looking for ideas on how to make some cool new script. Anyway, without further to do, here is the script:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;'Computers array&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;dim computers&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;'Computers that weren't accessible&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;dim bad&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;set objAD = GetObject("LDAP://RootDSE")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;domain = objAD.Get("DefaultNamingContext")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;set objAD = GetObject("LDAP://" &amp; domain)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;objAD.filter = array("computer","organizationalUnit")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;getComputers(objAD)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;computerlist = split(computers)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;for i = 0 to ubound(computerlist)-1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    if isAlive(computerlist(i)) then enumAdmins(computerlist(i))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;next&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;'==================FUNCTION==================&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;'Name/Params: getComputers(pcname)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;'Purpose: Connect to computer, grab local Administrators group, and echo out members&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;'==============================================&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;function getComputers(objAD)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    for each adobj in objAD&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        if adobj.class = "organizationalUnit" then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;            'The replace here fixes up any OUs that might have slashes in the names&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;            set ou = GetObject("LDAP://" &amp; replace(adobj.distinguishedName,"/","\/"))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;            getComputers(ou)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        elseif adobj.class = "computer" then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;            pcname = right(adobj.name,len(adobj.name)-3)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;            computers = computers &amp; pcname &amp;amp; " "&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        end if&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    next&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;end function&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;'==================FUNCTION==================&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;'Name/Params: enumAdmins(pcname)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;'Purpose: Connect to computer, grab local Administrators group, and echo out members&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;'==============================================&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;function enumAdmins(pcname)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    on error resume next&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    set computer = GetObject("WinNT://" &amp; pcname &amp;amp; "/Administrators")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    if err.number &lt;&gt; 0 then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        bad = bad &amp; pcname &amp;amp; " "&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    else&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        set users = computer.Members()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        wscript.echo "##### " &amp; pcname &amp;amp; " (" &amp; getLoggedOnUser(pcname) &amp;amp; ") #####"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        for each user in users&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;            wscript.echo user.name&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        next&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    end if&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    Err.clear&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;end function&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;'==================FUNCTION==================&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;'Name/Params: getLoggedOnUser(pcname)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;'Purpose: Connect to computer, grab currently logged on user and return value&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;'==============================================&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;function getLoggedOnUser(pcname)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    on error resume next&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    set objWMI    = GetObject("winmgmts:\\" &amp; pcname &amp;amp; "\root\cimv2:win32_computersystem")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    if err.number = 0 then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        set results    = objWMI.Instances_&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        for each obj in results&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;            getLoggedOnUser = obj.username&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        next&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    end if&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    err.clear&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;end function&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;'==================FUNCTION==================&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;'Name/Params: isAlive(pcname)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;'Purpose: Ping computer to pre-test for IP connectivity. Returns true if resolved IP address is pingable&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;'==============================================&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;function isAlive(pcname)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    isAlive = false&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    set objWMI    = GetObject("winmgmts:\\.\root\cimv2")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    sQuery        = "select * from win32_pingstatus where address='" &amp; pcname &amp;amp; "' and timeout=1000"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    set results    = objWMI.ExecQuery(sQuery)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    for each result in results&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        if result.statuscode = 0 then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;            isAlive = true&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        end if&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    next&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;end function&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;badmachines = split(bad)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;wscript.echo vbcrlf &amp; "The following computers were unable to be contacted. Please audit these individually"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;wscript.echo "===================================================================================="&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;for i = 0 to badmachines - 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    wscript.echo badmachines(i)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;next&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21640185-114779642886563019?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/114779642886563019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=114779642886563019' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/114779642886563019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/114779642886563019'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/05/enumerate-administrators.html' title='Enumerate Administrators'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-114375421527188821</id><published>2006-03-30T15:19:00.000-06:00</published><updated>2006-04-08T10:27:17.166-05:00</updated><title type='text'>Script to enable RDP</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Today I developed a script that enables RDP on a remote computer. Unfortunately the script was not designed to take alternate credentials when making the connection to WMI, although I may do that at some point. Here's the story on how I came up with it:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;    This morning, I was planning on installing Exchange onto a test Windows Server at home to experiment with some settings. I popped the CD for Exchange into the drive of the machine, and left for work thinking I was all set to go. Well, the problem is that I installed Windows at the last minute before going to bed last night, so I didn't configure any options, namely, to enable remote desktop connections. So then I get to work, find out that I can't connect to it, and figure that I will simply edit the registry as usual using regedit from one of my other machines. Boy was I wrong; for some reason, regedit wasn't properly taking alternate credentials, so I had no way to connect into the machine. I attempted connecting to the administrative share of the machine, and was successful, so I knew I could at least copy files to it, and also that I had the userID/password right. So then I decide that the only way I'm gonna get on that box is to do something through the command line. As far as I know, there's no way to import a section of the registry with a command-line (although I'm sure there is), but what I do know is that cscript is a command-line interpreter for WSH. So I went ahead and wrote out this script, ran into a couple of problems, fixed 'em, then used psexec from Sysinternals to execute the script using cscript from the command-line. The nice thing about psexec, is that it allows you to submit alternate credentials, and it worked flawlessly. So all in all, it was a bit more effort than was really necessary, but I had no other choice except to be physically in front of the machine. It pays off to know how to script in Windows (and *nix I'm sure), because if you find yourself in a pinch, you've always got a way to get yourself unstuck. So without further to do, here's the script:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NOTE: If you use a utility such as psexec or something else to execute it on a remote machine, to enable it on that machine, simply pass a "." as the argument, which is a substitute for "localhost" basically.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote  style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;'Author: Trevor Sullivan&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;'Date: March 30th, 2006&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;'Purpose: enable remote desktop from a script. This script&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;'can be used with psexec or other remote command line&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;'utilities to enable RDP.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;'Usage: [cscript | wscript] enableRDP.vbs &lt;computername&gt;&lt;/computername&gt;&lt;/span&gt;&lt;computername&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;set args = Wscript.Arguments&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;if args.count &lt;&gt; 0 then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    enableRDP(args.item(0))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    wscript.echo "Usage: [cscript] enableRDP.vbs &lt;/span&gt;&lt;computername&gt;&lt;span style="font-family:courier new;"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;end if&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;function enableRDP(pcname)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    strNS    = "root\default"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    strcls    = "stdRegProv"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    strConn    = "winmgmts:\\" &amp; pcname &amp;amp; "\" &amp; strNS &amp;amp;amp;amp; ":" &amp;amp; strcls&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    wscript.echo strConn&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    set objWMI = GetObject(strConn)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    result = objWMI.SetDWORDValue(,"SYSTEM\CurrentControlSet\Control\Terminal Server","fDenyTSConnections","0")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    wscript.echo result&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;end function&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/computername&gt;&lt;/computername&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-size:85%;"&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/21640185-114375421527188821?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/114375421527188821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=114375421527188821' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/114375421527188821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/114375421527188821'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/03/script-to-enable-rdp.html' title='Script to enable RDP'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-114242804929268381</id><published>2006-03-15T07:04:00.000-06:00</published><updated>2006-03-15T07:08:36.290-06:00</updated><title type='text'>Starbucks Coffee Break Day</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: verdana;"&gt;Well, today I stopped into Starbucks before work as usual, and I was kindly told that today, March 15th was the first day that Starbucks is going to host free coffee between the hours of 10am and 12pm! It sounds like a great promotion for them, and I'll bet Starbucks shops nationwide will be packed with people between those hours.&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/21640185-114242804929268381?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/114242804929268381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=114242804929268381' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/114242804929268381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/114242804929268381'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/03/starbucks-coffee-break-day.html' title='Starbucks Coffee Break Day'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-114174457345429218</id><published>2006-03-07T08:53:00.000-06:00</published><updated>2006-03-07T09:16:13.466-06:00</updated><title type='text'>L2TP Tunneling in Windows Server 2003</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: verdana;"&gt;Well, I'm looking for a method of replacing a Cisco VPN implementation with the built-in Windows Server 2003 Routing and Remote Access service, which provides a secure VPN tunnel end-point. As far as I know, PPTP tunnels are insecure and generally not recommended, so I'm looking for information on how to implement the L2T protocol. From my research so far, I've learned that you &lt;/span&gt;&lt;span style="font-weight: bold; font-family: verdana;"&gt;must&lt;/span&gt;&lt;span style="font-family: verdana;"&gt; use certificate authentication and encryption; the problem with this, is that I haven't had a lot of experience using digital certificates in Windows (or any o/s for that matter). Once I get some additional information about this, I'll write up a small guide for other system administrators out there that need to get a secure, and more easily managable VPN solution in place. A lot of you out there may ask why I'd like to replace a Cisco PIX VPN solution with a Windows RRAS solution. Well, the primary reason is that Windows is plenty secure when configured properly, and because using Windows authentication for VPN purges the need to manage two separate user databases.&lt;/span&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/21640185-114174457345429218?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/114174457345429218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=114174457345429218' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/114174457345429218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/114174457345429218'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/03/l2tp-tunneling-in-windows-server-2003.html' title='L2TP Tunneling in Windows Server 2003'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-114116231510849786</id><published>2006-02-28T15:29:00.000-06:00</published><updated>2006-02-28T15:31:55.190-06:00</updated><title type='text'>Quick VBscript</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: verdana;"&gt;Well, today I briefly developed this script (under one minute I think) to grab a serial number from a remote computer using WMI. It's not exactly an elegant script, as it'll throw a nasty error if it can't contact the remote computer, although if you know the computer is most likely on, you should have no problems retrieving the serial # from it. Anyway, without further to do, here it is:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;strComputer    = inputbox("Computer name:")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;set objWMI     = GetObject("winmgmts:\\" &amp; strComputer &amp;amp; "\root\cimv2")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;sClass         = "win32_bios"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;sQuery         = "select serialnumber from " &amp; sClass&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;set results    = objWMI.ExecQuery(sQuery)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;for each result in results&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    wscript.echo strComputer &amp; " :: " &amp;amp; result.serialnumber&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;next&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/21640185-114116231510849786?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/114116231510849786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=114116231510849786' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/114116231510849786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/114116231510849786'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/02/quick-vbscript.html' title='Quick VBscript'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-113909673084150767</id><published>2006-02-04T17:28:00.000-06:00</published><updated>2006-02-05T01:10:55.603-06:00</updated><title type='text'>Stunning results with multi-threaded application development</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;Wow ... I've just spent some time today studying multi-threaded application development, and have been absolutely &lt;/span&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;amazed &lt;/span&gt;&lt;span style="font-family:verdana;"&gt;with the results from the multi-threaded test program I created. What kills me most about this new discovery of mine is how &lt;/span&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;easy &lt;/span&gt;&lt;span style="font-family:verdana;"&gt;it is to spawn additional worker threads to make your application more responsive. Here's a great example of how you could use multi-threading: if your application is accessing data from a remote computer on a slow WAN link, you can tell you app to spawn a new thread for the data access, while your main user interface window can continue on in perfect bliss! This is almost exactly what I'm doing with my current test application when connecting to the WMI service on a remote computer. Additionally, since you can specify a different priority for a new thread, this is perfect for times you're running a particularly hefty (lower-priority) WMI query in the background and don't want to make your app lock up while it's in progress. In my future development of a computer management application, I will be sure to take advantage of this awesome, yet easily-implemented feature.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;FYI: &lt;/span&gt;&lt;span style="font-family:verdana;"&gt;Don't forget to leave out the parentheses when you're specifying a delegate method, otherwise it'll think you're trying to call the function and give the the following compile-time error: "Method name expected"&lt;/span&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/21640185-113909673084150767?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/113909673084150767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=113909673084150767' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/113909673084150767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/113909673084150767'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/02/stunning-results-with-multi-threaded.html' title='Stunning results with multi-threaded application development'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-113907462778222226</id><published>2006-02-04T11:30:00.000-06:00</published><updated>2006-02-04T11:37:07.790-06:00</updated><title type='text'>Solutions to problems</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: verdana;"&gt;Well I've been hacking at a problem that I just figured out. In my code writing, I'm trying to access some information retained in the WMI repository on a computer, and I was having some issues with data conversions. I did some debugging of my own, and I found out that the type being returned from WMI was a uint64, and of course I'm expecting the conversion to be easy. It turns out you can't do an implicit/explicit cast on the value to get a 32-bit integer, which makes sense, and the System.Convert class in the .NET 2.0 Framework doesn't contain a ToUint32 method that takes a uint64 as a parameter (but the &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemconvertclasstouint32topic16.asp"&gt;.NET 1.1 Framework does&lt;/a&gt;&lt;span style="font-family: verdana;"&gt;). Anyway, I finally figured out that I could call the ToString() method on the property value I was retrieving from WMI (the capacity property in the \\localhost\root\cimv2:Win32_PhysicalMemory class), and then convert the string to a int32. Finally!&lt;/span&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/21640185-113907462778222226?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/113907462778222226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=113907462778222226' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/113907462778222226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/113907462778222226'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/02/solutions-to-problems.html' title='Solutions to problems'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-113901362825368720</id><published>2006-02-03T17:53:00.001-06:00</published><updated>2006-02-03T18:40:28.253-06:00</updated><title type='text'>Creating a collection class</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;I came across this &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vaconCreatingYourOwnCollectionClass.asp"&gt;great article&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; within the MSDN documentation that explains how to create your own collection class in .NET. It explains how to implement the Add() and Remove() methods along with the Item property to allow you to access a particular object in your collection via its index value. While they show the index as being an integer in this article, I am assuming that you can also use a string as an index.&lt;/span&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/21640185-113901362825368720?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/113901362825368720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=113901362825368720' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/113901362825368720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/113901362825368720'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/02/creating-collection-class_03.html' title='Creating a collection class'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-113875795650826832</id><published>2006-01-30T17:58:00.000-06:00</published><updated>2006-01-31T19:42:39.746-06:00</updated><title type='text'>C# Progress</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt;As you already know, I'm trying to learn c# and develop my own applications for ... various tasks. At the moment I'm just beginning a program that will hopefully assist with retrieving important information about computers to aid in systems management. WMI is a great resource to tap into for systems information and management; there are a ton of WMI classes built into Windows XP and Server 2003 that allow you to obtain almost any bit of information you could want, from the depths of the BIOS all the way up to network performance counters.&lt;br /&gt;&lt;br /&gt;At the moment, my program called WMI Reader doesn't exactly do a whole lot, but I began by creating a computer class that will eventually be extended further to contain one computer's complete set of information. There is also a small menu which allows you to add a computer to a TreeView control which will allow you to select which computer you are currently working with. I also want to expand the program to log information about computers to a database and allow the user to work in an "offline"  or "cached" mode if they would like to view info about a computer that is not powered on but does exist in the database. Anyway, that's all for now ... we'll see how things turn out in my continued learning experience.&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/21640185-113875795650826832?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/113875795650826832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=113875795650826832' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/113875795650826832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/113875795650826832'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/01/c-progress.html' title='C# Progress'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-21640185.post-113848811278189760</id><published>2006-01-28T16:31:00.000-06:00</published><updated>2006-01-28T16:41:52.790-06:00</updated><title type='text'>Introduction to myself</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: verdana;"&gt;Hello, my name is Trevor Sullivan. I'm a resident of the great (yet cold) state of Illinois in the US. My life through now has always consisted of anything and everything computer-related. I've fallen completely in love with computers and technology, and no matter what subject you name about computers, be it network administration, programming using simple scripts, web applications, or even gaming, I always want to know more and learn more about it. Despite the large amount of knowledge available regarding computers, I strive to learn everything I can get my hands on. I'm currently mostly a Windows user, although I do have a server running FreeBSD 5. My current job is in IT, and I assist end-users with computer hard/software issues, and pretty much manage about 200 desktop computers in a Microsoft Active Directory domain. Despite my love for administering large numbers of workstations and helping out with Windows 2003 servers, I also very much enjoy programming. I've taken a big interest into scripting to make reconfiguring the desktop computers easier, faster, and more consistent, and most recently, I've been doing my best to learn C# and the .NET 2.0 Framework so I can develop both my own web applications, windows forms applications, and hopefully some basic games once I start looking at the DirectX API. Programming has always catptured my interest, and the ability for one to create his/her own applications to perform whatever task they need or want is quite powerful. Anyway, I must be going now, but hopefully I will continue to keep this blog updated with my experiences with my various skills using computers so that someone else may learn something from my efforts.&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/21640185-113848811278189760?l=develnet.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://develnet.blogspot.com/feeds/113848811278189760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=21640185&amp;postID=113848811278189760' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/113848811278189760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/21640185/posts/default/113848811278189760'/><link rel='alternate' type='text/html' href='http://develnet.blogspot.com/2006/01/introduction-to-myself.html' title='Introduction to myself'/><author><name>Trevor Sullivan</name><uri>http://www.blogger.com/profile/11480101339879126880</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
