2017-09-08 17 views
0

いいえdeviceIdを使用して配列をループする必要があります。すべてがうまく挿入されますが、問題は、配列であり、デバイスIDに結びついているため、objタグがAPIから引き出されないということです。だから私は別のテーブルを作成することを決めましたが、スクリプトが実行されてデバイスIDを取得して挿入することができるので、タグをAPIから引き出し、後で別のテーブルに挿入することができます。問題は、それぞれ別のIDを作成して、最後のIDを挿入するだけで、タグも引っ張られていないことです。助言がありますか? $DeviceIdentifier = $obj.deviceid/$DeviceIdentifier = $Tags.deviceid:あなたは$DeviceIdentifierで1つの値を格納し、両方のループの各パスでpowershellで配列をループすることができません

#For loop giving variables to the objects 
foreach($obj in $Json.devices) 
{ 
    $DeviceIdentifier = $obj.deviceid 
    $DeviceNombre = $obj.deviceName 
    $DomainNombre = $obj.domainName 
    $Description = $obj.description 
    $Tags = $obj.tags 
    $location = $obj.location 
    $Os = $obj.os 


    Write-Host ($obj.devicename) -BackgroundColor White -ForegroundColor red 
    Write-Host ($obj.domainname) -BackgroundColor White -ForegroundColor red 
    Write-Host ($obj.deviceid) -BackgroundColor White -ForegroundColor DarkGreen 
    Write-Host ($obj.tags) -BackgroundColor White -ForegroundColor black 
    Write-Host ($obj.description) -BackgroundColor White -ForegroundColor blue 
    Write-Host ($obj.os) -BackgroundColor White -ForegroundColor DarkBlue 

    #Inserting into MYSQL database 
    $cmd = $connection.CreateCommand() 
    $insert_stmt = "INSERT INTO [dbo].[Tags]([DeviceID],[Device Name],[Domain Name],[Description],[Tags],[Location],[Os]) 
          VALUES ('$DeviceIdentifier','$DeviceNombre', '$DomainNombre','$Description','$tags','$location','$Os')" -replace "\s+"," " 
    $cmd.CommandText = $insert_stmt 
    write-host $insert_stmt -BackgroundColor White -ForegroundColor DarkBlue 
    $cmd.ExecuteNonQuery() 
} 


foreach($Tags in $DeviceIdentifier) 
{ 
    $DeviceIdentifier = $Tags.deviceid 
    $Tags = $obj.tags 

    Write-Host ($obj.deviceid) -BackgroundColor White -ForegroundColor DarkGreen 
    Write-Host ($obj.tags) -BackgroundColor White -ForegroundColor black 

    #Inserting into MYSQL database 
    $cmd = $connection.CreateCommand() 
    $insert_stmt = "INSERT INTO [dbo].[TagsTable]([DeviceID],[Tags]) 
          VALUES ('$DeviceIdentifier','$tags')" -replace "\s+"," " 
    $cmd.CommandText = $insert_stmt 
    write-host $insert_stmt -BackgroundColor White -ForegroundColor DarkBlue 
    $cmd.ExecuteNonQuery() 
} 

$Connection.Close() 

答えて

1

。 2番目のものでは、使用されているコレクションを上書きすることさえできます。

$array = @()でループの前に配列を作成し、ループ内の値を$array += $obj.deviceidで追加する(たとえば)ことができます。

0

正確なアドバイスは何ですか。そのような変数を再利用したり、スコープの問題を避けるためにループの前に配列を定義したりしないでください。それは簡単な修正でなければならないようだ。 2つのループを実行しますが、同じ配列を繰り返し処理し、その配列から2つの異なるテーブルに更新を適用するだけのようです。クールなので、ループの各パスに2つのSQL文を入れてください。また、ループ外で$cmdの作成を移動しています。毎回それを再作成する必要はありません。

$cmd = $connection.CreateCommand() 

#For loop giving variables to the objects 
foreach($obj in $Json.devices) 
{ 
    $DeviceIdentifier = $obj.deviceid 
    $DeviceNombre = $obj.deviceName 
    $DomainNombre = $obj.domainName 
    $Description = $obj.description 
    $Tags = $obj.tags 
    $location = $obj.location 
    $Os = $obj.os 


    Write-Host ($obj.devicename) -BackgroundColor White -ForegroundColor red 
    Write-Host ($obj.domainname) -BackgroundColor White -ForegroundColor red 
    Write-Host ($obj.deviceid) -BackgroundColor White -ForegroundColor DarkGreen 
    Write-Host ($obj.tags) -BackgroundColor White -ForegroundColor black 
    Write-Host ($obj.description) -BackgroundColor White -ForegroundColor blue 
    Write-Host ($obj.os) -BackgroundColor White -ForegroundColor DarkBlue 

    #Inserting into MYSQL database 
    $insert_stmt = "INSERT INTO [dbo].[Tags]([DeviceID],[Device Name],[Domain Name],[Description],[Tags],[Location],[Os]) 
          VALUES ('$DeviceIdentifier','$DeviceNombre', '$DomainNombre','$Description','$tags','$location','$Os')" -replace "\s+"," " 
    $cmd.CommandText = $insert_stmt 
    write-host $insert_stmt -BackgroundColor White -ForegroundColor DarkBlue 
    $cmd.ExecuteNonQuery() 

    Write-Host ($obj.deviceid) -BackgroundColor White -ForegroundColor DarkGreen 
    Write-Host ($obj.tags) -BackgroundColor White -ForegroundColor black 

    #Inserting into MYSQL database 
    $insert_stmt2 = "INSERT INTO [dbo].[TagsTable]([DeviceID],[Tags]) 
          VALUES ('$DeviceIdentifier','$tags')" -replace "\s+"," " 
    $cmd.CommandText = $insert_stmt2 
    write-host $insert_stmt2 -BackgroundColor White -ForegroundColor DarkBlue 
    $cmd.ExecuteNonQuery() 
} 

$Connection.Close() 
関連する問題