Nas Preferências da Política de Grupo, você pode fazer uma consulta LDAP na segmentação por nível de item e armazenar o resultado em uma variável de ambiente. Essa variável de ambiente pode ser referenciada por um item de preferência de registro. (Ou referenciado por um script que é executado posteriormente, por exemplo, um script de logon do usuário).
Para definir a variável de ambiente usando a Diretiva de Grupo:
- Edite o GPO (ou crie um novo)
- Ir para a configuração do usuário - > Preferências - > Configurações do Windows - > Meio Ambiente
- Crie uma nova variável de ambiente
- Nome =
MYSAVELOCATION
- Valor =
%_MYSAVELOCATION%
- Nesse caso, deve ser uma variável de usuário
- Em Comum, selecione Segmentação no nível do item
- Clique em Segmentação ...
- Novo item - > Consulta LDAP
- Filtro =
(&(objectClass=user)(sAMAccountName=%USERNAME%))
- Ligação =
LDAP:
- Atributo =
userSharedFolder
( acho que esse é o atributo do AD que você quer. Verifique novamente! ) - Nome da variável de ambiente =
_MYSAVELOCATION
- Clique em OK
Em seguida, você pode criar um item de preferência de diretiva de grupo do registro que referencia% MYSAVELOCATION%. Você também pode fazer referência à variável de ambiente em um arquivo em lotes ou script que é executado após o GPO ter sido aplicado.
Se você quisesse fazer o equivalente no PowerShell, poderia fazer isso (por exemplo, em um script de logon do usuário). Isso não depende dos módulos AD do PowerShell:
$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
De lá, ele está em uma variável de ambiente, assim como nas Preferências da Política de Grupo. Você também pode pegar o valor de $ user_shared_folder e gravá-lo diretamente no registro com Set-ItemProperty, sem necessidade de variáveis de ambiente. No entanto, mantê-lo em uma variável de ambiente pode ser útil se você tiver um script ou aplicativo que precise referenciá-lo posteriormente.
Para referência, eu uso as técnicas descritas acima para obter o nome completo e o endereço de e-mail do Active Directory e usá-los para a configuração do aplicativo (por exemplo, personalizando o Office). Você também pode fazer uma consulta semelhante com o WMI para obter o modelo do computador e o número de série.