2017-10-11 22 views
-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 
+0

「*通常backlog []包含6組答覆。*」 - 但在這種情況下,它是'$ null'。那麼定義'$ backlog'在哪裏? – TessellatingHeckler

+0

它被定義爲創建和分配,不是?這是整個腳本(除了將其他五組響應放入積壓檔之外) – Adonalsium

+1

如果這是整個腳本,那麼我將使用「它從未工作」,因爲$ x [0] = 1' hasn'從來沒有一種從頭開始定義變量的有效方法。對於第一個定義,它必須是'$ backlog = $(Get-DFSRBacklog -sourcecomputername:a -destinationcomputername:b -Verbose)4>&1',不帶'[]'。一旦它是一個數組,那麼你可以'[0]'它。 – TessellatingHeckler

回答

0

答:我是個笨蛋。

您需要初始化變量,然後才能將它們視爲數組,即使對於賦值。解決的辦法是在$ backlog [x]賦值的頂部添加$ backlog = 0,0,0,0,0,0。

相關問題