在首次登录的情况下访问 AD 属性?

在首次登录的情况下访问 AD 属性?

我的任务是改进我们当前的映像部署。目前,我们在映像之后进行了大量手动设置,以减少获得新映像机器的用户的工作量。我希望尽可能地实现自动化。我们有很多短期志愿者和实习生,因此这里的时间节省很快就会增加。

一项任务是在 Word 和 Excel 中设置默认保存位置。有些用户设置了 User HomeDrive 环境变量,但并非所有用户(以及所有短时间的学生都没有)。所有用户都设置了 UserSharedFolder ActiveDirectory 属性。这不会保存为环境变量。理想情况下,默认保存位置应设置为此 AD 属性的值。每个用户都不同。

关于如何处理这个问题有什么建议吗?

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

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

有没有其他更有意义的方法可以做到这一点?

答案1

在组策略首选项中,您可以在项目级别定位中执行 LDAP 查询,并将结果存储在环境变量中。该环境变量可以由注册表首选项项引用。(或由稍后运行的脚本引用,例如用户登录脚本)。

要使用组策略设置环境变量:

  • 编辑 GPO(或创建新的 GPO)
  • 转到用户配置 -> 首选项 -> Windows 设置 -> 环境
  • 创建新的环境变量
  • 名称 =MYSAVELOCATION
  • 值 =%_MYSAVELOCATION%
  • 在这种情况下,它应该是一个用户变量
  • 在“常见”下,选中“项目级定位”
  • 点击定位...
  • 新项目 -> LDAP 查询
  • 筛选器 =(&(objectClass=user)(sAMAccountName=%USERNAME%))
  • 绑定 =LDAP:
  • 属性 = userSharedFolder(我认为这是您想要的 AD 属性。再检查一下!
  • 环境变量名称 =_MYSAVELOCATION
  • 单击“确定”

然后,您可以创建引用 %MYSAVELOCATION% 的注册表组策略首选项。您还可以在运行的批处理文件或脚本中引用环境变量GPO 已提出申请。

如果您想在 PowerShell 中执行相同的操作,您可以这样做(例如在用户登录脚本中)。这与 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

从那里开始,它就像组策略首选项一样位于环境变量中。您也可以只获取 $user_shared_folder 的值,并使用 Set-ItemProperty 将其直接写入注册表,无需环境变量。但是,如果您有一个可能需要稍后引用它的脚本或应用程序,则将其保存在环境变量中会很方便。

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

相关内容