我有这段代码:
powershell -command "& { (New-Object Net.WebClient).DownloadFile('linkToMyFile.file', 'C:\my.file') }"
下载文件。
当我在远程服务器上的cmd中执行它时 - 一切正常
但是当我想使用paexec从远程服务器上的计算机执行此代码时,我遇到了一些转义符问题
我的CMD中的命令:
psexec.exe \\remoteServer.0.1 -u username -p password -dbg -lo D:\PsExec.log cmd /c "powershell -command "& { (New-Object Net.WebClient).DownloadFile('linkToMyFile.file', 'C:\my.file') }""
我尝试使用^符号,但同样的错误;
代码使用^符号表示双引号:
psexec.exe \\remoteServer.0.1 -u username -p password -dbg -lo D:\PsExec.log cmd /c "powershell -command ^"& { (New-Object Net.WebClient).DownloadFile('linkToMyFile.file', 'C:\my.file') }^""
此外,我尝试使用\
(如在PHP中)进行转义,但结果相同
请帮助解决这个问题,或者提供如何使用命令行远程下载文件的建议。
答案 0 :(得分:1)
不幸的是,CMD使用different escape characters取决于转义的内容和位置。在任何地方都没有单一的转义字符。
在大多数情况下,通过在插入符号(^
)前加上下一个字符进行转义,例如在for /f
循环中:
for /f "tokens=1" %%a in ('type file.txt ^| find "something"') do ...
但有时字符会因为加倍而逃脱,例如批处理脚本中的字符百分比(%
):
@echo off
echo %%DATE%%=%DATE%
有时你甚至可能需要输入其他转义字符(比如反斜杠),因为你需要转义不是为了CMD的东西,而是为了传递字符串的命令:
mountvol | findstr /r \\\\
但是,您的特定方案不应该需要额外的引号或转义。只需直接运行PowerShell命令行,不需要cmd /c
:
paexec.exe \\remoteServer.0.1 -u username -p password powershell -command "&{...}"
答案 1 :(得分:0)
是否有可能以完整的方式使用powershell?如果是这样,您可以尝试以下方法:
New-PsDrive -Name X -Root \\127.0.0.1\c$ -PsProvider FileSystem -Credential (Get-Credential)
Copy-Item -Path X:\RequestedFile.txt -Destination C:\Temp
Remove-PsDrive -Name X
如果您的目的地是http
地址,则可以执行以下操作:
Invoke-WebRequest -Uri http://some.uri -Method Get -OutFile C:\temp\myfile -Credential (Get-Credential)
希望有所帮助
答案 2 :(得分:0)
而不是:
psexec.exe \\remoteServer.0.1 -u username -p password -dbg -lo D:\PsExec.log cmd /c "powershell -command "& { (New-Object Net.WebClient).DownloadFile('linkToMyFile.file', 'C:\my.file') }""
做到这一点:
psexec.exe \\remoteServer.0.1 -u 'username' -p 'password' powershell.exe -Command "& {(New-Object System.Net.WebClient).DownloadFile('linkToMyFile.file', 'C:\my.file')}"
这应该做你的工作。
希望它有所帮助。