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 за помощь в решении проблемы.

Другие вопросы по тегам