arrays - Powershell“无法索引到空数组”错误仅在函数内发生
问题描述
当我尝试运行我创建的用于汇总流量的函数时,出现以下错误。奇怪的是,当我自己运行这段代码(不调用函数)时,它运行良好。
我在调用函数时注意到问题是当我尝试使用索引时(例如:$_[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
解决方案
我认为您收到此错误是因为您使用的是正则表达式-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)
推荐阅读
- react-native - 如何在 react-native 中修复“CredentialsError:配置中缺少凭据”(aws-sdk)
- laravel - 运行迁移后填充表
- docker - init: true 不转发信号
- python-3.x - 如何有条件地从多个 Python 字典中删除键。条件是 (Value <= time.time()- 15)
- php - $(document).ready(function ()... 只处理表格中的一列?
- sql - MariaDB 中的多列索引在 MySQL 中是否也存在此属性?
- angular - 如何使用 angular/ionic 编译的 ios 应用程序将自定义标签打印到 Dymo Labelwriter?
- pandas - 在创建 MultiIndex 列时合并 Pandas DataFrames
- git - 合并(子模块?)到现有文件夹
- javascript - 如何在响应中发送多个图像?