私が間違っていることを理解できず、誰かが正しい方向に向けることを願っています。アレイから別のアレイにオブジェクトを1つ追加する
私はオブジェクトの配列を繰り返し処理しようとしていますが、何かが真実であれば、そのオブジェクトを1つのオブジェクトとして自分の配列に追加したいオブジェクトの元の配列)。私は新しい配列に情報を追加しているようですが、newarray [0]を実行して新しい配列を参照すると、オブジェクト全体ではなくオブジェクトの最初の項目が得られます。
問題は、この行と一緒に表示されます。
$global:MachinesInAD += $global:MachineObject
csvファイル内のデータは、マシンのホスト名、マシンのIPアドレス、エラーコード、およびエージェントIDです。
MACHINENAME、10.10.10.10、ERROR101、123456FF
Function ReadExcelReport(){
$global:Report = "C:\TEMP\Tools\Scripts\agents.csv"
$Unresponsive = import-csv $global:Report | Where-Object {($_.State -eq "QUEUED" -or $_.State -eq "FAILED")} #Add items to array from spreadsheet where the state is equal to queued or failed
$global:UnresponsiveMachineInfo = @()
foreach ($item in $Unresponsive){
$global:UnresponsiveMachineInfo += ,@($item.'Hostname', $item.'IP Address',$item.'Error',$item.'Agent Cert ID') #Build the object - Add the following columns hostname, ip address, error, agent cert id
}
ADCheck
}
Function ADCheck(){
$Machine = $null
$global:MachinesInAD = @()
$global:MachinesNotInAD = @()
$global:MachineObject = New-Object system.object
$global:MachineObject = $Null
$global:MachinesInAD = $null
$global:UnresponsiveMachineInfo | foreach-object { #Iterate through each object in the array
$global:MachineObject = $_
$Machine = $_[0] #Set Machine to the hostname AKA the first element in the array for the current ($_) object (objects defined above)
try{
write-host "Checking A.D. for: $Machine"
if (Get-ADComputer $Machine){ #Check to see if the machine is in A.D.
write-host "Found $Machine in A.D." -ForegroundColor Green
$global:MachinesInAD += $global:MachineObject
}
}
catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException] { #If the machine was NOT in A.D. catch the error it creates and...
write-warning -message "Machine $Machine not found in A.D."
$global:MachinesNotInAd += $MachineObject
}
}
}
[mcve]にすることはできますか?一見したところから少なくとも3つの異なる場所に追加していますが、どこに問題があるのかは明確ではありません。 – briantist
私はそれを行うでしょう、問題はこの行であるように見えます: "$ global:MachinesInAD + = global:MachineObject" – MrMr
"$ Machine = $ _ [0]"を使ってテスト用のマシン名を取り出します。私は "$ global:MachineObject = $ _"で要素をキャプチャしようとします。真の場合、その要素を "$ global:MachinesInAD + = $ global:MachineObject"という新しい配列に追加します。技術的には、情報は追加されますが、個々の要素ではありません。例えば要素の各項目はそれ自身の要素です。ですから、 "$ global:MachineObject [0]"で完全な要素を参照しようとすると、ホスト名、IP、ErrorCode、およびエージェントIDではなく、ホスト名だけが取得されます。 – MrMr