Soy un poco vago, así que he creado un script que me abre muchas aplicaciones. Funciona bien ya que ISE abrió con credenciales de administrador, también abre aplicaciones con credenciales de administrador, sin embargo, algunas de ellas necesitan credenciales diferentes.

¿Es posible hacer que powershell recuerde la contraseña escrita cada vez que inicio sesión y la abro? (Sé que las variables se almacenan solo hasta que se abre ps)

La cosa es que no puedo almacenar una contraseña visible en el perfil / archivo de texto o en un script, ya que este es un servidor de salto utilizado por muchas personas. ¿Es de alguna manera posible escribir una contraseña una vez, hacer que PS la cifre y cada vez que abra PS, la descifrará y la usará? o alguna solución alternativa posible en torno a esto?

Editar con código:

Es la única parte que me gustaría cambiar

$currentPW = "some password"
$credentials = New-Object System.Management.Automation.PSCredential ("domain\username",$CurrentPW)
start "c:\application.exe" -credential $credentials

Funciona un poco, pero me requeriría ingresar la contraseña cada vez que inicio sesión en el dispositivo, por lo que podría optar por opciones como:

$currentPW = read-host "Provide your password"
$credentials = New-Object System.Management.Automation.PSCredential ("domain\username",$CurrentPW)

start "c:\application.exe" -credential $credentials

Pero esto requeriría que ingrese la contraseña cada vez que inicie sesión en el sistema y abra PS, ya que no recuerda las variables después de reiniciar. Entonces ... ¿es posible hacer que esto funcione? ^^

1
Heim 22 feb. 2018 a las 12:30

2 respuestas

La mejor respuesta

Puede usar ConvertTo-SecureString para encriptar la contraseña usando la clave de la cuenta del usuario, luego guardar esta cadena segura en un archivo para cargar más tarde.

Esto supone que usted es el único con acceso a la cuenta de inicio de sesión (no una cuenta con credenciales compartidas), ya que cualquiera que pueda iniciar sesión como la cuenta puede descifrar el archivo.

$username = "domain\username"
$passwordFile = "C:\folder\EncryptedPassword.txt"

#if password file exists: populate $securePwd from file contents
If (Test-Path $passwordFile) {
    $pwdTxt = Get-Content $passwordFile
    $securePwd = $pwdTxt | ConvertTo-SecureString
}
#if no file: prompt for password, create file and populate $securePwd
Else {
    $password = Read-Host "Provide your password"
    $securePwd = $password | ConvertTo-SecureString -AsPlainText -Force 
    $securePwd | ConvertFrom-SecureString | Set-Content $passwordFile
}

$credentials = New-Object System.Management.Automation.PSCredential -ArgumentList $username, $securePwd

Start-Process "c:\application.exe" -Credential $credentials
0
James C. 22 feb. 2018 a las 13:59

Si tiene PowerShell 3.0 o más reciente, también puede combinar Get-Credential con Export-CliXml para exportar un objeto PSCredential como un archivo XML. Ejemplo:

Get-Credential | Export-CliXml "C:\XML Files\credential.xml"

Luego, puede importar las credenciales usando Import-CliXml. Ejemplo:

$credential = Import-CliXml "C:\Xml Files\credential.xml"

Tenga en cuenta que la contraseña está encriptada usando DPAPI, por lo que solo puede importar las credenciales usando Import-CliXml en la misma computadora usando la misma cuenta de usuario que se usó para exportar las credenciales usando Export-CliXml.

0
Bill_Stewart 22 feb. 2018 a las 15:37