在赋值时无法索引到空数组?

时间:2017-10-11 18:29:17

标签: powershell

所有

即将失去它 - 这是几小时前的工作。

所以,当我运行这个时,我得到了

Cannot index into a null array.
At line:3 char:15
+ $backlog[0]=$(Get-DFSRBacklog -sourcecomputername:ts-fileshares2 -destinationcom ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NullArray

问题是,当我在这里和其他地方搜索时,我发现人们在向变量分配空数组时遇到问题。没有分配给数组。

下面是大部分代码(我针对多个文件共享运行此代码,懒得在六行中更改服务器名称。通常backlog []包含6组回复。

clear-host
$backlog[0]=$(Get-DFSRBacklog -sourcecomputername:a -destinationcomputername:b -Verbose) 4>&1

#$collection is one array result. This will be easier to split out into by-server later.
[int]$total = 0
foreach ($collection in $backlog)
{
    $collection | ForEach-Object -Process {
        if ($_.getType().FullName.equals("System.Management.Automation.VerboseRecord"))
        {
            #$_ | Get-Member
            #Write-Host $_.Message
            if ($_.Message -like "*has a backlog*")
            {
                #testing write-host $_.Message.split(" ")[12]
                $total += [convert]::ToInt32($_.Message.split(" ")[12],10)
            }
        }
    }
}
#testing Write-Host $total
[Environment]::SetEnvironmentVariable("TOTALFILESHAREBACKLOG",$total, "Machine")
#testing Write-Host $env:TOTALFILESHAREBACKLOG

正如我所说,这是几个小时前的工作。不确定我是否有一些奇怪的变量卡住,但这是在prod服务器上(无法从非prod服务器获取DFSR积压)所以我不想重启整个服务器。

这是一个签名的PowerShell脚本,它按计划运行(zabbix稍后会提取env变量进行报告),​​但这不应该影响它。我在这个工作和不工作之间唯一改变的是移动保存这个文件的地方。

Powershell Get-DFSRBacklog总是会返回一个值或打印错误,所以不是这样。

即使执行$ backlog [0] = 1也会抛出错误。

P.P.S。

Name                           Value                                                                                 
----                           -----                                                                                 
PSVersion                      4.0                                                                                   
WSManStackVersion              3.0                                                                                   
SerializationVersion           1.1.0.1                                                                               
CLRVersion                     4.0.30319.42000                                                                       
BuildVersion                   6.3.9600.17400                                                                        
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}                                                                  
PSRemotingProtocolVersion      2.2 

1 个答案:

答案 0 :(得分:1)

答案:我是个笨蛋。

您需要初始化变量,然后才能将它们视为数组,即使是赋值。修复是在$ backlog [x]赋值的顶部添加$ backlog = 0,0,0,0,0,0。