有没有办法与任何用户一起使用ConvertFrom-SecureString和ConvertTo-SecureString?

时间:2017-10-03 14:35:59

标签: powershell windows-10

我使用以下命令创建密码文件:

$path = "C:\Users\USER\Desktop"
$passwd = Read-Host "enter desired password" -AsSecureString
$encpwd = ConvertFrom-SecureString $passwd
$encpwd > $path\filename.bin

然后用:

调用该文件
# define path to store password and input password 
$path = "C:\Users\USER\Desktop"
# get the encrypted password from the path
$encpwd = Get-Content $path\filename.bin
# convert file to secure string 
$passwd = ConvertTo-SecureString $encpwd
# define needed credential 
$cred = new-object System.Management.Automation.PSCredential 'WIN-SERVER\AdminForQB',$passwd
# go to DVD drive launch setup.exe as user with privileges to launch the program with no user input required
Set-Location "C:\Program Files (x86)\Intuit\QuickBooks 2017\"
Start-Process PowerShell -windowstyle hidden -Cred $cred -ArgumentList .\QBW32PremierAccountant.exe

我的目标是能够使用admin privs运行QB2017,而无需向用户提供admin privs。我遇到的问题是我必须为每个用户生成密码文件,否则如果用户尝试使用另一个用户生成的密码文件,我会收到以下错误:

Key not valid for use in specified state.

有没有办法在不为每个用户生成密钥的情况下使用此方法?

2 个答案:

答案 0 :(得分:4)

当您使用ConvertTo-SecureStringConvertFrom-SecureString而没有KeySecureKey时,Powershell将使用Windows数据保护API(DPAPI)来加密/解密您的字符串。这意味着它只适用于同一台计算机上的同一用户。

使用Key / SecureKey时,使用高级加密标准(AES)加密算法。只要您知道所使用的AES密钥,就可以在任何计算机上使用存储的凭证。

More info on this topic (with example code)

注意:这只是通过默默无闻的安全性,这不是好的做法。如果您将密钥存储在与加密密码相同的计算机上,则它比纯文本密码更安全!

答案 1 :(得分:0)

PowerShell是错误的解决方案。

要修复此问题,您应该授予他们对QB2017需要访问的文件夹和注册表项的读/写访问权限。如果仍有问题,请使用Microsoft的Application Compatibly Toolkit创建一个Shim。

https://deployhappiness.com/fixing-applications-that-require-administrator-rights/