Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何在远程计算机上通过powershell invoke命令使用psexec?(无效句柄)_Windows_Batch File_Powershell_Psexec - Fatal编程技术网

Windows 如何在远程计算机上通过powershell invoke命令使用psexec?(无效句柄)

Windows 如何在远程计算机上通过powershell invoke命令使用psexec?(无效句柄),windows,batch-file,powershell,psexec,Windows,Batch File,Powershell,Psexec,我编写了一个powershell脚本,该脚本根据远程主机(通过powershell invoke命令或psexec)创建powershell脚本或批处理脚本 该脚本创建powershell或批处理脚本,因为并非所有运行这些创建的脚本的主机都支持WinRM(Windows远程管理) 创建的脚本包括一些psexec行,这些行在另一个远程主机上执行命令。创建的批处理脚本按预期工作,但从创建的powershell脚本中,我从psexec调用中得到以下错误 NotSpecified: (:String)

我编写了一个powershell脚本,该脚本根据远程主机(通过powershell invoke命令或psexec)创建powershell脚本或批处理脚本

该脚本创建powershell或批处理脚本,因为并非所有运行这些创建的脚本的主机都支持WinRM(Windows远程管理)

创建的脚本包括一些psexec行,这些行在另一个远程主机上执行命令。创建的批处理脚本按预期工作,但从创建的powershell脚本中,我从psexec调用中得到以下错误

NotSpecified: (:String) [], RemoteException
    + CategoryInfo          : NotSpecified: (:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
    + PSComputerName        : <HOSTNAME REPLACED>

PsExec v2.1 - Execute processes remotely
Copyright (C) 2001-2013 Mark Russinovich
Sysinternals - www.sysinternals.com
The handle is invalid.
Access is denied.
Connecting to 10.XXX.XXX.127...Couldn't access 10.XXX.XXX.127:
Starting PSEXESVC service on 10.XXX.XXX.127...Could not start PSEXESVC service on 10.XXX.XXX.127:
Connecting to 10.XXX.XXX.127...Starting PSEXESVC service on 10.XXX.XXX.127...
NotSpecified:(:String)[],RemoteException
+CategoryInfo:NotSpecified:(:String)[],RemoteException
+FullyQualifiedErrorId:NativeCommandError
+PSComputerName:
PsExec v2.1-远程执行进程
版权所有(C)2001-2013 Mark Russinovich
Sysinternals-www.Sysinternals.com
句柄无效。
访问被拒绝。
连接到10.XXX.XXX.127…无法访问10.XXX.XXX.127:
正在10.XXX.XXX.127上启动PSEXESSVC服务…无法在10.XXX.XXX.127上启动PSEXESSVC服务:
正在连接到10.XXX.XXX.127…正在10.XXX.XXX.127上启动PSEXESSVC服务。。。
下面是所做工作的一个小概述:

  • 部署主机上的Powershell脚本根据目标主机创建卷展栏脚本(ps1或批处理)
  • 部署主机上的Powershell脚本启动目标主机上创建的卷展栏脚本
    • Powershell将通过
      Invoke命令-ComputerName-FilePath-Authentication default启动
    • 批处理将通过
      &psexec.exe\\-n 60-accepteula-c-f启动
  • 在目标主机上创建的卷展栏脚本执行psexec命令以在第三台主机上启动服务(仅当卷展栏脚本为powershell时,此操作才会失败)
  • 这是psexec命令,如果通过远程启动的powershell脚本执行该命令,则会失败

    &psexec.exe\\-n 60-accepteula-u-p净停止

    通过远程启动的批处理脚本执行的相同命令
    psexec.exe\\-n 60-accepteula-u-p net stop
    工作正常

    更新#1

    此外,如果我使用rdp连接到目标主机并启动powershell shell并粘贴该命令,则该命令可以正常工作。只有在远程启动时才会出现问题

    我已经尝试过以下几种启动psexec的方法,但都没有成功

  • &psexec.exe\\-n 60-accepteula-s-u-p净停止
  • Start Process cmd.exe-Credential“\”-WorkingDirectory$env:systemdrive-ArgumentList”/C psexec.exe\\-n 60-accepteula-u-p net stop“
  • Start Process powershell.exe-WorkingDirectory$env:systemdrive-动词Runas-ArgumentList“cmd.exe/C psexec.exe \\-n 60-accepteula-u-p net stop”

  • 您是否可以尝试替换psexec命令,并像这样使用cmd.exe n还可以将-s添加到psexec,以便它将作为系统用户运行。我的测试命令:

    icm -cn computer1  -ScriptBlock{ cmd.exe "/c psexec -s -u <login> -p <password> /accepteula /n 10 \\computer2 net start audiosrv"} 
    
    icm-cn computer1-ScriptBlock{cmd.exe”/c psexec-s-u-p/accepteula/n 10\\computer2 net start audiosrv“}
    
    您遇到了第二跳问题:

    答案是启用所涉及的两台计算机之间的适当关系(请参阅上一个链接或在google中搜索“powershell”和“second hop”),并添加到调用命令: -认证Credssp-凭证

    对我有效的是:
    启动进程-文件路径。\PsExec.exe-ArgumentList”/acceptEula/s\$Computer program.exe/arg“

    此PsExec部分不是卷展脚本中的唯一代码,但我知道您的意思。我将用我已经尝试过的所有变体更新原始问题。icm是invoke命令的别名,我在您测试的命令中没有看到它。请像我一样尝试,它在我的环境中运行良好。我无法将icm用于psexec部分,因为目标主机是没有WinRM的w2k3系统。我想你错过了我使用的架构的信息。主机A上的Powershell脚本启动主机B上的Powershell脚本,然后启动psexec,如上图所示。如果从主机A运行该命令,并将computer1替换为主机B,它将满足您的要求否?问题是,psexec命令必须在主机B上的其他几个命令之后运行,因此我不确定是否可以以任何方式解决此问题,但我将尝试一下。