Vous ne pouvez pas appeler une méthode sur une expression de valeur nulle
j'essaie simplement de créer un script powershell qui calcule la somme md5 d'un exécutable (un fichier).
Mon .ps1 script:
$answer = Read-Host "File name and extension (ie; file.exe)"
$someFilePath = "C:UsersxxxDownloads$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."
}
Lors de l'exécution de mon script j'ai l'erreur suivante:
You cannot call a method on a null-valued expression.
At C:UsersxxxDownloadsmd5sum.ps1:6 char:29
+ $hash = [System.BitConverter]::ToString($md5.Compute ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
à ma connaissance, cette erreur signifie que le script tente de faire quelque chose, mais une autre partie du script n'a aucune information permettant à la première partie du script de fonctionner correctement. Dans ce cas, $hash
.
Get-ExecutionPolicy
sorties Unrestricted
.
Quelle est la cause de cette erreur?
Quel est exactement mon null expression de valeur?
Toute aide est appréciée. Je m'excuse si c'est insignifiant et je vais poursuivre mes recherches.
Références:
http://blogs.technet.com/b/heyscriptingguy/archive/2013/03/27/troubleshoot-the-invokemethodonnull-error-with-powershell.aspx
Comment obtenir un checksum MD5 en PowerShell
1 réponses
la réponse simple pour celle-ci est que vous avez une variable non déclarée (nulle). Dans ce cas, il est $md5
. Du commentaire que vous avez mis cela devait être déclaré ailleurs dans votre code
$md5 = new-object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
L'erreur est parce que vous tentez d'exécuter une méthode qui n'existe pas.
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, ...
.ComputeHash()
$md5.ComputeHash()
était l'expression de valeur nulle. Taper du charabia créerait le même effet.
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 by la valeur par défaut permet à ceci d'arriver comme défini son StrictMode
Quand Set-StrictMode est désactivé, les variables non initialisées (Version 1) sont supposés avoir une valeur de 0 (zéro) ou $Null, selon le type. Les références aux propriétés inexistantes retournent $ Null, et les résultats de la syntaxe de la fonction qui n'est pas valide varient avec l'erreur. Les variables sans nom ne sont pas autorisées.