如何使用PowerShell将计算机添加到通讯组

时间:2016-10-24 16:39:01

标签: powershell

我已经创建了下面的代码,我不知道它不起作用。如果我手动执行此操作它可以工作,但似乎问题是我的变量不是作为数组进入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

1 个答案:

答案 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帮助链接来自我的代码块(如果有):