Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 如何从Get ADUser中捕获并保持相同格式的数据,但使用属性子集?_Powershell - Fatal编程技术网

Powershell 如何从Get ADUser中捕获并保持相同格式的数据,但使用属性子集?

Powershell 如何从Get ADUser中捕获并保持相同格式的数据,但使用属性子集?,powershell,Powershell,我一直在使用Get ADUser将数据捕获到$users对象中。这对于使用Foreach对象并推送变量$user以获取ADPrincipalGroupMembership$user非常有用。cmdlet接受$user,我获取数据 由于我正在与大量用户合作(进入10万年),我希望通过选择对象(包括Samaccountname)来传递Get ADUser的结果,但一旦我这样做,Get ADPrincipalGroupMembership$user就不再起作用了。现在,如果我使用-ExpandProp

我一直在使用Get ADUser将数据捕获到$users对象中。这对于使用Foreach对象并推送变量$user以获取ADPrincipalGroupMembership$user非常有用。cmdlet接受$user,我获取数据

由于我正在与大量用户合作(进入10万年),我希望通过选择对象(包括Samaccountname)来传递Get ADUser的结果,但一旦我这样做,Get ADPrincipalGroupMembership$user就不再起作用了。现在,如果我使用-ExpandProperty和Samaccountname,那么cmdlet将再次工作,但我只能使用1个属性

所以我的问题是,是否有一种方法可以在维护格式的同时仅从Get ADUser获取所需的属性,以便其他cmdlet(如Get-ADPrincipalGroupMembership)可以使用数据

最后,我知道我可以使用$user.Samaccountname,但我正在尝试看看是否可以直接从对象实现同样的功能

编辑:为了详细说明,从$users中捕获的数据用于许多其他命令。我以Get ADPrincipalGroupMembership为例。另外需要注意的是,当我开始使用select选项时,我的函数运行的时间减少了几倍。包含我的函数的脚本从几个小时变为不到30分钟。我想多次运行Get ADUser将再次增加脚本所需的时间。

无需使用foreach。您可以将Get ADUser直接导入Get ADPrincipalGroupMembership,它将遍历广告主体,例如:

Get-ADUser -SearchBase 'OU=Staff,DC=contoso,DC=com' -Filter * | Get-ADPrincipalGroupMembership
甚至:

$users = Get-ADUser -SearchBase 'OU=Staff,DC=contoso,DC=com' -Filter *
$users | Get-ADPrincipalGroupMembership
无法使用选择对象的原因如下:

是因为“选择”对象为您提供:

PS> $users | Select-Object SamAccountName

SamAccountName
--------------
jsmith
bross

只有一个字符串属性SamAccountName的对象数组。很遗憾,Get-ADPrincipalGroupMembership仅接受Microsoft.ActiveDirectory.Management.ADPrincipal作为管道中的。因此,为什么不能向其传递字符串数组。这意味着使其工作的唯一方法是直接传递AD Principal对象,或者使用foreach迭代它们,并直接使用参数指定用户。

谢谢@HAL9256!我添加了更多信息-我正在使用$users中的数据查询许多事情-1是“GetAdPrincipalGroupMembership”。我必须做一些阅读,但我想我要避免的是创建字符串数组:使用Get Member,我看到数组将Samaccountname的MemberType列为NoteProperty而不是Property。那么,这是否意味着如果我使用“Select-ExpandProperty”,那么输出仍然是Microsoft.ActiveDirectory.Management.ADPrincipal?另外,是否有其他cmdlet可以将数据保留为Microsoft.ActiveDirectory.Management.ADPrincipal,并具有我想要的属性而不是默认属性?好的,我马上就到了。让它为1个用户工作$user=get aduser-filter{samaccountname-eq userid}{$$\.samaccountname,$\.Description,$\.MemberOf,}然后,我可以使用该对象$用户| Get ADPrincipalGroupMembership Compare object-ReferenceObject$GroupList-DifferenceObject$user.Membership剩下的就是为许多$users执行此操作。它是否像在我捕获的属性列表之前添加“foreach”一样简单?
PS> $users | Select-Object SamAccountName

SamAccountName
--------------
jsmith
bross