Powershell 中的嵌套表达式返回部分表达式

问题描述 投票:0回答:1

尝试通过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)}) ='。适用于。

powershell active-directory expression
1个回答
0
投票

这是预期的行为 - 如果您未能在计算表达式旁边提供名称或标签,

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)}}}
© www.soinside.com 2019 - 2024. All rights reserved.