# 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; }