从FromFileTime计算的属性中经过的时间

问题描述

@H_502_0@我正在尝试修改以下计算的属性,以便在可能的情况下正确计算以秒,分钟,小时,天为单位的时间差。

@H_502_0@以下脚本正在运行,只是最近登录列对我来说仍然没有意义。

$username = "Global.Admin"
Get-ADDomainController -Filter * | ForEach-Object {
    $dc = $_
    Get-ADUser $username -Properties Lastlogon,displayName,ProxyAddresses -Server $_.Name |
        Select-Object -Property SamAccountName,@{n="DC"; e={$dc.Name}},@{n="IP"; e={$dc.IPv4Address}},@{n="lastlogon"; e={[datetime]::FromFileTime($_.'lastlogon')}},@{n ="Last logon ago"; e = {$((New-TimeSpan -Start ([datetime]::FromFileTime($_.Lastlogon)) -End (Get-Date)).Seconds) }},ProxyAddresses
} | ft -autosize

解决方法

TimeSpan具有内置的格式化功能。

格式说明符名称“ c”恒定格式(不区分区域性。 [-] d.hh:mm:ss。[fffffff]

“ g”通用短格式(对文化敏感)
[-] d.hh:mm:ss。[fffffff]

“ G”常规长格式(对文化敏感)
[-] d.:hh:mm:ss.fffffff

例如这将输出-00:02:13.8779620

$date1 = Get-Date

$date2 = Get-Date


$timespan = $date1-$date2


$timespan.ToString("c")

因此,在您的情况下,您只需要将Seconds更改为.ToString(“ c”)或所需的输出格式即可。

例如

{$((New-TimeSpan -Start ([datetime]::FromFileTime($_.LastLogon)) -End (Get-Date)).ToString("c")) }