PowerShell 查询的 SCCM LastLogonTimestamp 格式
SCCM LastLogonTimestamp format queried by PowerShell
我想知道如何将在 SCCM 数据库中找到的 LastLogonTimestamp 转换为可读格式。我现在的代码如下:
$SCCMServer = 'SERVERSCCM'
$SCCMModule = 'C:\Program Files (x86)\Microsoft Configuration Manager\bin\ConfigurationManager.psd1'
$SamAccountName = 'test'
Function Get-SCCMSite {
Param (
[Parameter(Mandatory=$true)]
[String]$ComputerName
)
Process {
Get-WmiObject -ComputerName $ComputerName -Namespace 'root\SMS' -Class 'SMS_ProviderLocation' |
ForEach-Object{
if ($_.ProviderForLocalSite -eq $true) {$SiteCode=$_.sitecode}
}
if ($SiteCode -eq '') {
throw ('Sitecode of ConfigMgr Site at ' + $ComputerName + ' could not be determined.')
}
else {
Return $SiteCode
}
}
}
Import-Module $SCCMModule
$SCCMSite = Get-SCCMSite -ComputerName $SCCMServer
Set-Location "$SCCMSite`:"
$SCCMNameSpace="root\SMS\site_$SCCMSite"
Get-WmiObject -namespace $SCCMNameSpace -computer $SCCMServer -query "select * from sms_r_system where LastLogonUserName='$SamAccountName'" | select *
LastLogonTimestamp
的输出如下所示:
LastLogonTimestamp : 20150330132039.000000+***
在网上我发现这种格式可以转换成这样的可读格式:
[datetime]::FromFileTime(20150330132039.000000+***).ToString('d MMMM yyyy')
但它并没有真正工作,因为它输出错误。当我删除 .
后面的最后一部分时,它给了我 1601 年的日期,这绝对是不正确的。
我认为 FromFileTime
方法不适合这种情况。
您可以使用 ParseExact
方法对原始值进行一些操作:
> $lastlogonstamp = "20150330132039.000000+***"
> $dt = [datetime]::parseexact($lastlogonstamp.split('.')[0],"yyyyMMddHHmmss",[System.Globalization.CultureInfo]::InvariantCulture)
> $dt
30 March 2015 13:20:39
> $dt.ToString('d MMMM yyyy')
30 March 2015
因为这是一个 WMI 对象,您可以使用
ManagementDateTimeConverter.ToDateTime(lastLogonStamp);
在 powershell 中我认为是
我想知道如何将在 SCCM 数据库中找到的 LastLogonTimestamp 转换为可读格式。我现在的代码如下:
$SCCMServer = 'SERVERSCCM'
$SCCMModule = 'C:\Program Files (x86)\Microsoft Configuration Manager\bin\ConfigurationManager.psd1'
$SamAccountName = 'test'
Function Get-SCCMSite {
Param (
[Parameter(Mandatory=$true)]
[String]$ComputerName
)
Process {
Get-WmiObject -ComputerName $ComputerName -Namespace 'root\SMS' -Class 'SMS_ProviderLocation' |
ForEach-Object{
if ($_.ProviderForLocalSite -eq $true) {$SiteCode=$_.sitecode}
}
if ($SiteCode -eq '') {
throw ('Sitecode of ConfigMgr Site at ' + $ComputerName + ' could not be determined.')
}
else {
Return $SiteCode
}
}
}
Import-Module $SCCMModule
$SCCMSite = Get-SCCMSite -ComputerName $SCCMServer
Set-Location "$SCCMSite`:"
$SCCMNameSpace="root\SMS\site_$SCCMSite"
Get-WmiObject -namespace $SCCMNameSpace -computer $SCCMServer -query "select * from sms_r_system where LastLogonUserName='$SamAccountName'" | select *
LastLogonTimestamp
的输出如下所示:
LastLogonTimestamp : 20150330132039.000000+***
在网上我发现这种格式可以转换成这样的可读格式:
[datetime]::FromFileTime(20150330132039.000000+***).ToString('d MMMM yyyy')
但它并没有真正工作,因为它输出错误。当我删除 .
后面的最后一部分时,它给了我 1601 年的日期,这绝对是不正确的。
我认为 FromFileTime
方法不适合这种情况。
您可以使用 ParseExact
方法对原始值进行一些操作:
> $lastlogonstamp = "20150330132039.000000+***"
> $dt = [datetime]::parseexact($lastlogonstamp.split('.')[0],"yyyyMMddHHmmss",[System.Globalization.CultureInfo]::InvariantCulture)
> $dt
30 March 2015 13:20:39
> $dt.ToString('d MMMM yyyy')
30 March 2015
因为这是一个 WMI 对象,您可以使用
ManagementDateTimeConverter.ToDateTime(lastLogonStamp);
在 powershell 中我认为是