如何使用PowerShell在远程框中运行针对CMD的正确命令?

如何使用PowerShell在远程框中运行针对CMD的正确命令?,powershell,cmd,remote-access,Powershell,Cmd,Remote Access,我需要在CMD的PowerShell帮助下运行远程命令。这是我从CMD调用的命令: powershell -command "$encpass=convertto-securestring -asplaintext mypass -force;$cred = New-Object System.Management.Automation.PSCredential -ArgumentList myuser,$encpass; invoke-command -computername "REMOTE

我需要在CMD的PowerShell帮助下运行远程命令。这是我从CMD调用的命令:

powershell -command "$encpass=convertto-securestring -asplaintext mypass -force;$cred = New-Object System.Management.Automation.PSCredential -ArgumentList myuser,$encpass; invoke-command -computername "REMOTE_COMPUTER_NAME" -scriptblock {<command>} -credential $cred;"
powershell-command“$encpass=convertto securestring-asplaintext mypass-force;$cred=New Object System.Management.Automation.PSCredential-ArgumentList myuser,$encpass;invoke命令-computername“REMOTE_COMPUTER_NAME”-scriptblock{}-credential$cred;”
可以在cmd.exe中运行任何命令来代替
(包括符号)。例如,可以有
perl-e“print$^O;”
echo“Hello World!”
(注意:不能有
perl-e“print$^O;”
,因为这是一个不正确的CMD命令,原因是单引号)。因此,命令
perl-e“print$^O;”
和任何其他包含双引号的命令似乎没有按预期处理。在这里,我希望它从perl的角度返回远程框的OS名称,但由于PowerShell和/或CMD对双引号的处理不清楚,所以它不会打印任何内容


因此,下面的问题是,如何使用PowerShell在remote box中为CMD运行命令更正?

OP中的命令行可能存在几个问题。如果OP中的命令行是从PowerShell本身执行的,$encpass和$cred将在调用PowerShell的(子实例)之前被替换。您需要使用单引号或转义$符号,例如:

powershell -command "`$encpass=2"
powershell -command '$encpass=2'
如果不是使用Powershell,而是从CMD执行命令行,则必须转义“^”,因为它是CMD转义字符

引用“也是个好主意。在我做的一些测试中,我不得不使用不平衡的引号来让命令工作,例如,从powershell:

powershell-命令“`$encpass=``a`”;写入主机“$encpass”

成功了,但平衡报价没有成功

为了避免所有这些情况,可能在powershell命令行帮助中给出了最可靠的方法:
powershell-?

# To use the -EncodedCommand parameter:
$command = 'dir "c:\program files" '
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)
powershell.exe -encodedCommand $encodedCommand

然而,在PS3.0中有一个新特性也应该有所帮助,但我认为它不会那么健壮。此处描述:,在博客中间附近。

您确定这不是未替换的引号(
)的影响吗近远程计算机名称?@user268396是的,我是。通常我用单引号的远程计算机名称进行过尝试,它不会影响任何操作的结果。我可以肯定地说问题出在哪里。这不是我想要的。但它帮助我解决了问题。因此我编写了
perl-e”““print”$^O;“
而不是
perl-e”打印$^O;“
而且它可以工作。