在首次登錄場景中訪問 AD 屬性?
我的任務是改進我們目前的映像部署。現在,我們在成像後進行了大量的手動設置,以減少獲得新成像機器的使用者的工作量。我想盡可能地自動化這個。我們有很多短期志願者和實習生,所以在這裡節省的時間會很快增加。
一項任務是在 Word 和 Excel 中設置預設保存位置。一些使用者設置了 User HomeDrive 環境變數,但不是全部(也沒有短期學生)。所有使用者都設置了 UserSharedFolder ActiveDirectory 屬性。這不會保存為環境變數。理想情況下,預設保存位置將設置為此 AD 屬性的值。每個使用者都是不同的。
有關如何管理此問題的任何建議?
我確定預設保存位置在系統資料庫中。我想使用組策略首選項來設置它,但我無法從 GPP 訪問 Active Directory 屬性。
我將如何在腳本中訪問它?它需要在使用者的上下文中執行。我無法訪問大多數機器上的 Powershell ActiveDirectory 模組。
有沒有更有意義的替代方法?
在組策略首選項中,您可以在項目級別目標中執行 LDAP 查詢並將結果儲存在環境變數中。該環境變數可以由 Registry Preference 項引用。(或由稍後執行的腳本引用,例如使用者登錄腳本)。
使用組策略設置環境變數:
- 編輯 GPO(或創建一個新的)
- 轉到使用者配置 -> 首選項 -> Windows 設置 -> 環境
- 創建一個新的環境變數
- 姓名 =
MYSAVELOCATION
- 價值 =
%_MYSAVELOCATION%
- 在這種情況下,它應該是一個使用者變數
- 在 Common 下,檢查 Item-level Targeting
- 點擊定位…
- 新項目 -> 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 進行類似的查詢以獲取電腦型號和序列號。