powershell - 从规范名称和时间戳固定 DN 始终设置为:1/01/1601 11:00:00 AM?
问题描述
我正在尝试修复下面的 PowerShell 脚本以列出名为Domain Admins的 AD 安全组的成员并将其导出到 .CSV 文件。
$ADGroupType = 'security'
$ADGroupNamePattern = 'Domain Admins'
$ResultFile = "C:\Result.csv"
function ConvertFrom-DN {
[cmdletbinding()]
param(
[Parameter(Mandatory,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)]
[ValidateNotNullOrEmpty()]
[string[]]$DistinguishedName
)
process {
foreach ($DN in $DistinguishedName) {
Write-Verbose $DN
foreach ( $item in ($DN.replace('\,','~').split(","))) {
switch ($item.TrimStart().Substring(0,2)) {
'CN' {$CN = '/' + $item.Replace("CN=","")}
'OU' {$OU += ,$item.Replace("OU=","");$OU += '/'}
'DC' {$DC += $item.Replace("DC=","");$DC += '.'}
}
}
$CanonicalName = $DC.Substring(0,$DC.length - 1)
for ($i = $OU.count;$i -ge 0;$i -- ){$CanonicalName += $OU[$i]}
if ( $DN.Substring(0,2) -eq 'CN' ) {
$CanonicalName += $CN.Replace('~','\,')
}
$qwer = [PSCustomObject]@{
'CanonicalName' = $CanonicalName;
}
Write-Output $qwer
}
}
}
Function Get-ADGroupMemberRecursive {
[CmdletBinding()]
Param(
[Parameter(ValueFromPipeline=$true)]
$Identity,
[string[]]$Property
)
Begin {
$splat = @{}
If ($Property) {$splat['Property'] = $Property}
}
Process {
Get-ADGroupMember -Identity $Identity | ForEach-Object {
If ($_.objectClass -eq 'User') {
Get-ADUser -Identity $_ @splat | Select-Object -Property @{n='Group'; e={$Identity.Name}}, whenCreated, lastLogon, lastLogonTimeStamp
} ElseIf ($_.objectClass -eq 'Group') {
Get-ADGroupMemberRecursive -Identity $_ @splat
}
}
}
}
Get-ADGroup -Filter "(groupCategory -eq '$ADGroupType') -AND (name -like '$($ADGroupNamePattern)')" |
Get-ADGroupMemberRecursive -Property Mail |
Select-Object Group,
Name,
SamAccountName,
Mail,
whenCreated,
@{n='Last Logon'; e={[datetime]::FromFileTime($_.lastLogon)}},
@{n='Last Logon TimeStamp'; e={[datetime]::FromFileTime($_.lastLogonTimeStamp)}},
@{n='OU Location'; e={ConvertFrom-DN ($_.DistinguishedName)}} |
Export-Csv -Path $ResultFile -NoTypeInformation
ii $ResultFile
上面脚本的问题是:
- LastLogon 日期/时间戳始终显示为 1/01/1601 11:00:00 AM。
- 正确填写的列只是上面的 AD 组名称和时间戳?
解决方案
推荐阅读
- javascript - javascript 中的 hasOwnProperty 和 Object.keys 无法按预期工作
- eclipse - Eclipse 中没有可用的源代码
- java - java - 如何在java中将两个二维数组相等?
- php - 存储信息故障
- c# - 如何将 Unity Android 应用程序与 MS SQL 服务器连接起来
- linux - 使用多个窗口打开 GNU Screen
- javascript - 非常大的树d3 v4中的重叠节点
- php - PHP Composer 无法打开流:无法通过代理连接到 HTTPS 服务器
- cmake - 从执行 CMakeLists.txt 中排除子目录
- python - 从另一个类调用列表实例