未解析的参数(调用命令)

时间:2019-09-03 11:37:51

标签: powershell

运行下面的代码时,我收到错误消息

Invoke-Command : Missing an argument for parameter 'ComputerName'. Specify a
parameter of type 'System.String[]' and try again.  
At line:11 char:16  
+ Invoke-Command -ComputerName -ScriptBlock $scriptblock -Credential $Cred -Argum ...   
+ ~~~~~~~~~~~~~  
     + CategoryInfo : InvalidArgument: (:) [Invoke-Command], 
ParameterBindingException  
     + FullyQualifiedErrorId : MissingArgument,Microsoft.PowerShell.Commands.InvokeCommandCommand

代码:

$item = "1337"
$username = "username"
$password = "password"
$Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, ($password | ConvertTo-SecureString -AsPlainText -Force)

$scriptblock = {
    New-PSDrive -Name SampleDC -PSProvider FileSystem -Root \\sampleDC\scripts
    ."C:\scripts\sample.ps1" # include global functions scripts
    new_user $args[0] # new_user is a function in global functions
}

Invoke-Command -ScriptBlock $scriptblock -Credential $Cred -ArgumentList $item

2 个答案:

答案 0 :(得分:1)

缺少计算机名参数。我相信您需要在提升的提示下在localhost上调用命令。

答案 1 :(得分:1)

如果不指定计算机,则无法使用其他凭据运行Invoke-Command。您收到的错误是因为您使用参数-ComputerName而不带参数。

要让Invoke-Command在本地计算机上运行脚本块,请使用以下任一命令:

Invoke-Command -Computer . -ScriptBlock $scriptblock -Credential $Cred ...
Invoke-Command -Computer localhost -ScriptBlock $scriptblock -Credential $Cred ...
Invoke-Command -Computer $env:COMPUTERNAME -ScriptBlock $scriptblock -Credential $Cred ...

请注意,如果您要传递其凭据的用户没有管理员权限,您将得到如下错误:

[localhost] Connecting to remote server localhost failed with the following
error message : Access is denied. For more information, see the
about_Remote_Troubleshooting Help topic.
    + CategoryInfo          : OpenError: (localhost:String) [], PSRemotingTransportException
    + FullyQualifiedErrorId : AccessDenied,PSSessionStateBroken

在这种情况下,您需要首先为它们启用PowerShell Remoting。在提升的PowerShell控制台中运行以下命令,然后在弹出的对话框中添加用户或组。

Set-PSSessionConfiguration Microsoft.PowerShell -ShowSecurityDescriptorUI

来自documentation

  

如何为非管理用户启用远程操作

ERROR:  ACCESS IS DENIED
     

要在远程计算机上建立PSSession或运行命令,用户必须具有使用远程计算机上的会话配置的权限。

     

默认情况下,只有计算机上Administrators组的成员才有权使用默认会话配置。因此,只有Administrators组的成员才能远程连接到计算机。

     

要允许其他用户连接到本地计算机,请向用户授予对本地计算机上默认会话配置的执行权限。

     

以下命令将打开一个属性表,该属性表可让您更改本地计算机上默认Microsoft.PowerShell会话配置的安全描述符。

Set-PSSessionConfiguration Microsoft.PowerShell -ShowSecurityDescriptorUI