PowerShell e Active Directory

Post on 24-May-2015

2.527 views 2 download

description

Manipulando o Active Directory com PowerShell

Transcript of PowerShell e Active Directory

Sistemas Operacionais

PowerShell Parte 2User Management

User Management

• Podemos gerenciar objetos do Active Directory com scripts PowerShell;

Connecting to a Domain

• Seu primeiro objetivo é conectar (somente se uma máquina está em um domínio).

Logar

Container

• Domínios têm uma estrutura hierárquica como a estrutura de diretórios do sistema de arquivos.

• Recipientes dentro do domínio são diretórios ou unidades organizacionais. Se você quiser acesso a um recipiente, especifique o caminho LDAP para o recipiente.

Acesso a Container

Acesso a Container

Acesso a Container

Listando Users

Listando Users

Buscando um Usuário

Procurando Elementos

$UserName = "*mini*"

$searcher = New-Object DirectoryServices.DirectorySearcher([ADSI]"")

$searcher.filter = "(&(objectClass=user)(sAMAccountName= $UserName))"

$searcher.findall()

Se não estiver logado

• Se não estiver logado, antes do script anterior deve adicionar o comando:

$domain = New-Object DirectoryServices.DirectoryEntry("LDAP://192.168.1.1","domain\user", "secret")

Usando a Função

Listando Propriedades

Alterando uma Propriedade

Lendo uma Propriedade

Podemos ler propriedades de objetos.

$useraccount.Description

$useraccount.Get("Description")

$useraccount.psbase.InvokeGet("Description")

Modificando Propriedades

$searchuser = Get-LDAPUser Guest

$useraccount = $searchuser.GetDirectoryEntry()

# Method 1:

$useraccount.Description = "A new description"

$useraccount.SetInfo()

# Method 2:

$useraccount.Put("Description", "Another new description")

$useraccount.SetInfo()

# Method 3:

$useraccount.PSBase.InvokeSet("Description", "A third description")

$useraccount.SetInfo()

Modificando Propriedades

$ldap = "CN=Users"

$domain = [ADSI]""

$dn = $domain.distinguishedName

$users = [ADSI]"LDAP://$ldap,$dn"

$users.PSBase.Children |

Where-Object { $_.sAMAccountType -eq 805306368 } |

Where-Object { $_.Description.toString() -eq "" } |

ForEach-Object { $_.Description = "Standard description"; `

$_.SetInfo(); $_.sAMAccountName + " was changed." }

Deletando uma Propriedade

• O método PutEx() pode excluir propriedades, requer três parâmetros:

– Indica o que o método deve fazer;

– Propriedade que será afetada;

– Valor que será utilizado pelo mecanismo.

Deletando uma Propriedade

Deletando uma Propriedade

$useraccount.PutEx(1, "Description", 0)

$useraccount.SetInfo()

Alterando um Valor por Completo

$useraccount.PutEx(2, "otherHomePhone", @("123", "456", "789"))

$useraccount.SetInfo()

Adicionando Informações a Propriedade

$useraccount.PutEx(3, "otherHomePhone", @("555"))

$useraccount.SetInfo()

Excluindo Parte da Propriedade

$useraccount.PutEx(4, "otherHomePhone", @("456", "789"))

$useraccount.SetInfo()

Invocando Métodos

$guest | Get-Member -memberType *Method

$useraccount.SetPassword("New password")

$useraccount.ChangePassword("Old password", "New password")

Criando uma Unidade Organizacional

$company = $domain.Create("organizationalUnit", "OU=Idera")

$company.SetInfo()

$sales = $company.Create("organizationalUnit", "OU=Sales")

$sales.SetInfo()

$marketing = $company.Create("organizationalUnit", "OU=Marketing")

$marketing.SetInfo()

$service = $company.Create("organizationalUnit", "OU=Service")

$service.SetInfo()

Tipos de Grupos

Criando Grupos

$group_marketing = $marketing.Create("group", "CN=Marketinglights")

$group_marketing.psbase.InvokeSet("groupType", -2147483648 + 2)

$group_marketing.SetInfo()

$group_newsletter = $company.Create("group", "CN=Newsletter")

$group_newsletter.psbase.InvokeSet("groupType", 2)

$group_newsletter.SetInfo()

Criando Usuários

$user = $sales.Create("User", "CN=MyNewUser")

$user.SetInfo()

$user.Description = "My New User"

$user.SetPassword("TopSecret99")

$user.psbase.InvokeSet('AccountDisabled', $false)

$user.SetInfo()

Referência

• WELTNER, Tobias. Windows PowerShell MVP. Bbs Technologies, 2009.