问题描述
@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")) }