Passar credenciais de desbloqueio para script de powershell

1

Eu tenho um script powershell que é executado como uma tarefa agendada e é acionado para executar "On workstation unlock". O script é programado para reconectar uma conexão VPN SSTP se a conexão for desconectada durante o tempo em que a estação de trabalho estiver bloqueada. Gostaria de passar o nome de usuário e senha para o script para que o usuário não seja solicitado a inserir as mesmas informações duas vezes (uma vez para o desbloqueio da estação de trabalho e novamente para a conexão VPN) O nome de usuário e senha do domínio são iguais ao nome de usuário da vpn e passe. O [System.Security.Principal.WindowsIdentity] :: GetCurrent () não me permitirá acessar a senha do usuário conectado no momento. Existe outra maneira ??

Obrigado

    
por John R 05.09.2013 / 23:11

2 respostas

0

AFAIK, não há como um processo de modo de usuário padrão (como o Powershell) obter a senha de texto simples do usuário atual. E isso é uma coisa boa. Se houvesse, seria uma grande vulnerabilidade de segurança.

Embora seja possível escrever um Windows Provedor de Credenciais que pode se conectar às APIs WinLogon e, finalmente, receber o nome de usuário e a senha em texto simples do usuário durante o processo de desbloqueio, não é a solução certa para o que você está tentando realizar. É provavelmente também além do nível de esforço de programação que você está disposto a aprofundar nessa solução.

Se a sua solução VPN estiver realmente integrada ao seu domínio, espero que ela ofereça suporte ao uso do tíquete Kerberos existente do usuário para estabelecer a conexão VPN sem realmente precisar inserir explicitamente as credenciais do usuário novamente. Isso vai depender totalmente da sua solução VPN. Ele também assume que a solução VPN está realmente vinculada ao seu domínio e não apenas usando uma identidade duplicada s

    
por 06.09.2013 / 08:51
0

Eu uso o script de dois para salvar e carregar credenciais. Somente o usuário que salvou a credencial pode carregá-las.

É claro que o usuário deve inserir sua credencial uma vez.

Save-Credential.ps1

param(
    [Parameter(Mandatory=$True)]
    [string]$CredentialName
    )

$path = (([System.IO.Path]::GetDirectoryName($PROFILE.CurrentUserCurrentHost))+ '\Credentials\'+$CredentialName+'.xml')
$dir = ([System.IO.Path]::GetDirectoryName($path))
if((Test-Path ($dir)) -eq $false)
{
    New-Item -Path $dir -ItemType Directory
}

$cred = Get-Credential
$cred | Export-Clixml $path

Load-Credential.ps1

param(
    [Parameter(Mandatory=$True)]
    [string]$CredentialName
    )

$path = (([System.IO.Path]::GetDirectoryName($PROFILE.CurrentUserCurrentHost))+ '\Credentials\'+$CredentialName+'.xml')
if(Test-Path ($path ))
{
    Import-Clixml $path
}else
{
    Write-Host "File $path not found."
}

O objeto de credencial tem uma propriedade de string segura.

    
por 11.01.2015 / 13:26