U kunt niet bellen een methode op een nul gewaardeerd expressie

Ik ben gewoon proberen om een ​​powershellmanuscript die de md5 som van een uitvoerbaar (een bestand) berekent te maken.

Mijn .ps1 script:

$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."
}

Bij het runnen van mijn script ontvang ik de volgende fout:

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

Om mijn begrip, deze fout betekent dat het script is een poging om iets te doen, maar een ander deel van het script bevat geen informatie aan het eerste deel van het script om werk goed mogelijk te maken te hebben. In dit geval, $hash.

Get-ExecutionPolicyoutputs Unrestricted.

Wat is de oorzaak van deze fout?
Wat is nu precies mijn null gewaardeerd uitdrukking?

Alle hulp wordt gewaardeerd. Mijn excuses als dit is triviaal en zal mijn onderzoek voort te zetten.


Referenties:

http://blogs.technet.com/b/heyscriptingguy/archive/2013/03/27/troubleshoot-the-invokemethodonnull-error-with-powershell.aspx

Hoe krijg ik een MD5-controlesom in PowerShell


Antwoord 1, autoriteit 100%

Het simpele antwoord hiervoor is dat je een niet-gedeclareerde (null) variabele hebt. In dit geval is dat $md5. Uit de opmerking die u plaatste, moest dit elders in uw code worden aangegeven

$md5 = new-object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider

De fout was omdat u een methode probeert uit te voeren die niet bestaat.

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, ...

De .ComputeHash()van $md5.ComputeHash()was de expressie met nullwaarde. In wartaal typen zou hetzelfde effect hebben.

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 laat dit standaard gebeuren zoals gedefinieerd in de StrictMode

Als Set-StrictModeis uitgeschakeld, wordt aangenomen dat niet-geïnitialiseerde variabelen (versie 1) een waarde van 0 (nul) of $Null hebben, afhankelijk van het type. Verwijzingen naar niet-bestaande eigenschappen retourneren $Null en de resultaten van de functiesyntaxis die niet geldig is, variëren met de fout. Niet-benoemde variabelen zijn niet toegestaan.

Other episodes