您可以創建一段腳本,它可以工作一段時間,然後突然變爲「您無法在空值表達式上調用方法」或「在該對象上找不到屬性的屬性名稱」,驗證屬性是否存在並可以設置。「這是什麼意思?您無法調用空值表達式的方法 - 一般
回答
這是「空指針異常」的Powershell版本。每次嘗試查詢顯示爲空的變量時都會出現此異常。要確定哪個變量是空的,哪裏,你需要讀取堆棧軌跡和該行中的行/符號號。舉例:
You cannot call a method on a null-valued expression.
At E:\temp\testsest.ps1:35 char:12
+ If($Search.value() -contains $SearchString)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
讓我們來解析錯誤信息。首先,在這個問題的標題中有一個措詞。如果您要用這個措辭提出問題,您將得到一組由StackOverflow提出的類似問題。但是錯誤描述中有更多。第二行顯示生成此異常的表達式的第一個字符的腳本,行和字符編號。在這裏,請求$Search.value()
查詢它是否爲-contains $SearchString
。波浪下劃線將表達全部分開,但正確的方式僅強調$Search.value()
。接下來,有一個CategoryInfo
和FullyQualifiedErrorId
,後者說「空值調用方法」,省略「指針」或「變量」。
現在,我們來調試消息。在這裏,即將被調用的唯一方法是value()
,這意味着$Search
等於null。因此,我們需要從腳本的第35行開始向上尋找一個值,該值最後被分配給所討論的變量。如果與搜索的字符串不匹配,此特定腳本對Range.Find()
的查詢返回null。摘錄如下:
$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $true
$ExcelWorkBook = $Excel.Workbooks.Open($ExcelPath)
$ExcelWorkSheet = $Excel.WorkSheets.item("$location")
$Range = $ExcelWorkSheet.Range("A1").EntireColumn
$Search = $Range.find($user) # <<< here we get null
If($Search.value() -contains $user)
因此,我們發現我們在哪裏收到null。
補救辦法各不相同,但都包括對照$null
的支票。在這種情況下,檢查$Search
爲空就足夠了,如果它確實爲null,則返回「Nothing found」。這可能不是那麼簡單,可能有更多的結構可能爲空,如在$a.b.c.someMethod()
中 - 此處爲$a
,$a.b
或$a.b.c
爲空,因此您需要檢查所有結果。還有一種情況是,返回一個複雜的結構,並且預期在某個字段中具有值,但該字段未填充,因此嘗試使用該字段的值會產生異常。
道德是:如果您收到一個關於「無效值」的例外說法,您並沒有預料到返回null的情況,並且您必須在嘗試之前添加對空值(或實際上任何意外)值的檢查使用結果。
- 1. Powershell:無法調用空值表達式的方法錯誤
- 2. 一般使用方法LINQ表達式
- 3. VSTS NuGet步驟恢復錯誤:您無法在CallSite.Target(Closure,CallSite,Object,Object)上調用空值表達式的方法
- 4. 在Powershell中添加列時出錯:'您無法調用空值表達式的方法「
- 5. 與Powershell並行發出請求導致「您無法對空值表達式調用方法」
- 6. 無法從另一個類方法調用正則表達式方法
- 7. PowerShell - 如果然後:不能調用一個空值表達式的方法
- 8. 用「where」方法調用的表達式
- 9. 兩種方法表達式之間的一般區別
- 10. 嘲弄一般的方法調用
- 11. QueryOver錯誤:在表達值無法識別方法調用
- 12. 我scprit「你不能叫一個空值表達式的方法」
- 13. 獲取對方法調用者的引用的一般方法?
- 14. 從表達式調用方法
- 15. 一般編程 - 調用非void方法但不使用值
- 16. C# - 空VS 「無法計算表達式」
- 17. 建立一個使用lambda表達式的方法調用
- 18. 無法調用方法'getElementsByTagName'爲空
- 19. 無法調用方法'getElementsByTagName'爲空
- 20. 無法調用方法刪除空
- 21. 獲取無法調用空值的方法「getRange」
- 22. 調試:CXX0030表達式無法計算
- 23. 不管一般的方法將空值排序到底部?
- 24. 一般化的方法
- 25. 表達式樹:調用一個方法與out或ref參數
- 26. 動態創建一個表達式調用方法EntityFunctions.DiffDays
- 27. 爲什麼Excel的「評估」方法是一般表達式評估器?
- 28. 表達 - 無法識別的方法
- 29. 無法調用空
- 30. Powershell調用靜態方法內的表達式輸出