Me gustaría reiniciar una computadora remota que pertenece a un dominio. Tengo una cuenta de administrador pero no sé cómo usarla desde powershell.
Sé que hay un Restart-Computer
cmdlet y que puedo pasar la credencial, pero si mi dominio es, por ejemplo mydomain
, mi nombre de usuario myuser
y mi contraseña es mypassword
la sintaxis correcta para usarlo.
Necesito programar el reinicio para no tener que escribir la contraseña.
powershell
powershell-remoting
todos los ojos en mí
fuente
fuente
Respuestas:
El problema
Get-Credential
es que siempre solicitará una contraseña. Sin embargo, hay una forma de evitar esto, pero implica almacenar la contraseña como una cadena segura en el sistema de archivos.El siguiente artículo explica cómo funciona esto:
En resumen, crea un archivo para almacenar su contraseña (como una cadena encriptada). La siguiente línea solicitará una contraseña y luego la almacenará
c:\mysecurestring.txt
como una cadena encriptada. Sólo necesitas hacer esto una vez:Siempre que vea un
-Credential
argumento en un comando de PowerShell, significa que puede pasar unPSCredential
. Entonces en tu caso:Es posible que necesite un
-Authentication
valor de cambio diferente porque no conozco su entorno.fuente
ConvertTo-SecureString "password" -AsPlainText -Force
.$password = ConvertTo-SecureString "password" -AsPlainText -Force
Hay otra forma, pero ...
NO HAGA ESTO SI NO DESEA SU CONTRASEÑA EN EL ARCHIVO DE ESCRITURAS (No es una buena idea almacenar contraseñas en scripts, pero a algunos de nosotros nos gusta saber cómo hacerlo).
Ok, esa fue la advertencia, aquí está el código:
$cred
tendrá las credenciales de John Doe con la contraseña "ABCDEF".Medios alternativos para obtener la contraseña lista para usar:
fuente
Con respecto al almacenamiento de credenciales, utilizo dos funciones (que normalmente están en un módulo que se carga desde mi perfil):
Y éste:
Lo usas así:
Si el archivo de credenciales no existe, se le solicitará la primera vez, en ese momento almacenará las credenciales en una cadena encriptada dentro de un archivo XML. La segunda vez que ejecuta esa línea, el archivo xmlfile está allí y se abrirá automáticamente.
fuente
Tengo que ejecutar las funciones de SCOM 2012 desde un servidor remoto que requiere una credencial diferente. Evito las contraseñas de texto claro al pasar la salida de una función de descifrado de contraseña como entrada a ConvertTo-SecureString. Para mayor claridad, esto no se muestra aquí.
Me gusta escribir fuertemente mis declaraciones. La declaración de tipo para $ strPass funciona correctamente.
fuente
Aquí hay dos formas de hacerlo, si está programando el reinicio.
Primero, puede crear una tarea en una máquina utilizando credenciales que tengan los derechos necesarios para conectarse y reiniciar otra máquina. Esto hace que el planificador sea responsable de almacenar de forma segura las credenciales. El comando de reinicio (soy un chico de Powershell, pero esto es más limpio) es:
SHUTDOWN /r /f /m \\ComputerName
La línea de comando para crear una tarea programada en la máquina local, para reiniciar remotamente otra, sería:
SCHTASKS /Create /TN "Reboot Server" /TR "shutdown.exe /r /f /m \\ComputerName" /SC ONCE /ST 00:00 /SD "12/24/2012" /RU "domain\username" /RP "password"
Prefiero la segunda forma, donde usa sus credenciales actuales para crear una tarea programada que se ejecuta con la cuenta del sistema en una máquina remota.
SCHTASKS /Create /TN "Reboot Server" /TR "shutdown.exe /r /f" /SC ONCE /ST 00:00 /SD "12/24/2012" /RU SYSTEM /S ComputerName
Esto también funciona a través de la GUI, solo ingrese SYSTEM como nombre de usuario, dejando en blanco los campos de contraseña.
fuente
Tenga mucho cuidado al almacenar contraseñas de esta manera ... no es tan seguro como ...
fuente
Vi un ejemplo que usa Import / Export-CLIXML.
Estos son mis comandos favoritos para el problema que intenta resolver. Y la forma más sencilla de usarlos es.
Entonces, si el archivo no existe localmente, solicitará las credenciales y las almacenará. Esto tomará un
[pscredential]
objeto sin problemas y ocultará las credenciales como una cadena segura.Finalmente, solo use la credencial como lo hace normalmente.
Nota sobre seguridad :
Almacenar credenciales de forma segura en el disco
Editar: solo vuelva a leer la pregunta original. Lo anterior funcionará siempre que haya inicializado
[pscredential]
en el disco duro. Es decir, si coloca eso en su secuencia de comandos y ejecuta la secuencia de comandos una vez que creará ese archivo y luego ejecutar la secuencia de comandos desatendida será simple.fuente
Solución
Para máquinas de compilación
En el código anterior, reemplace los valores de nombre de usuario y contraseña por variables de entorno secretas ("ocultas de los registros") de su máquina de compilación
Resultados de la prueba por
y verás
fuente
¿Por qué no pruebas algo muy simple?
use psexec con el comando 'shutdown / r / f / t 0' y una lista de PC de CMD.
fuente