如何使用PowerShelllogin脚本获取当前OU?

我正在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