# encoding: ascii
# api: powershell
# title: get-lockedtime
# description: Finds the length of time a session has been “locked”.
# version: 0.1
# type: function
# author: hotsnoj
# license: CC0
# x-poshcode-id: 3061
# x-archived: 2011-11-29T18:12:59
# x-published: 2011-11-21T08:34:00
#
#
param (
[parameter(position=0,
ValueFromPipeline = $true,
ValueFromPipelineByPropertyName = $true)]
$ComputerName
)
Begin {
$alreadybegan = $false;
function WmiDateToDotnet {
param($date);
if($date.length -ne 25) {
throw New-Object ArgumentOutOfRangeException;
}
return New-Object datetime @(([int]$date.substring(0,4)), ([int]$date.substring(4,2)), ([int]$date.substring(6,2)), ([int]$date.substring(8,2)), ([int]$date.substring(10,2)), ([int]$date.substring(12,2)), ([datetimekind]::Local))
}
function getData {
param($cn);
$qwinsta_res = qwinsta.ps1 $cn
$processes = gwmi -Class win32_process -ComputerName $cn
$logonuis = $processes | ?{$_.Name -match "logonui"}
for($i = 0; $i -lt $logonuis.Length; $i++) {
Add-Member -Force -in $logonuis[$i] -MemberType NoteProperty -Name OwnerData -Value ($qwinsta_res | ?{$_.ID -eq $logonuis[$i].SessionId})
Add-Member -Force -in $logonuis[$i] -MemberType ScriptProperty -Name Owner -Value {return $this.OwnerData.UserName;}
Add-Member -Force -in $logonuis[$i] -MemberType NoteProperty -Name LockTime -Value (WmiDateToDotnet $logonuis[$i].creationdate)
}
$logonuis
}
if($ComputerName -ne $null) {
$alreadybegan = $true;
getData $ComputerName;
}
}
Process {
if($alreadybegan -eq $true) { continue; }
if($_ -eq $null) {
throw New-Object exception "not a valid object to get a computer name from";
} elseif($_.gettype().equals([string])) {
$cn = $_;
} elseif($_.computername -ne $null) {
$cn = $_.computername
} elseif($_.machinename -ne $null) {
$cn = $_.machinename
} elseif($_.hostname -ne $null) {
$cn = $_.hostname
} else {
throw New-Object exception "not a valid object to get a computer name from";
}
getData $cn;
}