尝试使用Windows Powershell的Active Directory模块导出CSV用户列表

时间:2017-01-30 18:02:23

标签: excel powershell csv active-directory

所以下面是我到目前为止所处的位置:

import-module activedirectory
$domain = "ourdomain"

Get-ADUser -Filter {enabled -eq $true} -Properties whenCreated,EmailAddress,CanonicalName |

select-object Name,EmailAddress,CanonicalName,whenCreated | export-csv C:\Data\test.csv

不幸的是,当我运行上述内容时,我在CSV中以两种不同的格式获取日期,例如:

  • 2017年1月1日
  • 1/01/2017 8:35:56 PM

这带来的问题是,对它们进行排序并不是一种干净的方法。 Excel的格式化不会将这些格式中的任何一种更改为更像另一种格式,这是因为时间包含在一个而不是另一个中,并且因为包含时间的格式不能使用单位数字中的尾随零,但是时间排他格式。

我们有一个现有的脚本,使用LastLogonTimestamp属性捕获用户,通过将底线更改为以下内容来正确执行此操作:

select-object Name,EmailAddress,CanonicalName,@{Name="Timestamp"; Expression={[DateTime]::FromFileTime($_.whenCreated).ToString('yyyy-MM-dd_hh:mm:ss')}}

由于某些原因,当我们查询LastLogonTimestamp属性时,此表达式正常运行,但是当我们运行此版本查询whenCreated属性时,我们会在Timestamp标题下方获得一个完全空白的列

我对PowerShell本身并不是特别了解,我的同事找到了LastLogonTimestamp的原始脚本,只是在网上发现并尽可能地将其调整为适合我们,所以我不知道这一行中的某些内容是否可以正常使用其中一个属性,而不是另一个属性。虽然在同一个程序中使用日期的两个属性会以不同的格式存储它们,但我觉得很奇怪,所以我不相信它就是它。

在任何情况下,任何人都可以提供帮助我们在此脚本的输出中获得统一日期格式的任何帮助将非常感激 - 如果它更容易做,它不需要包含时间远离它,尽管如果它们同样容易,我们也可以保留它。

1 个答案:

答案 0 :(得分:1)

whencreated已经是[DateTime]。当你运行这样的东西时,请注意属性之间的区别:

Get-ADUser TestUser -Properties lastlogon,whenCreated | select lastlogon,whenCreated | fl
(Get-ADUser TestUser -Properties lastlogon).lastlogon | gm
(Get-ADUser TestUser -Properties whenCreated).whenCreated | gm

这意味着您无需在运行DateTime方法之前转换为toString()

select-object @{Name="Timestamp"; Expression={$_.whenCreated.ToString('yyyy-MM-dd_hh:mm:ss')}}