在首次login情况下访问AD属性?

我一直负责改进目前的图像部署。 现在我们在成像之后进行大量的手动设置,以减less获得新成像机器的用户的工作。 我想尽可能自动化。 我们有很多短时间的志愿者和实习生,所以节省的时间很快就会加起来。

一个任务是在Word和Excel中设置默认保存位置。 一些用户具有用户HomeDrive环境variables集,但不是全部(并且都不是短时间的学生)。 所有用户都有UserSharedFolder ActiveDirectory属性集。 这不会保存为环境variables。 理想情况下,默认保存位置将被设置为此AD属性的值。 每个用户都有所不同。

有关如何pipe理这个的任何build议?

我确定默认保存位置在registry中。 我想使用组策略首选项来设置它,但是我无法从GPP访问Active Directory属性。

我如何在脚本中访问这个? 它将需要运行在用户的上下文中。 我将无法访问大多数机器上的Powershell ActiveDirectory模块。

有没有另外的方法来做到这一点更有意义?

在组策略首选项中,您可以在项目级别目标中执行LDAP查询,并将结果存储在环境variables中。 该环境variables可以被registry偏好项引用。 (或由稍后运行的脚本引用,例如用户login脚本)。

使用组策略设置环境variables:

  • 编辑GPO(或创build一个新的)
  • 进入用户configuration – >首选项 – > Windows设置 – >环境
  • 创build一个新的环境variables
  • 名称= MYSAVELOCATION
  • 值= %_MYSAVELOCATION%
  • 在这种情况下,它应该是一个用户variables
  • 在“通用”下,选中“商品一级定位”
  • 点击定位…
  • 新build项目 – > LDAP查询
  • Filter = (&(objectClass=user)(sAMAccountName=%USERNAME%))
  • 绑定= LDAP:
  • Attribute = userSharedFolder我想这是你想要的AD属性,仔细检查一下!
  • 环境variables名称= _MYSAVELOCATION
  • 点击OK

然后,您可以创build引用%MYSAVELOCATION%的registry组策略首选项。 您也可以在GPO应用运行的batch file或脚本中引用环境variables。

如果你想在PowerShell中做同样的事情,你可以这样做(例如在用户login脚本中)。 这不依赖于PowerShell AD模块:

 $searcher = New-Object System.DirectoryServices.DirectorySearcher $searcher.SearchRoot = New-Object System.DirectoryServices.DirectoryEntry $searcher.Filter = "(&(objectClass=user)(sAMAccountName=$env:USERNAME))" $searcher.SearchScope = "Subtree" # I am assuming userShareFolder is the AD attribute you want # Double-check that and update this lin accordingly. $searcher.PropertiesToLoad.Add("userSharedFolder") | Out-Null $result = $searcher.FindOne() # All of $result.Properties must be lower-case! $user_shared_folder = $result.Properties.usersharedfolder Write-Output "User Shared Folder = $user_shared_folder" # Update the Environment Variables (two-step process) # Call SetEnvironmentVariable to make the change persistent. # Update $env:variable so the change affects the current process. [Environment]::SetEnvironmentVariable("MYSAVELOCATION", $user_shared_folder, "User") $env:MYSAVELOCATION = $user_shared_folder 

从那里,它就像组策略首选项一样在一个环境variables中。 你也可以只取$ user_shared_folder的值,并用Set-ItemProperty直接写入registry,不需要环境variables。 但是,如果您有脚本或应用程序,可能需要稍后参考它,则将其保留在环境variables中可能会很方便。

作为参考,我使用上面描述的技术从Active Directory获取全名和电子邮件地址,并将它们用于应用程序设置(例如个性化Office)。 您也可以使用WMI执行类似的查询来获取计算机型号和序列号。