8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

本地计算机上使用 FilePath 的 PowerShell Invoke-Command-模糊参数错误?

SW4 1月前

38 0

我想使用 Invoke-Command 在本地机器上运行文件中的脚本,以便我可以使用 -ArgumentList 传递参数。我遇到了一个我无法理解的错误,所以我简化了我的命令。...

我想使用 Invoke-Command 在本地计算机上运行文件中的脚本,以便我可以使用 -ArgumentList 传递参数。我遇到了一个我无法理解的错误,因此我简化了我的命令。当我这样做时:

Invoke-Command -FilePath 'getprocess.ps1'

getprocess.ps1的内容为:

Get-Process

我收到的错误信息是:

Invoke-Command:无法使用指定的命名参数解析参数集。

位于行:1 字符:1

+ 调用命令 -FilePath 'getprocess.ps1'

+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo:InvalidArgument:(:)[Invoke-Command],ParameterBindingException

+ FullyQualifiedErrorId:AmbiguousParameterSet,Microsoft.PowerShell.Commands.InvokeCommandCommand

这个错误信息让我很困惑。这是什么意思?我该如何让它正常工作?

帖子版权声明 1、本帖标题:本地计算机上使用 FilePath 的 PowerShell Invoke-Command-模糊参数错误?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由SW4在本站《powershell》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 长话短说:博士

    • p1

      • The -FilePath parameter by design works with remote invocations only - see the bottom section for details.
    • p2

    .\getprocess.ps1
    

    注意:与cmd.exe不同,PowerShell 在设计上要求.\才能执行位于当前目录中的可执行文件。也就是说,为了避免意外执行当前目录中的可执行文件,而不是$env:Path中列出的目录中的可执行文件,PowerShell 作为一项安全功能,要求您明确发出在当前目录 ( . ) 中执行某些文件的意图。

    对于 脚本块 { ... } ),使用 & 调用 运算符 (例如 & { Get-Date } )。

    出于语法原因, 脚本文件路径 & 指定为 引用 路径(例如 & '.\getprocess.ps1' 并且/或者路径涉及 变量引用 (例如,
    & $HOME\getprocess.ps1 )。

    (另外, . 两种 情况 下都需要使用 点源运算符, 以便 直接在调用者的作用域 而不是子作用域中执行脚本 [块])。


    请注意,从 you can technically combine passing a script block to Invoke-Command (parameter -ScriptBlock ) with invoking a local script

    # The script block positionally binds to the -ScriptBlock parameter.
    # This is essentially the more expensive equivalent of:
    #     & .\getprocess.ps1
    Invoke-Command { .\getprocess.ps1 }
    

    这种方法比较 slower and offers NO advantage over direct invocation
    ( .\getprocess.ps1 or & .\getprocess.ps1 )
    .

    • p9

    • p10

    但是,有 one conceivable use case

    如果脚本 不是 高级脚本 advanced script 而您想利用 Invoke-Command 参数 stream-output- collecting common parameters, such as -ErrorVariable (如果被调用的脚本或函数本身 就支持这些常见参数 ,这将再次使使用变得 Invoke-Command 不必要)。

    # Invoke locally and collect errors in $errs
    Invoke-Command { .\getprocess.ps1 } -ErrorVariable errs
    

    警告

    • p14

    • 第15页


    至于 您尝试过的

    在自己的答案中 指出的那样, , -FilePath must be combined with the
    -ComputerName parameter
    (错误消息如此通用是令人遗憾的)。

    • 更一般地, -FilePath must be combined with any of the parameters that request remote execution ,其中包括 -Session , -ConnectionUri , -VmId / -VmName ,以及在类 Unix 平台上, -HostName -SSHConnection .

    目的 purpose of parameter -FilePath is to copy the content of a local script ( *.ps1 file) to a remote computer for execution there 。也就是说,它是一种方便的机制,用于执行(仅)在远程计算机上本地可用的脚本代码。

    虽然从 you can technically target the local computer via -ComputerName localhost <)code>/ -ComputerName . / -cn . 来定位本地计算机 does not amount to a local call

    Whenever -ComputerName is specified - even with -ComputerName localhost - PowerShell's remoting infrastructure is used ,这具有 重大影响

    • p21

    • 第22页

    • p23

    • p24


    也就是说, if the intent is to locally test remote execution 脚本的远程执行,并且本地机器设置为远程目标,那么使用 -ComputerName localhost -ComputerName . / -cn . )就非常有意义,因为 PowerShell 的远程基础架构将以与真正的远程调用相同的方式参与其中。

    但请注意,此类“环回远程”调用需要 提升权限 (以管理员身份运行)。

返回
作者最近主题: