我正在build立一个terminal服务器2008,将由不同的客户组织使用,每个组织都有多个个人用户帐户。 我希望每个客户机构都有一个映射到\ server \ clients \
他们的OU名称也是他们的客户端名称,所以我希望能够find他们当前的OU,然后将其用于映射命令。 OU是分层的,所以它是我需要的最底层的OU名称。
例
OU:
专用客户\ AjaxCorp
应该得到一个驱动器映射到
\\服务器1 \共享\ AjaxCorp
有关如何获得OU的build议? 我相信这一定很容易,我只是没有想出来…
我确实find了有关如何使用VB脚本执行此操作的信息,但由于这是一个全新的环境,我认为使用PowerShell会更好。
这将使您获得当前计算机的LDAPpath:
$objDomain = New-Object System.DirectoryServices.DirectoryEntry $strFilter = "(&(objectCategory=computer)(name=" + $env:computername + "))" $objSearcher = New-Object System.DirectoryServices.DirectorySearcher $objSearcher.SearchRoot = $objDomain $objSearcher.Filter = $strFilter $strPath = $objSearcher.FindOne().Path
从$ strPath中的结果,你应该能够build立一个你需要的共享的networkingpath。
要实际返回用户对象的Microsoft.ActiveDirectory.Management.ADOrganizationalUnittypes的对象,请使用以下命令:
Get-ADOrganizationalUnit -Identity $(($adUser = Get-ADUser -Identity $env:USERNAME).DistinguishedName.SubString($adUser.DistinguishedName.IndexOf("OU=")))
一台电脑也可以做到这一点:
Get-ADOrganizationalUnit -Identity $(($adComputer = Get-ADComputer -Identity $env:COMPUTERNAME).DistinguishedName.SubString($adComputer.DistinguishedName.IndexOf("OU=")))
find用户的DN并从中parsing出来。
我不是Powershell的专家,甚至不是业余爱好者,但这可能是我开始的地方。
对不起,我不能有任何更多的援助,希望这是一些思考的食物。
我最终想出了如何从http://www.microsoft.com/technet/scriptcenter/resources/pstips/dec07/pstip1207.mspx获取OU,并认为我会分享结果。 获取OU的代码是这样的:
$strName = $env:username $strFilter = "(&(objectCategory=User)(samAccountName=$strName))" $objSearcher = New-Object System.DirectoryServices.DirectorySearcher $objSearcher.Filter = $strFilter $objPath = $objSearcher.FindOne() $objUser = $objPath.GetDirectoryEntry() $objUser.memberOf
然而,我后来认识到,使用这个OU会很困难,因为用户可能是多个OU的成员。 因此,我决定使用User对象中的Company字段。 从上面的相同的代码我可以做到
$strCompany = $objUser.Company
然后做我的驱动器映射。
这回答了我的原始问题,但仅仅为了提高兴趣,我应该提一下,我决定不使用PowerShell作为login脚本:这太痛苦了。 您不能只将.ps1文件放在组策略中,您必须从cmd文件显式调用Powershell.exe。 所以,我用几分钟的时间在vbscript中重写了我的脚本,后悔我还没有开始:)
然而,我后来认识到,使用这个OU会很困难,因为用户可能是多个OU的成员
不可以 根据定义,用户帐户只能在AD中的一个地方居住。 不同的用户,但是,可能有相同的RDN。
我用这个来获得ou
$主机名=主机名
$ hostnameobject = get-adcomputer $ hostname
$ ou = $ hostnameobject.distinguishedname