psexec试图执行脚本错误

时间:2018-01-27 12:33:06

标签: powershell

我正在学习如何与PowerShell和PsTools进行交互,我遇到了psexec的问题。

我有一个名为test.ps1的ps1脚本,在其中我有Get-Service,它为我提供了计算机中的所有服务。现在我要进入PowerShell并转到c:\pstools。然后我输入

psexec.exe C:\test\test.ps1

并且失败并返回此错误:

  

%1不是有效的Win32应用程序

可能是什么问题?

2 个答案:

答案 0 :(得分:1)

PsExec启动可执行文件。您需要为PowerShell和相关参数指定可执行文件:

psexec.exe -accepteula -nobanner -s -h -d powershell.exe -ExecutionPolicy Bypass -NoProfile -NoLogo -File "C:\test\test.ps1"

答案 1 :(得分:0)

您的问题的立即回答是:

  • psexec需要(二进制)可执行文件作为其第一个参数,并且无法直接执行脚本

  • 因此,您必须将Windows PowerShell可执行文件名传递给psexec,然后通过-File将所需脚本作为参数传递给后者参数:

    psexec powershell -File C:\test\test.ps1
    
  • 那就是说, psexec的这种特殊用法是毫无意义的,因为它会像当前用户一样执行本地脚本 ,其中案例使用psexec是一种不必要的并发症:

    • 如果您已经知道这一点,而且psexec命令只是一个简单的例子,请不要介意。
    • 否则请阅读以下内容。
  • psPsTools中的psexec PowerShell 无关; PsTools是用于管理远程远程的Windows机器的CLI集合,包括进程,其常见缩写是&#34; ps&#34;,受标准{{的启发1}} Unix实用程序,它反过来激发了集合中的初始工具ps; <{3}}的主要用途是在远程计算机上调用任意命令行 [1]

  • 在本地调用PowerShell脚本

    • 内部 PowerShell 本身,只需直接调用文件路径:

      • pslist
      • PS> c:\test\test.ps1,如果文件路径是/必须引用或通过变量或表达式提供。
    • 来自PowerShell的外部,例如PS> & "c:\test\test.ps1"(&#34;命令提示符&#34;)cmd.exe,您必须显式调用PowerShell可执行文件 ,并通过bash参数将脚本文件路径传递给它:

      • Windows PowerShell -File
      • PowerShell 核心C:\> powershell -file c:\test\test.ps1
      • 换句话说: PowerShell的可执行文件名称
        • C:\> pwsh -file c:\test\test.ps1 Windows PowerShell
        • VS。 powershell.exe ,适用于跨平台 PowerShell Core 版本(Windows上的扩展名为pwsh)。
  • 如果您确实需要 远程执行

    • .exe - 前缀的机器名称或IP地址传递给\\ ;例如,以下命令在计算机psexec上执行hostname实用程序:
      somemachine
      使用psexec \\somemachine hostname而不定位不同的计算机有好处。 [1]

    • 但是,通常不需要psexec,因为 PowerShell具有内置支持远程处理(即,执行命令的能力)其他机器;远程处理需要设置,但是 - 运行psexec以获取更多信息);例如,上述命令的等价物是:
      psexec

[1]正如Get-Help about_Remote_FAQ所指出的那样,Invoke-Command -ComputerName somemachine { hostname }也可用于本地执行系统帐户({使用psexec选项的{1}},代表整个计算机的帐户 此外,您还可以使用NT AUTHORITY\SYSTEM参数在本地作为其他用户运行 - 但是,标准-s实用程序也可以执行此操作(后者不会这样做)。 t出于安全原因提供将目标用户的密码作为参数传递,但确实提供了安全地保存密码以供以后重复使用。) 运行-u寻求帮助。