无法将参数传递给 ConvertTo-SecureString,只有脚本定义的变量

Unable to pass param to ConvertTo-SecureString, only script defined variable

最近几天这个问题一直让我感到困惑。无法将参数传递给 ConvertTo-SecureString,只有脚本定义的变量。

当我 运行 一个脚本时,我传递了一些参数。它需要做的任务之一是通过 PSSession 连接到远程机器,即

./myscript.ps1 -VMPass "12345@!" -VMuser abc

在我的脚本中,我有以下内容将传递给 New-PSSession

[CmdletBinding()] 
Param(
    $VMuser,
    $VMPass
)

$PWord = ConvertTo-SecureString -AsPlainText -String "$VMPass" -Force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $VMuser, $PWord
$NewVMSession = (New-PSSession -ComputerName $NewVMAddress -Credential $cred -ErrorAction Stop)

当我 运行 出现以下错误时:

New-PSSession : [WIN-V2BK0KCPC7H] Connecting to remote server WIN-V2BK0KCPC7H
failed with the following error message : Access is denied. For more information,
see the about_Remote_Troubleshooting Help topic.
At C:\Users\ChildsC\Documents\Git\BAIC\Controller.ps1:85 char:26
+ ... MSession = (New-PSSession -ComputerName $NewVMAddress -Credential $vm ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OpenError: (System.Manageme....RemoteRunspace:RemoteRunspace) [New-PSSession], PSRemotingTransportException
    + FullyQualifiedErrorId : AccessDenied,PSSessionOpenFailed

但是,如果我在脚本中明确定义 $VMPass = "12345@!" 或者如果我调用 Get-Credential 它工作正常。

所以传递参数的方式有一个小问题。

为确保身份验证尝试有效,请记住将您的域凭据用户名格式化为 DomainName\UserName。您可能还需要为 New-PSSession cmdlet 提供适当的 -Authentication 参数值。

有许多可用的身份验证选项,您可以在 MSDN 上阅读有关它们和 WinRM 身份验证的更多信息 - https://msdn.microsoft.com/en-us/library/aa384295(v=vs.85).aspx

没有直接的理由相信您的脚本的语法有问题,但是,如果上述内容没有帮助,也许我们可以看看。

抱歉回复晚了。

稍后,当我尝试在脚本中显式调用密码而不是通过变量传递密码时,我遇到了间歇性连接问题。

如果我使用上面的相同脚本连接到我们域中已有的机器,那么它工作正常。此问题似乎仅在机器未连接到域时出现。

我曾考虑过设置一个 OS 模板,但我无法使用模板将 VM 设置到域,因为我们有太多 OU。

我的解决方法是禁用防火墙。我有将 VM 连接到域的脚本,添加后我可以重新启用防火墙。

我对此不是特别满意,但这是目前唯一有效且一致的方法。我确实尝试打开一些特定的端口,如下所述: https://blogs.technet.microsoft.com/christwe/2012/06/20/what-port-does-powershell-remoting-use/

但我又一次没有得到一致的结果。但据我所知,防火墙是一个问题,我稍后可以回过头来确定应该打开哪些端口。如果有人有任何问题,我愿意接受有关如何执行此操作的想法:)。

我会将此标记为已回答。

感谢您的宝贵时间。