-1
即將失去它 - 這是工作時間前。
所以,當我運行此我得到
Cannot index into a null array.
At line:3 char:15
+ $backlog[0]=$(Get-DFSRBacklog -sourcecomputername:ts-fileshares2 -destinationcom ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArray
問題是,當我搜索在這裏和其他地方,我找人做分配空數組變量的問題。不分配給數組。
下面是大部分的代碼(我正在這對多種文件共享,懶得改在半年線的服務器名稱。通常積壓[]包含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
「*通常backlog []包含6組答覆。*」 - 但在這種情況下,它是'$ null'。那麼定義'$ backlog'在哪裏? – TessellatingHeckler
它被定義爲創建和分配,不是?這是整個腳本(除了將其他五組響應放入積壓檔之外) – Adonalsium
如果這是整個腳本,那麼我將使用「它從未工作」,因爲$ x [0] = 1' hasn'從來沒有一種從頭開始定義變量的有效方法。對於第一個定義,它必須是'$ backlog = $(Get-DFSRBacklog -sourcecomputername:a -destinationcomputername:b -Verbose)4>&1',不帶'[]'。一旦它是一個數組,那麼你可以'[0]'它。 – TessellatingHeckler