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-ExecutionPolicy
outputs 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:
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.