É possível criar um arquivo de configuração generalizada para instalar os recursos do Windows usando o PowerShell?

8

Atualmente, estou tentando automatizar a construção de uma VM executando o Windows Server 2012 R2. No momento, o desafio é automatizar a adição de funções e recursos. No assistente de funções e recursos, há uma opção para exportar um arquivo de configuração XML que pode ser executado no PowerShell.

No entanto, depois de examinar o arquivo XML, vejo que ele é específico do servidor em que está sendo executado - ele contém campos como "ComputerName".

E se eu quiser executar um script que instale funções e recursos em muitas VMs? Eu preciso de um arquivo de configuração que seja generalizado, não personalizado para um computador específico.

Alguém tem alguma opinião sobre esse problema?

Cameron McAuley
fonte

Respostas:

12

Sim, para Linux e Windows, você pode criar os arquivos de configuração de estado desejados que podem:

  • Ativar ou desativar funções e recursos do servidor
  • Gerenciar configurações do registro
  • Gerenciar arquivos e diretórios
  • Iniciar, parar e gerenciar processos e serviços
  • Gerenciar grupos e contas de usuário
  • Implantar novo software
  • Gerenciar variáveis ​​de ambiente
  • Executar scripts do Windows PowerShell
  • Corrija uma configuração que se afastou do estado desejado
  • Descubra o estado atual da configuração em um determinado nó

Aqui está um exemplo de arquivo de configuração que habilitará o IIS, verifique se os arquivos do site estão na pasta correta e, se alguma dessas coisas não estiver instalada ou ausente, para instalar ou copiá-los conforme apropriado (observe que presume-se que $ websitefilepath seja predefinida como a origem dos arquivos do site):

    Configuration MyWebConfig
    {
       # A Configuration block can have zero or more Node blocks
       Node "Myservername"
       {
          # Next, specify one or more resource blocks

          # WindowsFeature is one of the built-in resources you can use in a Node block
          # This example ensures the Web Server (IIS) role is installed
          WindowsFeature MyRoleExample
          {
              Ensure = "Present" # To uninstall the role, set Ensure to "Absent"
              Name = "Web-Server"
          }

          # File is a built-in resource you can use to manage files and directories
          # This example ensures files from the source directory are present in the destination directory
          File MyFileExample
          {
             Ensure = "Present"  # You can also set Ensure to "Absent"
             Type = "Directory“ # Default is “File”
             Recurse = $true
             # This is a path that has web files
             SourcePath = $WebsiteFilePath
             # The path where we want to ensure the web files are present
             DestinationPath = "C:\inetpub\wwwroot"
   # This ensures that MyRoleExample completes successfully before this block runs
            DependsOn = "[WindowsFeature]MyRoleExample"
          }
       }
    }

Para obter mais detalhes, consulte Visão geral da configuração de estado desejado do Windows PowerShell e Introdução à Configuração de estado desejado do Windows PowerShell .

Então, por que você usaria isso em vez de simplesmente o cmdlet install-windowsfeature? O poder real do uso do DSC em vez de um script é que eu posso definir um local onde posso armazenar configurações a serem enviadas ou recebidas (em relação à máquina de destino), consulte Modos de configuração de envio e recepção . A configuração não se importa se a máquina é física ou virtual, mas acredito que são necessários pelo menos 2012 para que o servidor inicialize e puxe o DSC.

Jim B
fonte
6

Você pode fazer tudo isso no PowerShell

Get-WindowsFeature | ? { $_.Installed } | Export-Clixml .\installed.xml

Copie o xml para onde é necessário ir, em algum lugar no qual o novo servidor possa acessá-lo.

Import-Clixml <path to xml>\installed.xml | Install-WindowsFeature
Drifter104
fonte
0
Import-Module servermanager
Install-WindowsFeature Feature,
    Feature, 
    Feature, 
    etc

O acima irá instalar uma lista de recursos. Você pode codificá-los ou simplesmente salvá-los em um arquivo, um por linha, e usá-lo para instalá-los:

Import-Module servermanager
$features = get-content C:\Features.txt
Install-WindowsFeature $features
Deadly-Bagel
fonte
Para o servidor 2012r2, é Install-WindowsFeature
Drifter104 4/15/15
Ah Usamos principalmente 2008, então eu não estava ciente. Obrigado por apontar isso.
Deadly-Bagel
Ao usar a GUI para instalar funções, é necessário fazer algumas configurações usando as listas suspensas - como elas são configuradas quando definidas através do PowerShell usando seu método? Eles estão todos definidos para os padrões?
Cameron McAuley
Hmm. Nesse caso, parece que você precisa usar o -configurationfilepathparâmetro e apontar para um arquivo de configuração exportado que você mencionou no seu OP. Um pouco estranho, ele contém informações específicas do PC, como você disse, mas todas as evidências apontam que ele será instalado no computador local por padrão e apontá-lo para um desses arquivos configurará tudo conforme necessário, portanto provavelmente não será usado. Pode ser apenas uma referência para qual computador você obteve a configuração ou algo assim.
Deadly-Bagel
Mas sim, ele usará as opções padrão sem o arquivo.
Deadly-Bagel