我已经创建了下面的代码,我不知道它不起作用。如果我手动执行此操作它可以工作,但似乎问题是我的变量不是作为数组进入for-eachobject并且一次使用变量的全部内容而不是一个计算机名称。
非常感谢任何帮助。
import-module activedirectory
$virtuals = get-adcomputer -filter "Name -like '*v'" | foreach-object{$_.distinguishedname}
foreach-object -inputobject $virtuals {
Add-ADGroupMember VMs "$_"
}
我得到的错误是:
Add-ADGroupMember : Cannot find an object with identity: 'CN=CSD-024V,OU=VM,OU=Workstations,OU=...
' under: 'DC=co,DC=****,DC=wi,DC=us'.
At line:4 char:22
+ Add-ADGroupMember <<<< VMs "$_"
+ CategoryInfo : ObjectNotFound: (CN=CSD-024V,OU=...ark,DC=wi,DC=us:ADPrincipal) [Add-ADGroupMember], ADIdentityNotFoundException
+ FullyQualifiedErrorId : SetADGroupMember.ValidateMembersParameter,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
答案 0 :(得分:2)
这就是发生的事情。考虑:
PS D:\> $nums = 1..5
PS D:\> $nums | ForEach-Object { "* $_ *" }
* 1 *
* 2 *
* 3 *
* 4 *
* 5 *
PS D:\> ForEach-Object -InputObject $nums { "* $_ *" }
* 1 2 3 4 5 *
我不知道为什么存在这种区别,但在帮助here中有记录:
将InputObject参数与ForEach-Object一起使用时,而不是 管道命令结果为ForEach-Object,InputObject值为 作为单个对象处理。即使值为a,也是如此 作为命令结果的集合,例如-InputObject (获取处理)。
所以你的解决方案是:
$virtuals | ForEach-Object {
Add-ADGroupMember VMs "$_"
}
自我生成的PS帮助链接来自我的代码块(如果有):
ForEach-Object
Add-ADGroupMember
(在模块ActiveDirectory
中)