所有
即将失去它 - 这是几小时前的工作。
所以,当我运行这个时,我得到了
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
答案 0 :(得分:1)
答案:我是个笨蛋。
您需要初始化变量,然后才能将它们视为数组,即使是赋值。修复是在$ backlog [x]赋值的顶部添加$ backlog = 0,0,0,0,0,0。