簡體   English   中英

Powershell“無法索引到 null 數組”錯誤僅發生在 function 中

[英]Powershell “cannot index into a null array” error occurs within a function only

當我嘗試運行我創建的用於匯總流量的 function 時,出現以下錯誤。 奇怪的是,當我自己運行這段代碼(不調用函數)時,它運行良好。

當我調用 function 時,我注意到了問題是當我嘗試使用索引時(例如:$_[1])

Cannot index into a null array.
At line:13 char:79
+         $sumhumanvisits = ($humanvisits[0..($humanvisits.Length)] | foreach { $_ ...
+                                                                               ~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NullArray

Cannot index into a null array.
At line:16 char:73
+         $sumbotvisits = ($botvisits[0..($botvisits.Length)] | foreach { $_[1]} | ...
+                                                                         ~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NullArray

代碼是這個

function Get-incapTraffic-90Days ($site_id,$id,$key){

        #Incapsula visits in last 90 days
        $r2 = Invoke-WebRequest ("https://my.incapsula.com/api/stats/v1?api_id=" + $id + "&api_key=" + $key + "&time_range=last_90_days&site_id=" + $site_id + "&stats=visits_timeseries") -Method Post
        $visits = $r2.Content | ConvertFrom-Json

        $humanvisits = @(($visits.visits_timeseries | Where-Object {$_.id -match "api.stats.visits_timeseries.human"} | Select-Object data).data)
        #$humanvisits = $visits.visits_timeseries[0].data
        $botvisits = @(($visits.visits_timeseries | Where-Object {$_.id -match "api.stats.visits_timeseries.bot"} | Select-Object data).data)
        #$botvisits = $visits.visits_timeseries[1].data

        #Summarize Human visits
        $sumhumanvisits = ($humanvisits[0..($humanvisits.Length)] | foreach { $_[1]} | measure -Sum).Sum

        #Summarize Bot visits
        $sumbotvisits = ($botvisits[0..($botvisits.Length)] | foreach { $_[1]} | measure -Sum).Sum


        if (($sumhumanvisits -gt 0) -and ($sumbotvisits -gt 0)){

            $traffic = $sumhumanvisits.ToString() + " Human + " + $sumbotvisits + " Bots Traffic"
        }
        elseif($sumhumanvisits -gt 0){

            $traffic = ($sumhumanvisits.ToString() + " Human traffic")

        }
        elseif($sumbotvisits -gt 0){

            $traffic = ($sumbotvisits.ToString() + " Bot traffic")
        }
        else{

            $traffic = "No traffic"
        }
        Return $traffic
}

變量 $humanvisits 上的數據存儲如下。 我只需要總結小的價值。

 1564531200000 69 1571788800000 145 1565049600000 229 1569196800000 249 1569456000000 156 1568419200000 114 1567641600000 165

我認為您收到此錯誤是因為您使用的是 regex -match運算符,但您沒有轉義要匹配的字符串中的點。

嘗試:

$reHuman = [regex]::Escape("api.stats.visits_timeseries.human")
$reBot   = [regex]::Escape("api.stats.visits_timeseries.bot")
$humanvisits = @(($visits.visits_timeseries | Where-Object {$_.id -match $reHuman} | Select-Object data).data)
$botvisits = @(($visits.visits_timeseries | Where-Object {$_.id -match $reBot} | Select-Object data).data)

我發現了這個問題。

我將參數傳遞給用逗號分隔的函數(菜鳥錯誤),對此感到抱歉。

function 將無法索引到 null 數組錯誤,因為搜索沒有將值作為錯誤的參數返回。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM