运行下面的代码时,我收到错误消息
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
答案 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
如何为非管理用户启用远程操作
ERROR: ACCESS IS DENIED
要在远程计算机上建立PSSession或运行命令,用户必须具有使用远程计算机上的会话配置的权限。
默认情况下,只有计算机上Administrators组的成员才有权使用默认会话配置。因此,只有Administrators组的成员才能远程连接到计算机。
要允许其他用户连接到本地计算机,请向用户授予对本地计算机上默认会话配置的执行权限。
以下命令将打开一个属性表,该属性表可让您更改本地计算机上默认Microsoft.PowerShell会话配置的安全描述符。
Set-PSSessionConfiguration Microsoft.PowerShell -ShowSecurityDescriptorUI