我正在学习如何与PowerShell和PsTools进行交互,我遇到了psexec
的问题。
我有一个名为test.ps1
的ps1脚本,在其中我有Get-Service
,它为我提供了计算机中的所有服务。现在我要进入PowerShell并转到c:\pstools
。然后我输入
psexec.exe C:\test\test.ps1
并且失败并返回此错误:
%1不是有效的Win32应用程序
可能是什么问题?
答案 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
命令只是一个简单的例子,请不要介意。 ps
和PsTools中的psexec
与 PowerShell 无关; PsTools是用于管理远程远程的Windows机器的CLI集合,包括进程,其常见缩写是" ps",受标准{{的启发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
参数将脚本文件路径传递给它:
-File
C:\> powershell -file c:\test\test.ps1
C:\> pwsh -file c:\test\test.ps1
Windows PowerShell ,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
寻求帮助。