これについて - これは就業時間前です。私はこれを実行すると、私はここで検索するとき
は、だから私は、
Cannot index into a null array.
At line:3 char:15
+ $backlog[0]=$(Get-DFSRBacklog -sourcecomputername:ts-fileshares2 -destinationcom ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArray
発行されて取得し、他の場所で、私は、変数TO NULL配列を割り当てる問題を作る人を見つけます。配列に割り当てません。以下は
は(私は、複数のファイル共有に対して、6行にサーバー名を変更するのが面倒、これを実行しているコードの大部分である。通常、バックログが[]の回答の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
私が言ったように、これは作業時間前です。私は変わった変数が残っているかどうかはわかりませんが、これはプロダクトサーバ(プロダクトサーバ以外から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
作成され、割り当てられているので、定義されていますか?これはスクリプトの全体です(バックログに5つの他の回答セットがあるのとは別に) – Adonalsium
それがスクリプト全体であれば、 '$ x [0] = 1' hasn '変数をゼロから定義する有効な方法でした。最初の定義では、 '$]($ DFSRBacklog -sourcecomputername:a -destinationcomputername:b -Verbose)4>&1'と' [] 'を指定する必要があります。いったん配列になると、それを '[0]'できます。 – TessellatingHeckler