ConvertTo-SecureString - 在重新启动后,密钥无法在指定状态下使用

时间:2015-02-28 00:28:27

标签: windows powershell

我有一个Powershell脚本,它使用在文件中存储为安全字符串的密码从几个月开始运行。今天我去运行脚本时,我开始收到"密钥无效,无法在指定状态下使用"。该脚本由活动目录域帐户运行的计划任务调用。该帐户没有变化,我唯一知道的事件是服务器重启。什么可能导致这个问题发生?

将我的数据转换回安全字符串再次解决了这个问题,但我很困惑为什么它首先发生了。

我通过以下方式创建密码文件:

Write-Host "Please enter the filename where you'd like to store the password:"
$passwordFile = Read-Host
Write-Host "Please enter the ftp password and press enter:"
read-host -AsSecureString | ConvertFrom-SecureString | Out-File $passwordFile
Write-Host "Your Password File ($passwordFile) has been created."

我从文件中检索密码如下:

$FTPPassword = Get-Content $FTPPasswordFilePath
$script:FTPCredObj = New-Object -TypeName System.Management.Automation.PSCredential -argumentlist $FTPUserName,($FTPPassword | ConvertTo-SecureString)

我确实注意到与用户个人资料有关的事件日志中的错误:

" Windows无法找到本地配置文件,并使用临时配置文件登录。当您注销时,您对此个人资料所做的更改将会丢失。"

我作为任务用户使用RDP来更新包含安全字符串的文件,之后我没有注意到任何配置文件错误。

1 个答案:

答案 0 :(得分:3)

如果您使用临时个人资料登录,则无法访问您个人资料中的资源。这将包括用于加密和解密PowerShell安全字符串的加密密钥。

因此,潜在的问题是导致您的个人资料无法加载的任何问题。 (这不是编程问题,因此您应该与系统管理员联系 - 或者如果您是这样,您可以在超级用户或服务器故障时询问。)

请注意,下次退出并重新登录时问题会再次出现,因为您现在使用仅存储在临时配置文件中的密钥加密密码,该密钥将在您注销时被丢弃。