Wednesday, August 20, 2008

Print Queue Analysis

Wes - Can you tell us what printers on a particular print server have more then 10 jobs? Why yes, I can. And here is how you can do it.

$Printers = Get-WmiObject `
-Class Win32_PerfFormattedData_Spooler_PrintQueue `
-ComputerName 'hisprint-p01'`
-Filter 'Name <> "_Total"'
foreach ($Printer in $Printers) {
if($Printer.Jobs -ge 10){
Write-Host $Printer.Name $Printer.Jobs

RHS780 75
OSUHE235 15
MMCT475B 32
DNW375 74

Admittedly, this is could be much more generic. Also, a nice visual representation could be made via PowerGadgets. These are left to the reader as an exercise....

Friday, August 8, 2008

Getting Available Memory On Remote Servers

I am often asked to give total and available memory across our enterprise to our Disaster Recovery guys. Here is a simple script that achieves that goal:

$Servers = Get-Content 'c:\ProductionScripts\Servers.txt'
-Host "Server,Total,Free"
foreach ( $server in $Servers )
= Get-WmiObject `
-Class Win32_LogicalDisk `
-ComputerName $server `
-Filter "DriveType=3" `
-ErrorAction SilentlyContinue
= 0
= 0
foreach($drive in $drives)
double]$size += $drive.size
double]$available += $drive.freespace

= "{0},{1},{2}" -f $server,[MATH]::Round($size/1MB),[MATH]::Round($available/1MB)
-Host $str

Wednesday, August 6, 2008

External (outbound/inbound) eMail Verification

Given that MOM can only verify internal email, I was asked if there was a way to verify delivery of external bound email and receipt of external email. Following is a high-level description of a low-tech solution (using 2 scheduled PowerShell scripts).

  1. Scheduled PowerShell script that runs every 15 minutes that sends a specifically formatted email to gMail and GMX (a great Webmail!). The PowerShell script uses Send-SMTP from PSCX.
    Send-SmtpMail `
    -SmtpHost '' `
    -To '' `
    -From '' `
    -Subject 'Cryptic text here' `
    -AttachmentPath 'D:\File.txt'

  2. gMail and GMX have advanced filtering capabilities. In this case, both look for the specifically formatted email. Once received, it sends back to our domain and is deleted.

  3. Email traverses through spam filter and then to final destination.

  4. Using custom Outlook rule/script, we look for the above email. When received, it places the email attachment into a file share and deletes the email. This is the weakest step in that it assumes 24/7 on an email client. I will be looking into a better way to do this step.

  5. The second PowerShell script looks for the LastWriteTime of the file that was stripped from the email and placed into the fileshare. If the interval is greater then 15 minutes, an event log entry is made.

    $c = New-TimeSpan ((Get-Item c:\ProductionScripts\eMailVerification\InBoundAttachment.txt).LastWriteTime) $(Get-Date)
    int]$d = $c.TotalMinutes
    if ($d -gt 10)
    = New-Object -Type System.Diagnostics.EventLog -ArgumentList Application
    = "eMailVerification"
    "External eMail is taking $d minutes")

  6. MOM then picks up the event and responds accordingly.

There are many different ways we can take this. I am considering parsing the email headers to grab the time-stamps. With these, I can potentially use PowerGadgets to create some dashboards.