none
PowerShell - Reset senha de Adm Local remotamente RRS feed

  • Pergunta

  • Bom dia a todos.

    O script abaixo redefine a senha do usuário administrador local remotamente.

    While ($true) {
    
    	$isNote = Read-Host "É notebook (s/n)?"
    	Write-Host 'Informe somente o número:'
    	$ComputerName = Read-Host
    
    	Switch ($isNote) {
    
    		"s" { $ComputerName = "xxx" + $ComputerName;break}
    		"n" { $ComputerName = "xxx1" + $ComputerName;break}
    	default { $isNote = "n"}
    
    	}
    	
    	Try	{
    		Invoke-Command -ComputerName $ComputerName -ScriptBlock {
    			$Senha = "P@ssw0rd"
    			net user administrador $Senha
    		}
    		Write-Host "A senha foi alterada. Pressione uma tecla para continuar..."
    		$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
    	}
    	catch [PSRemotingTransportException] { 
    		Write-Host "Não foi possível alterar a senha. Pressione uma tecla para continuar..."
    		$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
    	}
    	
    	cls
    }

    às vezes, ocorre uma falha ao conectar ao servidor remoto: PSRemotingTransportException

    Gostaria de tratar esse erro para que não seja exibido no terminal de execução do script. Tentei com Try / Catch, mas não deu.

    Isso é possível?


    • Editado J. Maurício quinta-feira, 7 de julho de 2016 17:17
    quarta-feira, 6 de julho de 2016 15:32

Respostas

  • Primeiro você precisa saber que tipo de exceção deve ser tratada para então usar o Try Catch. O que você está tentando tratar provavelmente não é a exceção que precisa ser verificada pelo Catch. Outro detalhe: use -ErrorAction Stop ao final do command let em Try.

    Após receber o erro, use o comando $Error[0] | FL * -Force para verificar o que está sendo retornado em Exception, pois é esta informação que você precisa informar neste caso entre [] no Catch.

    Você também pode retirar a exceção, criar uma mensagem genérica e qualquer erro cairá no Catch.



    • Editado 4HorsemenOfDaIT quarta-feira, 6 de julho de 2016 18:35
    • Marcado como Resposta J. Maurício quinta-feira, 7 de julho de 2016 17:20
    quarta-feira, 6 de julho de 2016 18:31
  • Deu certo! Obrigado. Segue código final caso alguém tenha interesse:

    While ($true) {
    	
    	Do {
    		cls
    		$isNote = Read-Host "É notebook (s/n)?"
    		$isNote = $isNote.ToLower()
    		Switch ($isNote) {
    			"s" { $ComputerName = "NOTE";Break}
    			"n" { $ComputerName = "PC";Break}
    		}
    	} Until (($isNote -eq "s") -or ($isNote -eq "n"))
    
    	Write-Host 'Informe somente o número do bem:'
    	$ComputerNumber = Read-Host
    	$ComputerName = $ComputerName + $ComputerNumber
    	
    Try {
    		Invoke-Command -ComputerName $ComputerName -ErrorAction Stop -ScriptBlock {
    			$Senha = "P@ssw0rd"
    			net user administrador $Senha
    		}
    		cls
    		Write-Warning "Senha alterada com sucesso!"
    		Write-Host "Pressione uma tecla para continuar..."
    		$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
    	}
    	Catch {
    		cls
    		Write-Warning "Não foi possível alterar a senha." -Verbose
    		Write-Host "Pressione uma tecla para continuar..."
    		$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
    	}
    		
    	cls
    }

    • Marcado como Resposta J. Maurício quinta-feira, 7 de julho de 2016 17:20
    quinta-feira, 7 de julho de 2016 17:19

Todas as Respostas

  • Acho que deu certo assim:

    While ($true) {
    	$Error.Clear()
    	$ErrorActionPreference = “SilentlyContinue”
    	$isNote = Read-Host "É notebook (s/n)?"
    	Write-Host 'Informe somente o número do bem:'
    	$ComputerName = Read-Host
    
    	Switch ($isNote) {
    		"s" { $ComputerName = "NOTEBOOK" + $ComputerName;break}
    		"n" { $ComputerName = "DESKTOP" + $ComputerName;break}
    	default { $isNote = "n"}
    
    	}
    	
    	Invoke-Command -ComputerName $ComputerName -ScriptBlock{
    		$Senha = "P@ssw0rd"
    		net user administrador $Senha
    	}
    		
    	
    	If (!$Error) {
    		Write-Host "A senha foi alterada. Pressione uma tecla para continuar..."
    		$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
    	}
    	else {
    		Write-Host "Não foi possível alterar a senha. Pressione uma tecla para continuar..."
    		#Write-Host $Error
    		$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
    	}	
    	
    	cls
    }

    quarta-feira, 6 de julho de 2016 18:06
  • Primeiro você precisa saber que tipo de exceção deve ser tratada para então usar o Try Catch. O que você está tentando tratar provavelmente não é a exceção que precisa ser verificada pelo Catch. Outro detalhe: use -ErrorAction Stop ao final do command let em Try.

    Após receber o erro, use o comando $Error[0] | FL * -Force para verificar o que está sendo retornado em Exception, pois é esta informação que você precisa informar neste caso entre [] no Catch.

    Você também pode retirar a exceção, criar uma mensagem genérica e qualquer erro cairá no Catch.



    • Editado 4HorsemenOfDaIT quarta-feira, 6 de julho de 2016 18:35
    • Marcado como Resposta J. Maurício quinta-feira, 7 de julho de 2016 17:20
    quarta-feira, 6 de julho de 2016 18:31
  • Vou testar. Obrigado.
    quinta-feira, 7 de julho de 2016 10:33
  • Deu certo! Obrigado. Segue código final caso alguém tenha interesse:

    While ($true) {
    	
    	Do {
    		cls
    		$isNote = Read-Host "É notebook (s/n)?"
    		$isNote = $isNote.ToLower()
    		Switch ($isNote) {
    			"s" { $ComputerName = "NOTE";Break}
    			"n" { $ComputerName = "PC";Break}
    		}
    	} Until (($isNote -eq "s") -or ($isNote -eq "n"))
    
    	Write-Host 'Informe somente o número do bem:'
    	$ComputerNumber = Read-Host
    	$ComputerName = $ComputerName + $ComputerNumber
    	
    Try {
    		Invoke-Command -ComputerName $ComputerName -ErrorAction Stop -ScriptBlock {
    			$Senha = "P@ssw0rd"
    			net user administrador $Senha
    		}
    		cls
    		Write-Warning "Senha alterada com sucesso!"
    		Write-Host "Pressione uma tecla para continuar..."
    		$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
    	}
    	Catch {
    		cls
    		Write-Warning "Não foi possível alterar a senha." -Verbose
    		Write-Host "Pressione uma tecla para continuar..."
    		$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
    	}
    		
    	cls
    }

    • Marcado como Resposta J. Maurício quinta-feira, 7 de julho de 2016 17:20
    quinta-feira, 7 de julho de 2016 17:19