Powershell Retrieving Remote System Time

Compare Local Date and Time to a Remote Computer

This is a rather interesting problem. I was doing a comparison between an audit table and a trace for SQL Server, which was proving to be dificult as I soon realized there was latency as well as the system date’s had an offset. So I turned to my good old friend, Powershell. Powershell has a very nice interface for coding against WMI, which I fully leveraged in this code snippet.

#Server name here. 
$ServerName = <Server Name Here>
#Retreive the localtime of the server. 
$remoteDate = Get-WmiObject -ComputerName $ServerName -Class win32_operatingsystem -Property LocalDateTime
#Converting a WMI time to a standard datetime format. 
$remoteDate = [System.Management.ManagementDateTimeConverter]::ToDateTime($remoteDate.LocalDateTime)

$localDate = Get-Date

#Displaying the difference. 
$remoteDate - $localDate

Mozilla is Alienating Businesses and Education with Firefox

Downside of Firefox

Firefox has been really destroying its chances of being deployed to organizations. Why is that you might ask? Well Firefox was used widely back in the version 3.xx but now, they are up to version 12. Version 3 was released back in June of 2008, we are now in April 2012 and they are now up to version 12.

Frequent Updates are the Demise of Firefox

This rapid “major” update schedule means that organizations have to perform testing (for applications and penetration testing), develop new system images for workstations, create new virtual apps for shops that use that technology-such as BMW. I quote major because many of the updates could be considered by many to be minor. This results in a major amount of money to be spent every time Firefox gets updated.

Meanwhile, Microsoft is still supporting IE6 from years ago, Mozilla provides very limited support.

Is Firefox going away? Not any time soon, but they are going to lose market share. Institutions cannot support this behavior.

If someone from Mozilla is paying attention to me, how about acknowledging the operations people in the world exist and you might want to make them happy. After all, they recommend web browsers not just to the businesses but to friends and family. The users in the businesses are going to be biased to use the same web browser at home and at work. If the business is using Internet Explorer, more likely than not, the employees will be using that at home as well.

SQL Server Reporting Services ~ Cascading/Dependant Parameters

This is my first screencast, enjoy!

SQL Server Null Values ~ Into the Void (pun intended)

Null values can get some people rather confused writing queries. I hope I can shed some light on that. By default, SQL Server uses ANSI Nulls. This behavior says that any value compared to null is not equal to null.

if ‘a’=null
print ‘true’
print ‘false’

Returns false

Here is something interesting and if you are slightly devious, what about null compared to null?

if null=null
print ‘true’
print ‘false’

Returns false

if null is null
print ‘true’
print ‘false’

Returns true

Lets turn off ANSI_Null:


if null=null
print ‘true’
print ‘false’ 


if null is null
print ‘true’
print ‘false’ 

Returns true

According to MSDN, if you are trying to search for or compare null values using “is null” is recommended and will return consistent results.

If you are trying to create a query and want to include nulls in the result set you have to do it explicitly like this:
WHERE name = ‘Smith’ OR name IS NULL
Or if you want to exclude nulls:
WHEREname = ‘Smith’ OR name IS NOT NULL

If you want to be tricky you could do something like:

WHERE ISNULL (name,) = ‘Smith’

In London, they have signs that say “Mind the gap”, I say MIND THE NULLS!

One handy function to deal with nulls is Coalesce, which I describe here.

DataGridViewComboBoxColumn requires multiple clicks to select an item

I am reposting this because I think this guy did a good job posting this. I wish I got to this first! 🙂

DataGridViewComboBoxColumn requires multiple clicks to select an item.

SQL Server Foreign Key Constraints – sp_fkeys on ‘Roids!

This query gives you enough information to recreate a foreign key. Enjoy!

--Returns what you need to recreate foreign
-- keys. SP_FKEYS on steriods...

SCHEMA_NAME(fk.schema_id) + '.' + OBJECT_NAME(fk.parent_object_id) as [Primary Table Name],
fk.name as [Foreign Key Name],
OBJECT_NAME(fk.referenced_object_id) as [Foriegn Key Table Name],
fkcol.name as [Foriegn Key Column Name],
pkcol.name as [Primary Table Column Name]
sys.foreign_keys fk
INNER JOIN sys.columns fkcol
ON fkcol.object_id = fk.referenced_object_id AND fkcol.column_id = fk.key_index_id
INNER JOIN sys.foreign_key_columns pk
ON pk.constraint_object_id = fk.object_id
INNER JOIN sys.columns pkcol
ON pkcol.object_id = pk.parent_object_id AND pkcol.column_id = parent_column_id
WHERE OBJECT_ID('insert table name here') = fk.parent_object_id


Fun With Images and Photographs – Photosynth

This is very interesting and compelling. Anyone have an other great ideas for processing of images? What are your plans for images? I would love to hear them as I am planning my own project similar to this one but to a different end and for a different purpose.

Powershell – Top Command

For those of you who love the top command in Linux…


function Get-Top{




##Written By: John Glasgow




Get-Top [-delay interval] [-pid pid_number]



Emulates the top command from Linux/Unix.



To set delay of 5 seconds.

Get-Top -delay 5



To watch a particular process.

Get-Top -pid 4408


$delay = 2

$proc = -1


for($i = 0; $i -lt $args.Count; $i += 1){

if( $args[$i] -ilike “-d*” ){


$delay = $args[$i]


if( $args[$i] -ilike “-p*” ){


$proc = $args[$i]


if( $args[$i] -ilike “-q*” ){


$delay = 0




while ($true){


if($proc -gt 0){Get-Process | Sort-Object -Descending cpu | Where-Object{ $_.Id -eq $proc } | Format-Table}

else{Get-Process | Sort-Object -Descending cpu | Select-Object -First 20 | Format-Table}

Start-Sleep -Seconds $delay



Set-Alias top Get-Top

PowerGUI – Using Powershell to get Disk Space

This is a script you can use in PowerGUI as a script node. This handy little script will give you the basic information of your drives so you can figure out if you disks are going to run out of space! I had to make a modification to this script, it works much better now! I apologize to everyone who was using the older script, which works well in Powershell but not PowerGUI.

Note: This will work with your existing credentials.

[System.Reflection.Assembly]::LoadWithPartialName(‘Microsoft.VisualBasic’) | Out-Null
$name = [Microsoft.VisualBasic.Interaction]::Inputbox(“Enter the IP or Name of the server:”)

$drives = gwmi win32_logicaldisk -ComputerName $name | where{ $_.drivetype -eq 3 }
$driveArray = @()
$counter = 0
foreach ($drive in $drives){
$driveArray += New-Object -TypeName System.Object
$driveArray[$counter] | Add-Member -MemberType NoteProperty -Name name -Value $drive.Name
$driveArray[$counter] | Add-Member -MemberType NoteProperty -Name percentfree -Value ([int] [System.Math]::Round(($drive.FreeSpace) / $drive.Size * 100))
$driveArray[$counter] | Add-Member -MemberType NoteProperty -Name sizeGB -Value ([int]($drive.Size / 1Gb))
$driveArray[$counter] | Add-Member -MemberType NoteProperty -Name freespaceGB -Value ([int]($drive.FreeSpace / 1Gb))
$counter +=1
$driveArray | Format-Table

A slimmed down version for the Powershell console can be found here: Console Script

I also made a system monitoring script, free for you to use.

If you found this useful, subscribe to my blog.

PowerGUI – Powershell SQL Server Database Information Script Node

This short script will prompt you for the name or IP of the server you wish to connect to. As long as you have the correct rights to that server you can use this script. Hope this helps Fernando!

[System.Reflection.Assembly]::LoadWithPartialName(‘Microsoft.SqlServer.SMO’) | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName(‘Microsoft.VisualBasic’) | Out-Null
$name = [Microsoft.VisualBasic.Interaction]::Inputbox(“Enter the IP or Name of the server:”)
$server = New-Object(‘Microsoft.SqlServer.Management.Smo.Server’) $name
$server.Databases | format-table Name,Size,RecoveryModel,PrimaryFilePath -AutoSize

If you found this useful, subscribe.