O Windows PowerShell Automatizando o usuário de configuração, parte 4

Don Jones

Conteúdo

Decidir na entrada
Ao preencher os grupos
Atributos adicionais
Fazer isso além
Algumas considerações final

Essa é a conclusão da série de quatro na qual mostrei você como automatizar o processo de configuração de novos usuários no Active Directory. Até agora, eu já demonstrou como criar novo usuário contas do Active Directory, crie as pastas base e atribuir permissões a essas pastas base. Agora, preciso adicionar os usuários a alguns grupos de domínio e atualizar alguns atributos de diretório.

Para atualizar rapidamente sua memória, ESTOU usando uma "função principal" para coordenar todos os esses esforços, que eu expliquei na parte 1 desta série. A função de mestre tem esta aparência:

Function Provision {
  PROCESS {
    CreateUser $_
    CreateHomeFolder $_
    AddToGroups $_
    UpdateAttributes $_
  }
}

Na parte 2 da série, eu criei a função de CreateUser e na parte 3, abordei a função CreateHomeFolder. Este mês, irá lidar com as funções AddToGroups e UpdateAttributes.

Decidir na entrada

Todos os quatro Meus funções obtenha um hashtable que contém atributos de usuário. Meu exemplo original, na parte 1, ler os atributos de um arquivo Comma-Separated Values (CSV). No momento, não entre em muito profundidade sobre como eu planejada transmitir o domínio grupos um usuário deve ser adicionado ao. Há várias maneiras que potencialmente pode fazer isso. Por exemplo, eu poderia ter meu arquivo CSV incluem uma única coluna denominada grupos e preencher essa coluna com alguns lista delimitada de nomes, como este:

"Domain Users,Sales,Marketing,East"

Ou, eu poderia ter uma coluna separada no CSV para cada grupo e nos dados linhas colocar um 1 quando o usuário deve pertence a que grupo e um 0 para grupos não deseja que o usuário pertence a. Ele deve ser assim o CSV:

Domain Users,Sales,Marketing,East
1,1,0,0
1,0,1,1

Suspeito que a segunda abordagem pode ser mais fácil para uma pessoa de técnicas de menos (talvez alguém do departamento de recursos humanos) trabalhar com como ele se parece um pouco mais como uma lista de verificação. Isso também é algo que você pode facilmente criar em uma tabela do Microsoft Access ou uma planilha do Microsoft Excel e, em seguida, exportar para um arquivo CSV, manter esse formato. Portanto, para que este exemplo, vou para ir com o layout de segundo.

Como para os "atributos adicionais", continuarei assuma que os são provenientes de colunas específicas no arquivo CSV. Por exemplo, se quiser preencher o atributo postalCode, em seguida, vamos suponha que eu tenha incluído uma coluna apropriada no arquivo CSV, e que minha função de importação (que discutido na parte 1 desta série) está lendo nessa coluna para a hashtable juntamente com as outras colunas.

Isso significa que meu hashtable pode conter algo como $ userinfo ['domain users'], que deve ser 1 se eu quiser que o usuário pertencer a esse grupo. A hashtable também pode conter $ userinfo ['postalCode'] com o valor apropriado para cada novo usuário.

Ao preencher os grupos

Minha função AddToGroups precisa acomodar cada grupo possível que talvez estejam listado no meu arquivo de entrada. Basicamente apenas vou para verificar cada grupo para ver se esse usuário tem um 1 ou 0, e se o usuário tiver um 1, em seguida, irá adicionar o usuário ao grupo. Desde que o número 0 é normalmente sinônimo do valor Booleano False, enquanto algo não - zero (como 1) é sinônimos com True, que tornará as comparações muito fácil. Portanto, a função fica assim:

Function AddToGroup {
  Param($userinfo)
  If ($userinfo['Sales']) { Add-QADGroupMember 
    -identity 'DOMAIN\Sales' '
    -member ('DOMAIN\'+$userinfo
     ['samAccountName']) }
  If ($userinfo['East]) { Add-QADGroupMember 
    -identity 'DOMAIN\East' '
    -member ('DOMAIN\'+$userinfo
     ['samAccountName']) }
  If ($userinfo['Marketing]) { Add-
    QADGroupMember 
    -identity 'DOMAIN\Marketing' 
    -member ('DOMAIN\'+$userinfo
     ['samAccountName']) }
}

E assim por diante. Lembre-se de que ainda estamos usando os cmdlets de AD Quest, que são livres de www.Quest.com/PowerShell.

Tudo o que repetitivas código bugs me. Acho que gostaria fazer em vez disso, é criar uma matriz de nomes de grupo possível e, em seguida, enumerar essa matriz. Dessa forma, adicionando e removendo grupos no futuro não requerem-me para copiar e colar código — teria apenas modificar a matriz. Agora a função fica assim:

Function AddToGroup {
  Param($userinfo)
    $groups = 'Sales','Marketing','East'
  Foreach ($group in $groups) {
    If ($userinfo[$group]) { 
      Add-QADGroupMember
        -identity 'DOMAIN\'+$group
        -member ('DOMAIN\'+$userinfo
         ['samAccountName']) }
}
}

Isso é um pouco leaner e limpeza, e ele será facilmente acomodar futuras alterações.

Atributos adicionais

Finalmente, precisa lidar com os atributos adicionais deseja definir. Aqui vou usar a mesma abordagem: criar uma matriz de nomes de atributos permitidos e, em seguida, enumerar essa matriz. Nesse caso, vou para permitir uma situação onde um ou mais atributos estão em branco para um determinado usuário, assim:

Function UpdateAttributes {
  Param($userinfo)
    $attribs = 'postalCode','title',
      'physicalDeliveryOfficeName'
  Foreach ($attrib in $attribs) {
    If ($userinfo[$attrib] –ne '') {
      $update = @{$attrib=$userinfo
       ['attrib']}
    Set-QADUser
      -identity 'DOMAIN\'+$userinfo
       ['samAccountName'] 
      -objectAttributes $update
    }
  }
}

Porque o cmdlet Set-QADUser realmente aceita um hashtable para o parâmetro –objectAttributes, você pode pensar que pode apenas alimentação-lo a hashtable de userinfo $. No entanto, têm coisas no local, como nomes de grupo, que não são nomes de atributo do Active Directory para que esse truque não seria trabalhar. Além disso, não desejo enviar qualquer atributo vazio, para que eu quero a capacidade de — como que tenha feito com essa função — para executar por meio de todos os atributos primeiro e, em seguida, atualizar somente os atributos que realmente possuem valores no arquivo CSV original.

Fazer isso além

Obviamente, existem muitas das coisas que você pode fazer para expandir esse script. Aqui estão algumas idéias que vêm à mente:

  • Em vez de recuperar informações de um arquivo CSV, você pode obtê-lo de um banco de dados (como um banco de dados pessoal). Você somente precisará substituir a função de importação, conforme abordado na parte 1 desta série.
  • Você pode executar outras tarefas de configuração. Basta adicionar mais funções para a função mestre de criar. Lembre-se manter cada tarefa importante em sua própria função subordinada e você irá facilitar as coisas criar, depurar e manter.
  • Você poderia escrever out um arquivo de log da atividade de configuração. Por exemplo, você pode usar Out-File para acrescentar texto a um arquivo de log em cada uma das funções subordinadas.
  • Usando as técnicas abordadas desta série, você pode escrever um script reprovisioning para reatribuir os grupos, permissões e atributos do Active Directory quando um usuário move para uma posição diferente dentro da empresa.

O Windows PowerShell perguntas e respostas

P Os produtos da Microsoft podem ser gerenciados com os cmdlets do Windows PowerShell?

AAtualmente, a lista inclui Exchange Server 2007, o System Center Virtual Machine Manager, o System Center Operations Manager e o System Center Data Protection Manager. SQL Server 2008 também inclui alguns cmdlets do Windows PowerShell, embora eles amplamente estão direcionados para ativar a execução de instruções de Transact-SQL (Transact-SQL que está sendo a linguagem de script nativa no SQL Server).

Mas não há motivo para parar lá. Você também pode gerenciar o Active Directory usando um conjunto livre de cmdlets de www.Quest.com/PowerShell; cmdlets para os serviços de informações da Internet (IIS) 7.0 são em desenvolvimento; e há até mesmo cmdlets para produtos de terceiros, como VMWare, IBM WebSphere MQ e mais. Você também pode usar ferramentas de linha de comando existentes para gerenciar componentes do Windows, tais como IIS, DNS, DHCP, o Firewall do Windows e mais.

Algumas considerações final

Espero que você encontrará o script concluído e todas as suas funções subordinadas para ser, no mínimo, um ponto de partida útil na criação de seus próprios scripts de configuração. Por meio de conclusão, eu desejo oferecer alguns comentários sobre algumas das decisões que feitas em todo.

Eu optei por usar tabelas de hash para as informações do usuário em vez de objetos personalizados pois tabelas de hash fornecem uma maneira um pouco mais fácil para enumerar através de um conjunto de propriedades quando eu não sei antecedência quais essas propriedades serão. Em outras palavras, tabelas de hash são um pouco mais fáceis de usar quando eu sei que será preciso adicionar mais atributos, e quando eu não pode usar os mesmos atributos sempre executar o script.

Eu decidiu usar cacls.exe para modificar permissões de pasta porque, como descrevi na parte 3 desta série, é apenas mais fácil do que o shell *-ACL cmdlets. Além disso, usar o cacls.exe me permitiu demonstrar uma maneira que você pode parametrizar ferramentas de linha de comando externas usando variáveis de shell.

Eu optei por usar da Quest cmdlets do Active Directory em vez de ADSI porque os cmdlets que oferecem o que sinto é uma abordagem mais nativa para manipular o diretório no Windows PowerShell. ADSI pode ser difíceis de trabalhar com e ele força você use um estilo de programação mais procedimento sobre o estilo de centralizada de comando que fui capaz de usar esse exemplo.

Se você optar por tomar as decisões mesmas para seus scripts, ou não espero que você encontrará essas técnicas e abordagens diferentes útil para solucionar alguns dos seus desafios de automação administrativa. Eu também você está convidado para compartilhar sugestões e aprimoramentos comigo. No meu site, ConcentratedTech.com, você verá uma página de contato no qual você está bem-vindo ao Enviar-me um email. E por favor certifique informar-me se eu pode compartilhar seus comentários uma futura edição da TechNet Magazine.

Don Jones é co-fundador da Tecnologia concentrarem, onde blogs he semanais sobre aplicativos do Windows PowerShell, SQL Server,-V e outros tópicos. Entrar em contato com ele através de seu site.