你好,我正在尝试使用 Powershell 下载文本文件调用 Web 请求方法
Invoke-WebRequest http://www.example.org/script.txt -Outfile DL_script.txt
script.txt 的内容:
cls
@echo off
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%vbsGetPrivileges%"
ECHO args = "ELEV " >> "%vbsGetPrivileges%"
ECHO For Each strArg in WScript.Arguments >> "%vbsGetPrivileges%"
ECHO args = args ^& strArg ^& " " >> "%vbsGetPrivileges%"
ECHO Next >> "%vbsGetPrivileges%"
if '%cmdInvoke%'=='1' goto InvokeCmd
ECHO UAC.ShellExecute "!batchPath!", args, "", "runas", 1 >> "%vbsGetPrivileges%"
goto ExecElevation
但下载后..文件看起来像这样(所有代码都在一行中,没有换行符)我如何下载真实格式的文件以便运行脚本
cls@echo offECHO Set UAC = CreateObject^("Shell.Application"^) > "%vbsGetPrivileges%"ECHO args = "ELEV " >> "%vbsGetPrivileges%"ECHO For Each strArg in WScript.Arguments >> "%vbsGetPrivileges%"ECHO args = args ^& strArg ^& " " >> "%vbsGetPrivileges%"ECHO Next >> "%vbsGetPrivileges%" if '%cmdInvoke%'=='1' goto InvokeCmd ECHO UAC.ShellExecute "!batchPath!", args, "", "runas", 1 >> "%vbsGetPrivileges%"
goto ExecElevation
我需要一个单行命令用于下载真实格式的脚本。尝试了这些方法但输出相同(所有内容都在一行中)
# Method 1:
Invoke-WebRequest $url -OutFile $path_to_file
# Method 2:
(New-Object System.Net.WebClient).DownloadFile($url, $path_to_file)
# Method 3 (requires BITS may not be immediate):
Import-Module BitsTransfer
Start-BitsTransfer -Source $url -Destination $path_to_file
答案1
至于这个...
我需要一个单行命令来下载脚本
... 与 Ramhound 所述一致,但在 PowerShell 中,单行(管道)命令之间存在差异......
SendCommand1 | ReceiveCommand...
...,并且管道中的命令必须支持管道输入,然后所有代码都在一行上。
SomeCodedCommand;SomeOtherCodedCommand
分号表示每个块都独立于其他块。
文件在下载时的呈现方式可能与文件提供者有关,而不一定与 PowerShell 有关。
确定这一点的方法之一是不下载,而只是检查网站页面提供的内容。使用浏览器开发人员工具访问该网站,看看那里有什么。
因为我们无权访问你正在使用的文件(顺便说一下,这看起来很可疑)通过您正在显示的网站,您应该尝试另一个网站和文本文件进行验证。
例如,该站点的文本文件在我的一个独立测试系统上按预期运行。
$url = 'https://lists.evolt.org/archive/Week-of-Mon-20020408.txt'
Invoke-WebRequest $url -OutFile 'C:\Temp\Week-of-Mon-20020408.txt'
Get-Content -Path 'C:\Temp\Week-of-Mon-20020408.txt'
或者这个样本...
$url = 'https://filesamples.com/samples/document/txt/sample1.txt'
Invoke-WebRequest $url -OutFile 'C:\Temp\sample1.txt'
Get-Content -Path 'C:\Temp\sample1.txt'