Como posso obter a UO atual com um script de login do PowerShell?

4

Estou configurando um Terminal Server 2008 que será usado por diferentes organizações de clientes, cada uma com várias contas de usuário individuais. Eu gostaria que cada organização cliente tivesse uma unidade mapeada para \ server \ clients \

O nome da unidade organizacional também é o nome do cliente, portanto, gostaria de poder localizar a unidade organizacional atual e usá-la para o comando de mapeamento. As UOs são hierárquicas, portanto, é o nome da UO mais baixo de que preciso.

Exemplo
    OU:
       Clientes dedicados \ AjaxCorp

Deve-se obter uma unidade mapeada para o
    \\ server1 \ shares \ AjaxCorp

Alguma sugestão sobre como posso obter a UO? Tenho certeza que deve ser fácil, eu não descobri ...

Eu encontrei informações sobre como fazer isso com o script VB, mas como é um ambiente totalmente novo, achei que seria bom usar o PowerShell.

    
por Frans 09.09.2009 / 13:35

6 respostas

0

Eu finalmente descobri como obter a OU do link e pensei Eu compartilharia os resultados. O código para obter as UOs é este:

$strName = $env:username
$strFilter = "(&(objectCategory=User)(samAccountName=$strName))"

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.Filter = $strFilter

$objPath = $objSearcher.FindOne()
$objUser = $objPath.GetDirectoryEntry()
$objUser.memberOf

No entanto, tive a percepção de que o uso da OU seria uma tarefa difícil, já que um usuário pode ser membro de várias OUs. Portanto, decidi usar o campo Empresa no objeto Usuário. Do mesmo código acima eu posso fazer

$strCompany = $objUser.Company   

E, em seguida, faço o mapeamento da minha unidade.

Isso responde à minha pergunta original, mas apenas por interesse devo mencionar que decidi não usar o PowerShell para o script de logon, afinal de contas: é muito difícil de implantar; Você não pode simplesmente colocar um arquivo .ps1 na diretiva de grupo, você deve explicitamente chamar Powershell.exe de um arquivo cmd. Então, eu reescrevi meu script em vbscript em poucos minutos e me arrependi de não ter começado com isso:)

    
por 10.09.2009 / 13:19
3

Isso fornecerá o caminho LDAP para o computador atual:

$objDomain = New-Object System.DirectoryServices.DirectoryEntry  
$strFilter = "(&(objectCategory=computer)(name=" + $env:computername + "))"

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher  
$objSearcher.SearchRoot = $objDomain  
$objSearcher.Filter = $strFilter

$strPath = $objSearcher.FindOne().Path

Do resultado em $ strPath, você deve ser capaz de criar um caminho de rede para o compartilhamento que você precisa.

    
por 09.09.2009 / 14:43
1

Para realmente retornar um objeto do tipo Microsoft.ActiveDirectory.Management.ADOrganizationalUnit de um objeto de usuário, use o seguinte:

Get-ADOrganizationalUnit -Identity $(($adUser = Get-ADUser -Identity $env:USERNAME).DistinguishedName.SubString($adUser.DistinguishedName.IndexOf("OU=")))

O mesmo pode ser feito para um computador:

Get-ADOrganizationalUnit -Identity $(($adComputer = Get-ADComputer -Identity $env:COMPUTERNAME).DistinguishedName.SubString($adComputer.DistinguishedName.IndexOf("OU=")))
    
por 17.03.2015 / 19:18
0

Encontre o DN do usuário e analise-o.

Eu não sou um especialista em Powershell, ou mesmo um amador, mas é provavelmente onde eu começaria.

Desculpe, não posso ser mais útil do que isso, espero que seja um pouco de reflexão.

    
por 09.09.2009 / 14:56
0

However, I then had a realisation that using the OU would be fraught with difficulty as a user may be a member of multiple OU's

Não. Não pode. Por definição, uma conta de usuário pode residir apenas em um local no AD. No entanto, usuários diferentes podem ter o mesmo RDN.

    
por 17.12.2012 / 17:03
0

Eu usei isso para obter o ou

$ hostname = hostname

$ hostnameobject = get-adcomputer $ hostname

$ ou = $ hostnameobject.distinguishedname

    
por 08.02.2013 / 15:37