Powershell 和 运行 计划任务作为其他用户

Powershell and running scheduled task as other user

我进退两难。

我正在尝试在 Windows 中设置一个计划任务,该任务 运行 是另一个用户(具有访问权限但没有登录权限的服务帐户)的 powershell 脚本。问题是我们的安全组告诉我们不要用密码编码(这显然是个好建议),但 SQL 的连接字符串似乎需要纯文本形式。我通过创建密码文件来解决这个问题:

$credential = Get-Credential
$credential.Password | ConvertFrom-SecureString | Set-Content e:\temp\password.txt

然后在脚本中将其转换回纯文本(用于连接字符串)

$password = cat E:\temp\password.txt | ConvertTo-SecureString
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($password)
$UnsecurePassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)

$connectionString = "Data Source=<mydatabase>;Initial Catalog='<mytable>';User ID=tng ;Password=$Unsecurepassword;"

问题在于,当我创建密码文件和 运行 脚本时,效果很好,但我似乎无法 运行 将此作为计划任务。在过去的经验中,我看到密码文件可能需要由服务帐户 运行 宁计划任务创建,但没有本地登录权限,我不确定如何创建它。有什么想法吗?

我试过this technet article,但似乎仍然需要从其他帐户本地登录。

找到答案 - 我需要向安全字符串添加密钥:

创建文件时 - 添加 $key:

[byte[]] $key = (1..16)   
$credential = Get-Credential
$credential.Password | ConvertFrom-SecureString -key $key | Set-Content e:\temp\password.txt

然后在读回时:

$passwordfile = "E:\temp\password.txt"
[byte[]] $key = (1..16)
$securePassword = Get-Content $passwordfile | ConvertTo-SecureString -Key $key
$BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($securepassword)
$UnsecurePassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)

感谢 this link

找到答案