尝试通过Powershell从AD中拉取一些信息,具体来说: samac 帐户名 名 姓 上次登录日期 上次设置的密码 启用 应用密码政策
我证明密码策略已应用的方法是使用 Get-ADUserResultantPasswordPolicy,并使用 applyto 属性来显示用户从何处获取其策略,因为我们使用的是细粒度密码策略。
get-adgroupmember <Group> -Recursive | % {get-aduser $_ -properties *}| select samaccountname,givenname,surname,lastlogondate,@{Name='PwdLastSet';Expression={[DateTime]::FromFileTime($_.PwdLastSet)}},enabled,@{name="MemberOf"; Expression={ $(Get-ADUserResultantPasswordPolicy $_) | select (@{Expression={ ($_.AppliesTo|%{$_.split(',')[0].substring(3)}) }})}} | OGV
此命令实际上提取了所有请求的信息
samaccountname givenname surname lastlogondate PwdLastSet enabled MemberOf
-------------- --------- ------- ------------- ---------- ------- --------
<Account> <First> <Last> <Date> <Date> True @{ ($_.AppliesTo|%{$_.split(',')[0].substring(3)}) =<Applies to Group>}
我试图弄清楚为什么它在显示结果策略之前添加了额外的位 '@{ ($.AppliesTo|%{$.split(',')[0].substring(3)}) ='。适用于。
这是预期的行为 - 如果您未能在计算表达式旁边提供名称或标签,
Select-Object
将使用表达式自己的源代码范围作为结果属性名称:
PS ~> 1 |Select { $_ * 10 }
$_ * 10
---------
10
PS ~> Get-Process -Id $PID |Select @{Expression={$_.Name}}
$_.Name
-------
pwsh
跳过嵌套的
Select
管道,而是使用 ForEach-Object
(别名 %
)直接计算属性值:
... |Select-Object ...,@Name="MemberOf"; Expression={$(Get-ADUserResultantPasswordPolicy $_).AppliesTo |% { $_.Split(',')[0].Substring(3)}}}