Ir ao conteúdo
  • Cadastre-se

Script powershell - melhorar desempenho


Posts recomendados

Recentemente na empresa onde trabalho decidimos substituir os scripts que usamos para controlar os Laboratórios de informática, que atualmente são feitos em VBS, por scripts em Powershell.

Pelo que lemos a respeito, é uma ferramenta poderosa e nos pareceu bastante promissora para nos ajudar em nossas tarefas.

Uma dessas tarefas é desligar todos os computadores de uma determinada faixa de IP ao final do expediente através de um script que é executado pelo servidor.

 

Conseguimos criar o script que faça isso em Powershell, porém comparado ao script do VBS a velocidade de execução caiu muito. Aparentemente ele envia o comando para desligar 1 computador e aguarda uma confirmação (demorada) para depois executar o próximo comando. E para piorar, se algum dos computadores já estiver desligado, ele demora muito mais para avançar para o próximo comando.

 

Segue parte do script:

 

Function Desligar-Lab {
 
	IF ($Lab -eq 9 -or $Lab -eq 10 -or $Lab -eq 11 -or $Lab -eq 12 -or $Lab -eq 13 -or $Lab -eq 14 -or $Lab -eq 15 -or $Lab -eq 16) {
		$ban_Final = 2
		$maq_Final = 22
	}ELSE {
		$ban_Final = 4
		$maq_Final = 9
	}
	$c = Get-Credential "DOMAIN\administrador"

    IF ($Lab -eq 9 -or $Lab -eq 10 -or $Lab -eq 11 -or $Lab -eq 12 -or $Lab -eq 13 -or $Lab -eq 14 -or $Lab -eq 15 -or $Lab -eq 16) {
	    for ($ban=0; $ban–lt $ban_Final+1; $ban++) {   
		    for ($maq = 11 ; $maq -lt $maq_Final+1; $maq++) {
			    IF ("$ban"+"$maq" –ne 222){
			        IF ($ban –eq 0){
                        IF ($maq –ne 11){
						    Stop-Computer 10.117.$Lab.$maq -credential $c -force
                        }
				    }ELSE {
					    Stop-Computer 10.117.$Lab.$ban$maq -credential $c -force
                    }
					Write-Progress -Activity "Desligando computador: " -status "$ban$maq"
			    }
		    }
	    }
    }ELSE {
        for ($ban=1; $ban –lt $ban_Final+1; $ban++){
            for ($maq = 1 ; $maq -lt $maq_Final+1; $maq++) {
                IF ("$ban"+"$maq" –ne 49){
                    IF ("$ban"+"$maq" –ne 11){
						Stop-Computer 10.117.$Lab.$ban$maq -credential $c -force
						Write-Progress -Activity "Desligando computador: " -status "$ban$maq"
                    }
                }
            }
        }
    }
}

De acordo com algumas coisas que eu li, achei que resolveria esse problema enviando os comandos de forma paralela (-parallel), porém só é possível executar diversos comandos de forma paralela se a execução for dentro de um Workflow, e o Workflow não reconhece credenciais (-credential), e a credencial é parâmetro necessário para execução do cmdlet de desligar computadores remotamente.

Da para forçar digitar os dados da credencial a cada execução de comando, mas imagina ter que digitar a senha de administrador da rede mais de 300 vezes perto do fim do expediente. Nada prático.

 

Se alguém ja passou por isso ou tiver ideia de como resolver, eu agradeço imensamente.

Link para o comentário
Compartilhar em outros sites

2 minutos atrás, TulioBotinha disse:

Ao invés de executar tudo no mesmo script, deixe a logica em um e o comando e outro, no script com os comandos, recebe a informações como parâmetros e inicie o mesmo através do comando start, assim você terá um terminal para cada iteração.

 

Acho que eu entendi o que você quis dizer. Assim que possível vou fazer os testes. Por hora, muito obrigado.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!