Listing remote Date and Time with PowerShell
Recently I needed to find the remote time of multiple windows servers on the network and compare these, I wrote a quick function that uses WMI to pull this information and return it in a DateTime object format:
The Code
function Get-Time {
<#
.SYNOPSIS
Gets the time of a windows server
.DESCRIPTION
Uses WMI to get the time of a remote server
.PARAMETER ServerName
The Server to get the date and time from
.EXAMPLE
PS C:\> Get-Time localhost
.EXAMPLE
PS C:\> Get-Time server01.domain.local -Credential (Get-Credential)
#>
[CmdletBinding()]
param(
[Parameter(Position=0, Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[System.String]
$ServerName,
$Credential
)
try {
If ($Credential) {
$DT = Get-WmiObject -Class Win32_LocalTime -ComputerName $servername -Credential $Credential
} Else {
$DT = Get-WmiObject -Class Win32_LocalTime -ComputerName $servername
}
}
catch {
throw
}
$Times = New-Object PSObject -Property @{
ServerName = $DT.__Server
DateTime = (Get-Date -Day $DT.Day -Month $DT.Month -Year $DT.Year -Minute $DT.Minute -Hour $DT.Hour -Second $DT.Second)
}
$Times
}
#Example of using this function
$Servers = "localhost", "dc01.domain.local"
$Servers | Foreach {
Get-Time $_
}
Checking for time skew
We can also use this function to easily check for time skew between two machines, the below code is an example where I check my time between a remote host and the local server to see if it is within 30 seconds…
$RemoteServerTime = Get-Time -ServerName "dc01.domain.local"
$LocalServerTime = Get-Time -ServerName "localhost"
$Skew = $LocalServerTime.DateTime - $RemoteServerTime.DateTime
# Check if the time is over 30 seconds
If (($Skew.TotalSeconds -gt 30) -or ($Skew.TotalSeconds -lt -30)){
Write-Host "Time is not within 30 seconds"
} Else {
Write-Host "Time checked ok"
}
Learning PowerCLI–What does it take ? SSH PowerShell tricks with plink.exe








This was exactly what I was looking for.
Thanks.
[...] Listing remote Date and Time with PowerShell [...]