Gerenciamento de local remoto copie e instale grandes atualizações de software para 50 LAN

1

Inicialmente postado no Stack Overflow e direcionado aqui. Eu sou novo em programação e estou tentando escrever um script PowerShell para gerenciar atualizações de software. Eu estou em um ambiente de domínio do Windows com mais de 50 escritórios remotos. Cada escritório tem 4 computadores. Um computador, "Computador A", tem uma caixa de depósito instalada que usamos para backups e agora atualizações de software. Quero executar um script da minha máquina local que copie uma pasta (~ 1 GB) para os outros computadores nessa LAN e execute o arquivo setup.exe no diretório para atualizar o software nesses computadores.

Tanto quanto eu posso dizer, a fim de usar o cmdlet Enter-pssession & executar um item de cópia e iniciar o processo, eu tenho que:

  1. Na máquina remota, ative o winrm: enable-psremoting -force
  2. Na máquina remota, ative a autenticação CredSSP: enable-smancredssp -role server -force
  3. Na máquina local, ative a autenticação CredSSP: enable-SmanCredSSP -role cliente -force

A partir daqui, posso entrar na sessão do Power shell e começar a cópia e instalar. Aqui está o código que estou executando:

#Allow my computer to send credentials to remote computers
Enable-WSManCredSSP -Role Client -DelegateComputer * -Force
$credential = Get-Credential -Credential domain\user 
#Getting Content 
$path = "C:\computernames.csv"
Import-Csv -path $path | 
foreach-object {
    $computername = $_.Name
    if (Test-Connection -cn $_.Name -quiet) {
        #copy the batch file that allows remote powershell access
        $source = "c:\"
        $destination = "\$computername\c$\install files\remoteaccess"
        robocopy $source $destination
        #open file to allow remote PS access
        & psexec \$computername -a runas -u domain\user -p password -c -f -h "\$computername\c$\install files\remoteaccess\remoteaccess.bat"
    #Initiates Power Shell session with remote computer
    Enter-PSSession -cn $_.Name -Credential $credential -Authentication Credssp
    #begin copy
        #be sure to refine destination 
    copy-item -path $_.Source -Destination $_.Destination -force -verbose -recurse | out-file c:\copylog.txt
    #begin silent install
        #code here
    #stop wsmancredssp accep
    disable-wsmancredssp -role server
    #close pssession
    exit-pssession 
    } else {
        "$computername is not online"
    }
}
Disable-wsmancredssp -role client

O computernames.csv tem os cabeçalhos: Name, Source, Destination com diretórios UNC para cada computador da LAN com dropbox e onde copiar o arquivo.
O arquivo "remoteaccess.bat" contém as duas linhas de código a seguir:

powershell.exe enable-psremoting -force >>c:\remotelog.txt
powershell.exe Enable-WSManCredSSP -role Server -force >>c:\remotelog.txt

A janela do powershell congela depois de iniciar a sessão psexec com o computador remoto e envia o primeiro comando powershell para habilitar o remoting. Nenhum erro é gerado ou a entrada é solicitada. A saída deste comando é salva no arquivo de texto remotelog:  "O WinRM foi atualizado para receber solicitações. Serviço WinRM iniciado.

O WinRM já está configurado para gerenciamento remoto nesta máquina. "

Parece que o comando powershell para ativar o wsmancredssp nunca é recebido. Quando executo o arquivo em lote no computador remoto a partir do software de acesso remoto, ambos os comandos são executados e registrados com êxito. Onde o meu comando psexec está dando errado ou como posso configurar esses computadores para permitir sessões remotas com um comando remoto sem usar o GPO?

    
por Seanicans 10.03.2015 / 15:31

1 resposta

0

O código está desativado de várias maneiras:

  1. Se você estiver em um ambiente de Domínio do Windows, por que não ativar a comunicação remota do Powershell por meio do GPO?
  2. Enter-PSSession é um comando para sessões remotas interativas, o que você está procurando é New-PSSession e Invoke-Command com o parâmetro de sessão
  3. O CredSSP só é necessário se você quiser acessar sistemas remotos de o sistema remoto ao qual você está conectado
  4. Por que você copia 1 GB de dados para as filiais? A conexão com o escritório principal é muito instável?
  5. o comando robocopy está copiando todo o conteúdo de C: \ para um remoto destino, que definitivamente não é o que você deseja (pagefile.sys,     bootmgr, etc).
por 22.03.2015 / 15:09