我正在编写一个脚本,该脚本采用 powershell 变量并在运行 net 命令的脚本块中使用它。
以下是代码:
$User = "domain\user"
Invoke-Command -ComputerName $ComputerName -ScriptBlock { net localgroup administrators $User /add } -Credential $cred
当我运行它时,我收到以下错误消息:
The group already exists.
+ CategoryInfo : NotSpecified: (The group already exists.:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
+ PSComputerName : GMCR77569
More help is available by typing NET HELPMSG 2223.
因此,net 命令似乎正在尝试创建管理员组。我在 Google 上没有找到太多相关信息。
另外,我正在使用 Invoke-Command,因为我需要能够传递凭据。
我确信这很简单,但我搞不懂。提前谢谢您!
答案1
因为您正在调用远程命令,所以脚本部分正在尝试解析远程会话中的 $User 变量。如果您想传递变量,那么您可以使用 -Args 参数修改 Invoke-Command。我认为类似下面的方法应该可行:
Invoke-Command -ComputerName $ComputerName -ScriptBlock { net localgroup administrators $args[0] /add } -Credential $cred -Args $User
这篇 PowerShell 博客文章很好地解释了一些问题,并提供了一些解决问题的其他方法。
https://blogs.msdn.microsoft.com/powershell/2009/12/29/how-to-pass-arguments-for-remote-commands/