Get-Content-Path在由认证(允许加密)运行的脚本中不起作用,但当脚本在PowerShell中运行时运行正常

p1iqtdky  于 2022-11-10  发布在  Shell
关注(0)|答案(2)|浏览(139)

我的问题是我编写了一个启动Exchange外壳PS会话的脚本。如果我在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 : The system cannot find the path specified.

At 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): "Exception calling ".ctor" with "2" argument(s):
"Cannot process argument because the value of argument "password" is null.
Change the value of argument "password" to a non-null value.""

New-Object : Exception calling ".ctor" with "2" argument(s): "Cannot process
argument because the value of argument "password" is null. Change the value of
argument "password" to a non-null value."

是不是说$password为空?我不知道我做错了什么。脚本正在由Certify运行,这可能是权限问题吗?

yeotifhr

yeotifhr1#

我的脚本正在调用一个使用加密标准字符串作为密码的文件。这是以管理员身份加密的。证书作为设置为本地系统的服务运行。因此,当脚本尝试访问密码文件时,由于权限错误而失败。将服务设置为以管理员身份运行解决了该问题。
感谢Ansga Wiechers帮我解决了这个问题。

5kgi1eie

5kgi1eie2#

虽然4年多过去了,但这个问题仍然存在。我发现在某些情况下,ConvertTo-SecureString不能处理变量,并出现“系统找不到指定的路径”错误。在我的例子中,当我试图在“NT AUTHORITY\SYSTEM”下执行我的脚本时,就发生了这种情况。所以与其这样做
$pw=ConvertTo-SecureString-字符串$Password
我用了
$pw=ConvertTo-SecureString-String“内容-of-$password-Variable”
而且它起作用了。

相关问题