Active-Directory

在首次登錄場景中訪問 AD 屬性?

  • May 6, 2014

我的任務是改進我們目前的映像部署。現在,我們在成像後進行了大量的手動設置,以減少獲得新成像機器的使用者的工作量。我想盡可能地自動化這個。我們有很多短期志願者和實習生,所以在這裡節省的時間會很快增加。

一項任務是在 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 進行類似的查詢以獲取電腦型號和序列號。

引用自:https://serverfault.com/questions/591836