Я делал что-то подобное описанному в этом посте, чтобы сохранить учетные данные в защищенном файле, чтобы наш автоматизированный процесс мог использовать это для запуска удаленных сценариев PS с помощью команды Invoke: http://blogs.technet.com/b/robcost/archive/2008/05/01/powershell-tip-storing-and-using-password-credentials.aspx
Это прекрасно работает, когда язапустите это под моей учетной записью - пароль читается из зашифрованного файла, передается Invoke-команде и все в порядке.
Сегодня, когда мой скрипт был готов к прайм-тайм, я попытался запустить его под учетной записью Windows, чтобудет использоваться автоматическим процессом и получит эту ошибку ниже, когда мой скрипт пытается прочитать защищенный пароль из файла:
ConvertTo-SecureString : Key not valid for use in specified state.
At \\remoted\script.ps1:210 char:87
+ $password = get-content $PathToFolderWithCredentials\pass.txt | convertto-sec
urestring <<<<
+ CategoryInfo : InvalidArgument: (:) [ConvertTo-SecureString], C
ryptographicException
+ FullyQualifiedErrorId : ImportSecureString_InvalidArgument_Cryptographic
Error,Microsoft.PowerShell.Commands.ConvertToSecureStringCommand
Попросил моего напарника работать под своей учетной записью, и он получил ту же ошибку.
Это код, который я использую для сохранения учетных данных:
$PathToFolderWithCredentials = "\\path\removed"
write-host "Enter login as domain\login:"
read-host | out-file $PathToFolderWithCredentials\login.txt
write-host "Enter password:"
read-host -assecurestring | convertfrom-securestring | out-file $PathToFolderWithCredentials\pass.txt
write-host "*** Credentials have been saved to $pathtofolder ***"
Это код в скрипте, запускаемый автоматическим процессом для чтения их для использования в команде Invoke:
$login= get-content $PathToFolderWithCredentials\login.txt
$password = get-content $PathToFolderWithCredentials\pass.txt | convertto-securestring
$credentials = new-object -typename System.Management.Automation.PSCredential -argumentlist $login,$password
Ошибка происходит в строке $ password = get-content $ PathToFolderWithCredentials \ pass.txt |convertto-securestring
Есть идеи?