Get-Content -Path не работает в скрипте, запускаемом Certify (Lets Encrypt), но работает нормально, когда скрипт запускается в powershell
Моя проблема в том, что я создал скрипт, который запускает оболочку Exchange PSsession. Скрипты работают нормально, если я запускаю его построчно в PowerShell или если я щелкаю правой кнопкой мыши по нему в проводнике и запускаю. Однако, когда он вызывается через certify после того, как новый сертификат произведен, это терпит неудачу.
Вот раздел сценария:
$password = Get-Content -Path 'c:\Certificate_Update\securepassword.txt'
$pw = ConvertTo-SecureString -String $password
#$pw = ConvertTo-SecureString -AsPlainText -Force -String "admin pass here"
$cred = New-Object System.Management.Automation.PSCredential ("Wookies-Domain\Administrator", $pw)
$uri = 'http://Exchange-Server/PowerShell/'
# Starts remote Exchange shell session
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri $uri -Authentication Kerberos -Credential $Cred
# Imports remote Exchange shell session to this Machine
Import-PSSession $Session
Я получаю ошибку:
ConvertTo-SecureString: система не может найти указанный путь. В C:\Certificate_Update\Update_Old_Cert.ps1:40 char:7 + $pw = ConvertTo-SecureString -String $password + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidArgument: (:) [ConvertTo-SecureString], CryptographicException + FullyQualifiedErrorId: ImportSecureString_InvalidArgument_CryptographicError,Microsoft.PowerShell.Commands.ConvertToSecureStringCommand TerminatingError(New-Object): "Вызов исключения".ctor "с аргументом"2": "Невозможно обработать аргумент, так как значение аргумента" пароль "равно нулю. Измените значение аргумента "пароль" на ненулевое значение."" New-Object: Исключение вызывает ".ctor" с аргументом (ами) "2": "Не удается обработать аргумент, потому что значение аргумента "пароль" является нулевым. Изменить значение аргумент "пароль" для ненулевого значения. "
Это говорит $password
нулевой? Не могу понять, что я сделал неправильно. Может быть, это какая-то проблема с разрешениями, поскольку скрипт запускается с помощью команды certify?
2 ответа
Несмотря на то, что прошло более 4 лет, проблема все еще существует. Я обнаружил, что при некоторых условиях ConvertTo-SecureString не работает с переменными с ошибкой «Система не может найти указанный путь». В моем случае это произошло, когда я попытался выполнить свой скрипт в "NT AUTHORITY\SYSTEM". Итак, вместо
$pw = ConvertTo-SecureString -String $пароль
я использовал
$pw = ConvertTo-SecureString -String "содержимое переменной-$пароля"
и это сработало.
Мой скрипт вызывал файл с зашифрованной стандартной строкой, используемой в качестве пароля. Это было зашифровано как администратор. Сертификация запускается как служба, настроенная на Локальную систему. Поэтому, когда скрипт пытался получить доступ к файлу паролей, он не работал из-за неправильных привилегий. Настройка службы для работы в качестве администратора вылечила проблему.
Спасибо Ansgar Wiechers за помощь в решении проблемы.