使用Powershell在任务序列期间将计算机添加到多个Active Directory组

时间:2017-05-15 14:07:16

标签: powershell active-directory sccm

我尝试设置SCCM的任务序列,以自动将笔记本电脑添加到3个Active Directory组。我已经设置了一个步骤来执行此操作,并且正在调用Powershell脚本来执行此操作。该脚本应该作为网络管理员运行,所以我不相信我在授权方面遇到任何问题,但我对Powershell来说是新手,所以我相信我的问题在于我的语法。我的脚本非常简单,我看到的所有资源似乎都让Powerershell过于复杂,因为我需要做的事情。这是我的剧本:

SELECT d.name

FROM `database1`.domains AS d
WHERE (SELECT COUNT(u.id) FROM `database2`.users u) > 0

$ env:computername应该自动收集在任务序列中早先建立的计算机名称,并且需要使用powershell添加后面的$,我已找到。

对此的任何帮助都将非常感激。

编辑:我终于让它工作了,下面是我发现并用于其中一个powershell脚本的代码 -

ADD-ADGroupMember "GroupOne" -members "$env:computername$"
ADD-ADGroupMember "GroupTwo" -members "$env:computername$"
ADD-ADGroupMember "GroupThree" -members "$env:computername$"

2 个答案:

答案 0 :(得分:1)

不是尝试从环境变量中编写计算机的帐户名,而是使用它来添加到组中,只需从Active Directory中获取计算机对象:

$Computer = Get-ADComputer -Identity $env:ComputerName
foreach ($Group in @("GroupOne", "GroupTwo", "GroupThree")) {
    Add-ADGroupMember -Identity $Group -Members $Computer
}

答案 1 :(得分:0)

由于您提到您没有可用的AD cmdlet。以下是使用ADSI的方法:

$filter = "(&(objectCategory=computer)(objectClass=computer)(cn=$env:COMPUTERNAME))"
$ComputerDN = ([adsisearcher]$filter).FindOne().Properties.distinguishedname

$GroupName = "GroupOne"
$filter = "(&(objectClass=Group)(cn=$GroupName))"
$GroupDN = ([adsisearcher]$filter).FindOne().Properties.distinguishedname
$Group = [adsi]"LDAP://$GroupDN"

$Group.Add($ComputerDN)

$GroupName = "GroupTwo"
$filter = "(&(objectClass=Group)(cn=$GroupName))"
$GroupDN = ([adsisearcher]$filter).FindOne().Properties.distinguishedname
$Group = [adsi]"LDAP://$GroupDN"

$Group.Add($ComputerDN)

$GroupName = "GroupThree"
$filter = "(&(objectClass=Group)(cn=$GroupName))"
$GroupDN = ([adsisearcher]$filter).FindOne().Properties.distinguishedname
$Group = [adsi]"LDAP://$GroupDN"

$Group.Add($ComputerDN)

如果你有更多的团体,那么它可能值得变成一个功能。

只需确保无论运行何种用户上下文,都有权将成员添加到该组。