A Microsoft está fazendo todo o possível para tornar o PowerShell a escolha de usuários avançados e escritores de automação em todos os lugares. Longe vão os dias de compilar código no .NET para fazer a mesma coisa, agora você só precisa do notepad.exe e do google. Somos grandes fãs disso no escritório, especialmente porque o Console de Gerenciamento do Exchange 2007 NÃO inclui tudo o que você pode fazer no PowerShell. A Microsoft deliberadamente falhou em implementar coisas que só são feitas de vez em quando, mais fáceis de serem desenvolvidas, o que certamente força seu uso se você tiver algo parecido com um ambiente complexo.
O gerenciamento da nova geração de produtos da Microsoft (Win7, Windows Server 2008, Exchange 2007/2010 e SQL Server 2008) possui ganchos do PowerShell muito ricos. Depois que o Remote Powershell (PowerShell 2.0 IIRC) for implantado no Server 2008 R2, ele se tornará ainda MAIS útil para os criadores de automação.
O que fizemos com isso:
- Crie uma página da web para delegar determinadas tarefas administrativas aos usuários do suporte técnico. A página da Web dispara comandos executados no PowerShell. Coisas que faz:
- Crie e exclua contas de usuário, incluindo o provisionamento de caixas de correio e diretórios pessoais do Exchange 2007
- Desbloqueia contas bloqueadas
- Criar / excluir grupos
- Adicionar / remover usuários de grupos
- Mover usuários entre lojas de e-mail
- Definir senhas
- Extraia extratos do sistema ERP e envie os dados do global-address-book para o Active Directory todas as noites.
- Resolva o problema do LegacyExchangeDN que surgiu com a migração do Exchange 2003 para o Exchange 2007. Tive que adicionar um endereço X500 a todos os que costumavam estar no Exchange 2003. Um script do PowerShell razoavelmente curto o corrigiu.
- Criação de "caixas de correio de grupo" com script (caixas de correio compartilhadas no Exchange em que vários usuários têm acesso à caixa de correio), um processo que seria de outra forma manual devido à natureza dos dados necessários antes de iniciá-los. Ele padronizou bastante a configuração dessas caixas de correio.
- Criado um script que percorreu todas as máquinas de domínio redefinindo uma chave de registro específica e reiniciando um serviço. Demorou 18 horas para ser concluído, mas deu conta do recado.
Então, sim, o PowerShell estará conosco por um bom tempo.
EDIT : Adicionando um exemplo de código, uma vez que foi solicitado
$list=import-csv("groupusers.csv") $lastseengroup=$list[0].group $ADGroupPrefix="grp.netware." $ADGroupSuffix="{redacted -- in the format of ,ou=groups,dc=domain,dc=domain,dc=domain}" Clear-Variable memberlist Clear-Variable unknownusers foreach ($entry in $list) { if ($($entry.group) -ne $lastseengroup) { echo "stumbled across new group $($entry.group), committing changes to $lastseengroup" $newgroup=$ADgroupPrefix+$lastseengroup $newgroupdn='"'+"cn=$newgroup$ADGroupSuffix"+'"' echo "getting DN for $newgroup" $existinggroup=dsquery group domainroot -name $newgroup if (($existinggroup -ne $null)) { dsmod group $newgroupdn -chmbr $memberlist } else { dsadd group $newgroupdn -scope u -secgrp yes -members $memberlist -desc "Group imported from eDirectory" } Clear-Variable memberlist } $User=get-user $($entry.member) -ErrorAction SilentlyContinue if ($User.isvalid) { $UserDN=$User.distinguishedname $memberlist=$memberlist+'"'+"$UserDN"+'" ' } else { $unknownusers=$unknownusers+$($entry.member) } $lastseengroup=$($entry.group) } dsadd group "cn=$ADGroupPrefix$lastseengroup$ADGroupSuffix" -scope u -secgrp yes -members $memberlist
Isso leva um arquivo CSV criado com um script perl e atualiza um conjunto de grupos. Se o grupo já existir, ele substituirá a associação pelo especificado no arquivo. Se o grupo não existir, ele o criará. Esta é uma sincronização unidirecional. Além disso, não bastante em produção ainda, mas perto.