2017-09-15 8 views
0

私はSQL Serverのテーブルから状態平面の座標を取得し、Javaアプリケーションへの入力として機能する連結された100の文字列でオブジェクトを設定しました。PowerShellオブジェクトのテキストにアクセスする。なぜそれが配列に格納されているように見えないのですか?

$key = Invoke-Sqlcmd -Query "SELECT DISTINCT CONCAT('spc,'<spcZone>,',', 
<northing>,',',<easting>, ',',<units>,',',<inDatum>,',',<outDatum>) as 
conversionString FROM <source table>;" -ServerInstance "<server>" -Database 
"<database>" 

結果は配列に次のようになり100の文字列になります。私は、NOAAのgtkのJavaアプリケーションを使用して、変換するすべての100回の観測を介して実行

spc,2402,173099.419,503626.812,m,NAD83(2011),NAD83(2011) 

$result = FOREACH ($k in $key.conversionString) 
{ 
java -Dparms="$k" -jar H:\gtk\jtransform_thin.jar 
} 

1つの観測値の出力は次のようになります。

{ 
"ID":"1489004917960", 
"nadconVersion":"5.0", 
"srcLat":"40.0000000000", 
"srcLatDms":"N400000.000000", 
"srcLon":"-80.0000000000", 
"srcLonDms":"W0800000.000000", 
"destLat":"40.0000000000", 
"destLatDms":"N400000.000000", 
"destLon":"-80.0000000000", 
"destLonDms":"W0800000.000000", 
"sigLat":"0.000000", 
"sigLon":"0.000000", 
"srcEht":"100.000", 
"destEht":"100.000", 
"sigEht":"0.000", 
"srcDatum":"NAD83(1986)", 
"destDatum":"NAD83(1986)", 
"spcZone":"PA S-3702", 
"spcNorthing_m":76470.584, 
"spcEasting_m":407886.482, 
"spcNorthing_usft":250887.241, 
"spcEasting_usft":1338207.566, 
"spcNorthing_ift":250887.743, 
"spcEasting_ift":1338210.243, 
"spcConvergence":"-01 27 35.224524", 
"spcScaleFactor":0.99999024, 
"spcCombinedFactor":0.99997455, 
"utmZone":"UTM Zone 17", 
"utmNorthing":4428236.065, 
"utmEasting":585360.462, 
"utmConvergence":"00 38 34.174932", 
"utmScaleFactor":0.9996897, 
"utmCombinedFactor":0.99967402, 
"x":849623.061, 
"y":-4818451.818, 
"z":4078049.851, 
"usng":"17TNE8536028236" 
} 

私が遭遇している問題は、格納された$結果オブジェクトの返されたフィールドにアクセスすることです。 $ resultと入力します。 100回すべての観測からすべてのテキストを返します。私が$ result [1]とタイプすると、最初の観測のIDだけが得られます。私が$ result.IDと入力すると返されるものはありません。私が取得しようとしていますどこ

これは、次のとおりです。

$add = foreach ($r in $result) 
{ 
"INSERT INTO SPCtoLatLong VALUES ('" + $r.spcZone + "','" + 
$r.spcNorthing_usft + "','" + $r.spcEasting_usft + "','" + $r.srcLat + "','" 
+ $r.srcLon + "','" + $r.srcDatum + "','" + $r.destDatum + "')" + $nl 
} 

私はPowerShellで2週間の経験を持って、私が間違って何をやっていますか?何か助けてくれてありがとう。

+0

Hey Travis。私は$ resultがどんなタイプであるかを知ることができません。 $結果を教えてください| Get-Memberが吐き出す –

+0

@ JohnDonnelly文字列配列です。これは、外部プログラムから出力をキャプチャするときに起こります。 – TheIncorrigible1

答えて

2

外部アプリケーションからの標準出力は、文字列配列(1行= 1列挙型)として返されます。戻りデータをオブジェクトに解析する必要があります。PowerShell 5+を使用している場合は、ConvertFrom-Stringを使用してこれらのオブジェクトのテンプレートを作成し、出力に変換して変換することができます。

しかし!あなたのデータは、整形式の方法に基づいて、私は次のようにします:

$Expected = $Result | ConvertFrom-Json 

PS C:\> $Expected.GetType() 
PSCustomObject 
+0

ありがとう...私はそれを理解したと同時にこのポップアップを見た!私は本当にあなたの助けに感謝します。 – TravisLong

0

私はJavaアプリケーションの実行コンポーネントにこれを追加する必要があり、この問題を解決するために考え出しました。

$result = FOREACH ($k in $key.conversionString) 
{ 
java -Dparms="$k" -jar H:\gtk\jtransform_thin.jar | ConvertFrom-Json 
} 
関連する問題