Powershell 不能对空值表达式调用方法

Powershell 不能对空值表达式调用方法,powershell,Powershell,我只是尝试创建一个powershell脚本,用于计算可执行文件(文件)的md5和 My.ps1脚本: $answer = Read-Host "File name and extension (ie; file.exe)" $someFilePath = "C:\Users\xxx\Downloads\$answer" If (Test-Path $someFilePath){ $stream = [System.IO.File]::Open("

我只是尝试创建一个powershell脚本,用于计算可执行文件(文件)的md5和

My.ps1脚本:

$answer = Read-Host "File name and extension (ie; file.exe)"
$someFilePath = "C:\Users\xxx\Downloads\$answer"

If (Test-Path $someFilePath){
                        $stream = [System.IO.File]::Open("$someFilePath",[System.IO.Filemode]::Open, [System.IO.FileAccess]::Read)
                        $hash = [System.BitConverter]::ToString($md5.ComputeHash($stream))
                        $hash
                        $stream.Close()
                        }
Else{
Write-Host "Sorry, file $answer doesn't seem to exist."
}
运行脚本时,我收到以下错误:

You cannot call a method on a null-valued expression.
At C:\Users\xxx\Downloads\md5sum.ps1:6 char:29
+                             $hash = [System.BitConverter]::ToString($md5.Compute ...
+                             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
据我所知,此错误意味着脚本正在尝试执行某些操作,但脚本的另一部分没有任何信息来允许脚本的第一部分正常工作。在本例中,
$hash

获取执行策略
输出
无限制

是什么原因导致此错误?
我的空值表达式到底是什么?

感谢您的帮助。我道歉,如果这是琐碎的,并将继续我的研究


参考资料:


这个问题的简单答案是您有一个未声明的(null)变量。在本例中,它是
$md5
。从注释中,您需要在代码的其他地方声明它

$md5 = new-object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
错误是因为您试图执行一个不存在的方法

PS C:\Users\Matt> $md5 | gm


   TypeName: System.Security.Cryptography.MD5CryptoServiceProvider

Name                       MemberType Definition                                                                                                                            
----                       ---------- ----------                                                                                                                            
Clear                      Method     void Clear()                                                                                                                          
ComputeHash                Method     byte[] ComputeHash(System.IO.Stream inputStream), byte[] ComputeHash(byte[] buffer), byte[] ComputeHash(byte[] buffer, int offset, ...
$md5.ComputeHash()
.ComputeHash()
是空值表达式。输入胡言乱语也会产生同样的效果

PS C:\Users\Matt> $bagel.MakeMeABagel()
You cannot call a method on a null-valued expression.
At line:1 char:1
+ $bagel.MakeMeABagel()
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

默认情况下,PowerShell允许按照其定义进行此操作

当禁用Set StrictMode时,根据类型,假定未初始化变量(版本1)的值为0(零)或$Null。对不存在的属性的引用返回$Null,无效函数语法的结果会随错误而变化。不允许使用未命名的变量


什么是
$md5
?该变量不在您显示的代码中?从我所看到的来看,这是无效的,我不知道我是怎么错过的。谢谢马特的及时回复。添加对象后,我的代码现在运行良好
$md5=新对象-TypeName System.Security.Cryptography.MD5CryptoServiceProvider
的可能副本