我使用以下命令创建密码文件:
$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.
有没有办法在不为每个用户生成密钥的情况下使用此方法?
答案 0 :(得分:4)
当您使用ConvertTo-SecureString
和ConvertFrom-SecureString
而没有Key
或SecureKey
时,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/