我一直负责改进目前的图像部署。 现在我们在成像之后进行大量的手动设置,以减less获得新成像机器的用户的工作。 我想尽可能自动化。 我们有很多短时间的志愿者和实习生,所以节省的时间很快就会加起来。
一个任务是在Word和Excel中设置默认保存位置。 一些用户具有用户HomeDrive环境variables集,但不是全部(并且都不是短时间的学生)。 所有用户都有UserSharedFolder ActiveDirectory属性集。 这不会保存为环境variables。 理想情况下,默认保存位置将被设置为此AD属性的值。 每个用户都有所不同。
有关如何pipe理这个的任何build议?
我确定默认保存位置在registry中。 我想使用组策略首选项来设置它,但是我无法从GPP访问Active Directory属性。
我如何在脚本中访问这个? 它将需要运行在用户的上下文中。 我将无法访问大多数机器上的Powershell ActiveDirectory模块。
有没有另外的方法来做到这一点更有意义?
在组策略首选项中,您可以在项目级别目标中执行LDAP查询,并将结果存储在环境variables中。 该环境variables可以被registry偏好项引用。 (或由稍后运行的脚本引用,例如用户login脚本)。
使用组策略设置环境variables:
MYSAVELOCATION %_MYSAVELOCATION% (&(objectClass=user)(sAMAccountName=%USERNAME%)) LDAP: userSharedFolder ( 我想这是你想要的AD属性,仔细检查一下! ) _MYSAVELOCATION 然后,您可以创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执行类似的查询来获取计算机型号和序列号。