O Windows PowerShellAutomatizando o usuário de configuração, parte 1

Don Jones

Conteúdo

Definir metas
Criando a estrutura inicial
Obtenção de entrada
Expansão
Em Avançar para cima

Com esta coluna, eu estou kicking desativar uma série de quatro partes sobre criar um script prático, mundo real, configuração de usuário no Windows PowerShell.Nesta primeira parte, falarei sobre como criar a estrutura para o script.Próximo mês, examinarei, na verdade, criar um usuário novo, a caixa de correio habilitada no Active Directory e o Exchange Server 2007.No mês seguinte, vai se encarregar de criar diretórios base e aplicar o serviço do adequado Access Control Lists (ACLs) de mensagens a eles.E na parte final, irá colocar o novo usuário em grupos e cuidar de ao preencher os atributos adicionais do Active Directory.

Vídeo

Don Jones é acionada desativar uma série de quatro partes examinar como você pode usar o Windows PowerShell para criar um script de configuração do usuário.Assista Don demonstrar essas técnicas neste vídeo.

Definir metas

Parte do provisionamento de usuário trickiest é decidir de onde virão os dados iniciais.Como VOU saber que os usuários criem?E onde será obtenha suas informações, como nomes, endereços de email, endereço para correspondência, departamento e outros detalhes?

Quase todos os ambientes terá uma resposta diferente e, portanto, criarei um script que é capaz de aceitar a entrada de uma variedade de locais.Que fará com que o script um pouco mais complicado, mas poderá ser vale a pena o esforço a longo prazo porque o script não serão mais flexível.Também queremos criar um script capaz de criar uma centena novos usuários tão facilmente quanto um — trata sobre automação, afinal de contas!

Criando a estrutura inicial

Fazer uma quantidade decente de consultoria várias empresas, e muita o foco está no script e automação.Não é surpresa, consulte muita de scripts, e tenha observado que uma abordagem comum é para um administrador criar apenas um único script de configuração.

Com o passar do tempo, o administrador irá modificar o script para realizar tarefas mais e mais.Que não é uma abordagem incorreta, mas ao demorando com antecedência para criar um pouco mais estrutura modularizada, você pode criar um script que realmente mais flexível e fácil de manter.E isso não requer muito trabalho extra.

Vou começar com uma função central denominada criar.Na verdade, não vai fazer muito; ele será aceitam um hashtable (ou matriz associativa) que contém as novas informações do usuário e, em seguida, ele chamará uma série de sub-functions que, na verdade, manipular todas as tarefas de configuração.Como esse é o Windows PowerShell, eu quero tudo isso para trabalhar no pipeline.Portanto, vou para que ele aceite um hashtable para cada novo usuário, e irá habilitá-lo aceitar um pipeline inteiro de tabelas de hash para criar vários usuários.

O modelo de função básica tem esta aparência:

Function Provision {
  PROCESS {
  }
}

Não muito impressionante, é ela? Com o Windows PowerShell, ele não precisa ser. Que bloco de scripts PROCESS será executada uma vez para cada objeto que eu pipe para a função. E dentro do bloco de script PROCESS, usará a variável $ _ para acessar o objeto de pipeline atual.

O Windows PowerShell perguntas e respostas

P eu pesquisados a classe de instrumentação de gerenciamento do Windows de Win32_OperatingSystem (WMI) no site do MSDN. Ele diz que a classe contém informações sobre o service pack versão. Quando executo Get-WmiObject Win32_OperatingSystem no Windows PowerShell, nenhuma informação de pacote de serviço é mostrada. Por quê?

A O Windows PowerShell formatação subsistema seleciona um subconjunto do padrão de propriedades dessa classe para exibição. Uma maneira para forçá-lo para mostrar todas as propriedades é usar um cmdlet de formatação para substituir os padrões:

Get-WmiObject Win32_OperatingSystem | Format-List *

Ou, se você quer apenas adicionar propriedades específicas:

Get-WmiObject Win32_OperatingSystem | 
Format-List BuildNumber,CSName,ServicePackMajorVersion

Obtenção de entrada

O motivo que não têm a função de criar, na verdade, obter os dados em seu próprio é que eu quero mais flexibilidade, e eu não quero voltar e alterar a função sempre desejar adotar um novo formulário de entrada. Em vez disso, criarei duas funções que obter minhas informações de novo usuário — uma de um arquivo CSV e a outra de um banco de dados. Por enquanto, eu apenas trabalhará na função relacionados CSV, pois os arquivos CSV são fáceis de criar com o Bloco de notas ou outro editor de texto (ou até mesmo o Microsoft Excel e a maioria dos aplicativos de banco de dados).

Um truque sobre CSVs — especialmente se fornecido por alguém menos tecnicamente inclined — é que você não pode contar com cabeçalhos de coluna do arquivo sendo os atributos apropriados do Active Directory. Isto é, em vez de coluna nomes como sn e samAccountName, você provavelmente mais obter nomes de coluna, como sobrenome e nome de logon. Tudo bem — Windows PowerShell pode fazer a conversão. Começarei supondo que um arquivo CSV contém as seguintes colunas:

  • Nome
  • Sobrenome
  • Cidade
  • Departamento
  • Cargo
  • Nome de logon
  • Senha

Você pode, obviamente, expandir lista —, mostrarei como ele funciona em alguns instantes. Usando essa lista, um arquivo CSV de exemplo poderia ser algo assim:

First Name,Last Name,City,Department,Job  Title,Logon Name,Password
Don,Jones,Las Vegas,IT,Writer,donj,P@ssw0rd
Greg,Shields,Denver,IT,Administrator,gregs,  P@ssw0rd

Criará uma função chamada ProvisionInputCSV, que ele aceite um nome de arquivo como um parâmetro de entrada e que ele simplesmente ler o arquivo CSV:

Function ProvisionInputCSV {
  Param ([string]$filename)
  Import-CSV $filename
}

É possível executar essa função por si só, como por isso, apenas para certificar-se ele é ler o arquivo CSV:

ProvisionInputCSV c:\files\myinput.csv

Agora deseja que a função converter cada linha do CSV em um hashtable. E, em vez de manter os nomes de cabeçalho de coluna do arquivo CSV, desejo converter esses cabeçalhos de coluna em nomes de atributos mais Active Directory-aceitável. Há várias maneiras de fazer isso no Windows PowerShell, mas vou para continuar com uma abordagem que é relativamente simples: uso um loop foreach para processar cada linha do arquivo CSV, um por vez. Para cada linha do arquivo, VOU criar um hashtable e gravá-los fora para o pipeline.

Dê uma olhada na minha função, mostrada na Figura 1 . Há alguns pontos a pena observar:

  • Dentro do bloco de foreach, a variável de usuário $ contém um único usuário. A construção foreach é executado por cada linha na variável $ usuários e preenche automaticamente o usuário de $ com o próximo.
  • Como alguns dos nomes de cabeçalho de coluna contiverem espaços, é necessário que eu coloque esses nomes entre aspas.
  • Adicionei outro atributo, displayName, que é construída de duas colunas CSV: nome e sobrenome.
  • Saída de gravação é usada para gravar cada hashtable para o pipeline.

Figura 1 função usando um loop foreach

Function ProvisionInputCSV {
  Param ([string]$filename)
  $users = Import-CSV $filename
  foreach ($user in $users) {
    $ht = @{'givenName'=$user."First Name";
            'sn'= $user."Last Name";
            'title'= $user."Job Title";
            'department'= $user.Department;
            'displayName'= $user."First Name" + " " + $user."Last Name";
            'city'= $user.City;
            'password'= $user.Password;
            'samAccountName'= $user."Logon Name"
           }
    Write-Output $ht
  }
}                                                  
 

O upshot prático de todos os isso é que eu pode usar uma função para ler o arquivo CSV e transformar seus dados em tabelas de hash. Enviada pelas tabelas de hash podem então ser pipe para minha função de provisionamento:

ProvisionInputCSV c:\data\myinput.csv | Provision

Desde que minha função criar aceita um hashtable padronizada, É possível criar várias funções de geração de entrada diferentes — ProvisionInputDatabase, Pro­visionInputSpreadsheet, e assim por diante.

Desde que as funções de saída meu hashtable padronizada cheio de dados do usuário, a principal função criar funcionará corretamente. Essa abordagem significa que no futuro, pode usar totalmente novas fontes de entrada para novos dados de usuário — sem ter que modificar a principal função de criar.

Expansão

Você pode facilmente adicionar mais colunas à sua versão do arquivo CSV para preencher a coisas como números de telefone ou que outros dados você deseja. Você só precisa fazer-se de que também é expandir a hashtable para conter essas informações. Por exemplo, digamos que desejo adicionar a descrição e o Office para o arquivo CSV. Eu simplesmente seria expandir a hashtable, adicionar algumas linhas, como mostrado na Figura 2 . Em outras palavras, você pode usar a estrutura básica que forneci para acomodar quaisquer requisitos de seu ambiente tem para os atributos de diretório de novas contas de usuário.

A Figura 2 revisado função

Function ProvisionInputCSV {
  Param ([string]$filename)
  $users = Import-CSV $filename
  foreach ($user in $users) {
    $ht = @{'givenName'=$user."First Name";
            'sn'= $user."Last Name";
            'title'= $user."Job Title";
            'department'= $user.Department;
            'displayName'= $user."First Name" + " " + $user."Last Name";
            'city'= $user.City;
            'password'= $user.Password;
            'samAccountName'= $user."Logon Name";
            'office' = $user.office;
            'description' = $user.description
           }
    Write-Output $ht
  }
}

Em Avançar para cima

Próximo mês, começarei preenchendo a principal função criar criando um sub-function que cria novas contas de usuário. Irá lhe duas versões dessa sub-função — uma para pessoas que têm o Exchange Server 2007 (que é o Windows PowerShell habilitado) e outro para pessoas que não. Nesse ponto, você realmente terá um script muito útil: ele apenas criará contas de usuário. Mas como que é uma das partes mais demoradas de lidar com novos usuários, essa função pode ajudar você inicie economizando tempo imediatamente.

Don Jones é co-fundador da Tecnologia concentraremonde 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.