从LastLogonDate中仅提取日期部分

时间:2016-03-22 19:07:08

标签: powershell automation

我希望能够将此日期与此Get-ADUser命令的输出隔离开来:

Get-ADUser -identity johnd -properties LastLogonDate | Select-Object name, LastLogonDate

结果如下:

name                                                        LastLogonDate
----                                                        -------------
John Doe                                                3/21/2016 10:01:36 AM

我希望能够删除所有文本,只留下日期:

3/21/2016

我已尝试将此拆分过滤器添加到上述命令的末尾,这与unix中的awk类似。 (#2关闭,仅举例)

%{ $_.Split(',')[2]; }

导致此错误:

[Microsoft.ActiveDirectory.Management.ADUser] doesn't contain a method named 'Split'

3 个答案:

答案 0 :(得分:5)

该cmdlet的结果是具有一组属性的对象。您在表格格式中看到的输出不是对象中包含的输出;它是它的显示表示。

因此,要首先获取日期对象,您可以修改Select-Object调用(已经在削减属性),如下所示:

$lastLogon = Get-ADUser -identity johnd -properties LastLogonDate | 
    Select-Object -ExpandProperty LastLogonDate

$lastLogon现在包含[DateTime] object

您可以使用format strings格式化它:

$lastLogon.ToString('MM/dd/yyyy')

甚至更好:

$lastLogon.ToShortDateString()

(这些是略有不同的表示;后者不是零填充)。

格式字符串使您可以完全控制表示。

答案 1 :(得分:1)

你能用变量吗?如果是的话,

PS>$hi=Get-ADuser -identity johnd -properties LastLogonDate|select-object name,LastLogonDate
PS>$hi.LastLogonDate.ToShortDateString()
3/21/2016
PS>$hi.name
John Doe

答案 2 :(得分:0)

我不难,更简单的方法是:

Get-ADUser -SearchBase 'OU=Users,OU=Home,DC=Domain,DC=local' -filter {Enabled -eq $True} -Properties * | 
ForEach-Object {$_.whenChanged.ToShortDateString() + ',' + $_.SamAccountName}