2014-12-17 16 views
5

Sadece bir yürütülebilir dosyanın (bir dosya) md5 toplamını hesaplayan bir powershell komut dosyası oluşturmaya çalışıyorum.Null değerli bir ifade üzerinde bir yöntem çağıramıyorsunuz

Benim .ps1 komut dosyası: Aşağıdaki hatayı alıyorsunuz benim komut dosyası çalıştıran üzerine

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

: Anladığım kadarıyla

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 

, bu hata komut bir şeyler yapmaya çalışırken, ancak başka demektir komut dosyasının bir kısmı, komut dosyasının ilk bölümünün düzgün çalışmasına izin verecek herhangi bir bilgi içermez. Bu durumda, $hash. Çıkışlar Unrestricted.

Get-ExecutionPolicy çıkışlar.

Bu hata neden oluyor?
Boş değerli ifadem tam olarak nedir?

Herhangi bir yardım için teşekkür ederiz. Bu önemsiz ve eğer araştırmam devam ederse özür dilerim.


Referanslar:

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

How to get an MD5 checksum in PowerShell

+2

nedir '$ md5' tanımlanan bu durum sağlar? Bu değişken, gösterdiğiniz kodda değil mi? Gördüğümden null bu – Matt

+1

Bunu nasıl özledim, bilmiyorum. Hızlı cevap için teşekkürler Matt. Kodum şimdi nesneyi ekledikten sonra mükemmel bir şekilde çalışıyor. '$ md5 = new-object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider' – Ben

+0

Olası çoğaltılabilir [Null değerli bir ifadede bir yöntemi çağıramazsınız - genel] (http://stackoverflow.com/questions/31335195/you -canlama-çağrı-bir-on-bir-null değerli ifade-genel) –

cevap

10

Bunun için basit cevap şu ilan edilmemiş (null) değişken olması. Bu durumda, $md5. Yorumlarınız itibaren bu kodu var olmayan bir yöntem yürütmeye çalışıyoruz çünkü hata olduğunu

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

başka bir yerde ilan edilmesi için gerekli koydu. $md5.ComputeHash() arasında

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() sıfır değerli ifade edildi. Anlamsız yazarak aynı etkiyi yaratacaktır. Varsayılan olarak

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 onun StrictMode

When Set-StrictMode is off, uninitialized variables (Version 1) are assumed to have a value of 0 (zero) or $Null, depending on type. References to non-existent properties return $Null, and the results of function syntax that is not valid vary with the error. Unnamed variables are not permitted.

+3

simit sevdim! – Gareth

İlgili konular