将解锁凭证传递给PowerShell脚本

我有一个作为计划任务运行的PowerShell脚本,并触发运行“工作站解锁”。 如果在locking工作站期间连接断开连接,脚本将被编程为重新连接SSTP VPN连接。 我想将用户名和密码传递给脚本,这样用户不会被提示input相同的信息两次(一次为工作站解锁,然后再次为VPN连接)域用户名和密码与vpn用户名相同并通过。 [System.Security.Principal.WindowsIdentity] :: GetCurrent()不会让我访问当前login的用户的密码。 有另一种方法吗?

谢谢

AFAIK,没有办法从标准的用户模式的过程(如Powershell)获取当前用户的明文密码。 这是一件好事。 如果有的话,这将是一个相当大的安全漏洞。

尽pipe可能会编写一个Windows凭据提供程序 ,该提供程序可以挂接到WinLogon API并最终在解锁过程中接收用户的明文用户名和密码,但实际上并不是您要完成的正确解决scheme。 这也可能超出了你愿意研究的解决scheme的编程水平。

如果您的VPN解决scheme实际上与您的域相集成,我希望它支持使用用户现有的Kerberos票据build立VPN连接的方式,而不需要再次显式input用户的凭证。 这将完全取决于你的VPN解决scheme。 它还假设VPN解决scheme实际上与您的域绑定,而不仅仅是使用重复的身份

我使用这两个脚本来保存和加载凭据。 只有保存凭证的用户才能加载它们。

当然用户必须input一次他的证书。

保存- 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 

负载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." } 

凭证对象具有安全的string属性。