我的任务是改进我们当前的映像部署。目前,我们在映像之后进行了大量手动设置,以减少获得新映像机器的用户的工作量。我希望尽可能地实现自动化。我们有很多短期志愿者和实习生,因此这里的时间节省很快就会增加。
一项任务是在 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 进行类似的查询以获取计算机型号和序列号。