【问题标题】:Foreach(Powershell) doesn't seems to be working properlyForeach(Powershell)似乎无法正常工作
【发布时间】:2018-05-29 04:32:41
【问题描述】:

我是 Powershell 脚本的新手。我正在尝试在 GUI 框中检索域用户信息,例如帐户信息、密码过期/锁定信息、DL 组、邮箱、安全组(用户所属的组)等。

我可以获取帐户/密码信息,但是无法在文本框中获取群组成员信息。我只从组成员中获得第一组。 这是一个代码:

$userinfo = (Get-aduser $user -Properties *)

"============================================================================================================"
"`t `t `t `t `t `t ACCOUNT DETAILS" 
"============================================================================================================"
$userinfo | fl DisplayName, EmailAddress, Enabled, Title, @{n="Manager";e={(Get-aduser -id $_.manager).name}},Department,@{n="Extension";e={$_.IPphone}}, TelephoneNumber, Created, Modified, UserPrincipalName, SamAccountName,@{n="Country";e={$_.co}}, Office, msExchWhenMailboxCreated   
"============================================================================================================"
"`t `t `t `t `t  PASSWORD/LOCKOUT DETAILS" 
"============================================================================================================"
$userinfo | fl LockedOut, PasswordExpired, lockoutTime, LastLogonDate , LastBadPasswordAttempt, PasswordLastSet, @{Name="Password Expires in (days)";Expression={(new-timespan -start $EndDate -end ([datetime]::FromFileTime((Get-aduser $user -Properties "msDS-UserPasswordExpiryTimeComputed")."msDS-UserPasswordExpiryTimeComputed"))).Days}}
"============================================================================================================"
"`t `t `t `t `t  Distribution Groups (AD)" 
"============================================================================================================"
$userinfo.memberof  | %{(get-adgroup -id $_ -Properties:groupcategory| ?{$_.groupcategory -match "Distribution" }).name}

这是输出文本框。

enter image description here

在文本框中显示结果时,Foreach 似乎无法正常工作。如果您需要更多信息,请告诉我。

【问题讨论】:

  • 我错了还是你没有填写变量$miduser?如果是这样,$miduser.memberof 是空的,因此 Foreach-Object 没有什么可使用的,对吧?
  • @Olaf,它将是 $userinfo 而不是 $miduser。当我在控制台上运行它或导出到 csv 时它工作正常,但不是在文本框中。
  • @TessellatingHeckler,我没有使用格式列表的输出。相反,我正在使用对象的 memberof 属性。在 ise 上运行或导出到 csv 但在 windows 窗体的文本框上运行时,相同的代码可以正常工作。

标签: powershell


【解决方案1】:
$userinfo = (Get-aduser $user -Properties *)

"============================================================================================================"
"`t `t `t `t `t `t ACCOUNT DETAILS" 
"============================================================================================================"
$userinfo | fl DisplayName, EmailAddress, Enabled, Title, @{n="Manager";e={(Get-aduser -id $_.manager).name}},Department,@{n="Extension";e={$_.IPphone}}, TelephoneNumber, Created, Modified, UserPrincipalName, SamAccountName,@{n="Country";e={$_.co}}, Office, msExchWhenMailboxCreated   
"============================================================================================================"
"`t `t `t `t `t  PASSWORD/LOCKOUT DETAILS" 
"============================================================================================================"
$userinfo | fl LockedOut, PasswordExpired, lockoutTime, LastLogonDate , LastBadPasswordAttempt, PasswordLastSet, @{Name="Password Expires in (days)";Expression={(new-timespan -start $EndDate -end ([datetime]::FromFileTime((Get-aduser $user -Properties "msDS-UserPasswordExpiryTimeComputed")."msDS-UserPasswordExpiryTimeComputed"))).Days}}
"============================================================================================================"
"`t `t `t `t `t  Distribution Groups (AD)" 
"============================================================================================================"
($userinfo.memberof | foreach { Get-ADGroup $_ } | Where {$_.GroupCategory -eq "Distribution"}).Name | FL

最后一行现在使用您在第一行创建的$userinfo 对象作为用户的成员资格,并进行适当的Where 比较。

如果您确实打算在最后一行使用$miduser,它可能不起作用的一个原因是Where 语句的结果属性区分大小写。我不确定为什么您只会收到一个结果而不是其他结果。

【讨论】:

  • 亚当,对不起,它是 $userinfo.memberof 而不是 $miduser.memberof。
  • 我已经提供了答案
  • 不,还是一样。
  • 添加` | FL`到行尾
  • 我找到了一种解决方法。实际上,我在 Try and Catch 语句中使用了这段代码(包含 Foreach),它没有在 Textbox 中提供所需的输出。现在我使用 If 和 Else 效果很好。下次我将分享整个代码。谢谢:)
猜你喜欢
  • 2017-09-04
  • 2012-05-06
  • 2013-02-17
  • 2017-10-09
  • 2017-08-03
  • 2014-05-02
  • 2011-09-11
  • 2016-02-11
  • 1970-01-01
相关资源
最近更新 更多