如何使用 PowerShell 登录脚本获取当前 OU?

Fra*_*ans 5 powershell windows-server-2008

我正在设置一个终端服务器 2008,它将被不同的客户组织使用,每个组织都有多个单独的用户帐户。我希望每个客户端组织都有一个映射到 \server\clients\ 的驱动器

他们的 OU 名称也是他们的客户端名称,因此我希望能够找到他们当前的 OU,然后将其用于映射命令。OU 是分层的,所以它是我需要的最底层的 OU 名称。

示例
OU:
专用客户端\AjaxCorp

应该得到一个映射到
\\server1\shares\AjaxCorp的驱动器

关于如何获得 OU 的任何建议?我相信这一定很容易,只是我还没弄明白......

我确实找到了有关如何使用 VB 脚本执行此操作的信息,但由于它是一个全新的环境,我认为改用 PowerShell 会很好。

Mas*_*imo 7

这将为您提供当前计算机的 LDAP 路径:

$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
Run Code Online (Sandbox Code Playgroud)

根据 $strPath 中的结果,您应该能够构建到所需共享的网络路径。


Fra*_*ans 0

我最终弄清楚了如何从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
Run Code Online (Sandbox Code Playgroud)

然而,我随后意识到使用 OU 会充满困难,因为用户可能是多个 OU 的成员。因此,我决定使用 User 对象中的 Company 字段。从上面的相同代码我可以做

$strCompany = $objUser.Company   
Run Code Online (Sandbox Code Playgroud)

然后进行驱动器映射。

这回答了我最初的问题,但为了感兴趣,我应该提到的是,我最终决定不使用 PowerShell 作为登录脚本:部署起来太痛苦了;您不能只将 .ps1 文件放入组策略中,您必须从 cmd 文件显式调用 Powershell.exe。所以,我在几分钟内用 vbscript 重写了我的脚本,并后悔我没有开始这样做:)