PowerShell命令执行报错:无法对空值表达式调用方法问题咨询
为什么单独执行PowerShell命令会出现“无法对空值表达式调用方法”错误?
这问题的核心原因其实很直白——你每次执行的powershell -Command都是一个独立的PowerShell进程,进程之间的变量是完全隔离的,根本不会共享!
咱们拆解下你执行的命令逻辑:
- 第一条命令里定义的
$Url,只在那一个临时的PowerShell进程里有效,进程结束后这个变量直接就消失了 - 第二条的
$Path同理,也是只存在于自己的进程空间里,和其他进程没有任何关联 - 第三条创建的
$WebClient对象,同样在进程结束后就被系统销毁了 - 到了最后一条命令,全新启动的PowerShell进程里根本没有
$WebClient、$url、$path这些变量,自然都是空值,调用DownloadFile方法时就会触发“无法对空值表达式调用方法”的报错
给你两种靠谱的解决办法:
把所有命令合并到同一个
powershell -Command里,用分号分隔,这样所有变量都在同一个进程里生效(顺便帮你补上了缺失的$CurrentDate变量定义,不然文件名里的占位符也会是空的):C:\Users\kevin>powershell -Command "$CurrentDate = Get-Date -Format 'yyyyMMdd'; $Url = 'http://shared4.info/psequotes/files/2021/stockQuotes_$CurrentDate.csv'; $Path = 'C:\Users\kevin\Desktop\stockQuotes_$CurrentDate.csv'; $WebClient = New-Object System.Net.WebClient; $WebClient.DownloadFile($Url, $Path)"写成PowerShell脚本文件(
.ps1),逻辑更清晰,也方便后续修改维护:- 新建一个
DownloadStockQuotes.ps1文件,内容如下:$CurrentDate = Get-Date -Format 'yyyyMMdd' $Url = "http://shared4.info/psequotes/files/2021/stockQuotes_$CurrentDate.csv" $Path = "C:\Users\kevin\Desktop\stockQuotes_$CurrentDate.csv" $WebClient = New-Object System.Net.WebClient $WebClient.DownloadFile($Url, $Path) - 在CMD里执行这个脚本:
C:\Users\kevin>powershell -File "C:\Users\kevin\Desktop\DownloadStockQuotes.ps1"
- 新建一个
额外提一句:现在PowerShell更推荐用Invoke-WebRequest替代老旧的WebClient,下载代码可以换成更简洁的:
Invoke-WebRequest -Uri $Url -OutFile $Path
内容的提问来源于stack exchange,提问作者ms mavie
相关产品推荐
相关产品推荐

