2017-09-15 1 views
0

SQL Server 테이블에서 상태 평면 좌표를 가져 와서 Java 응용 프로그램에 대한 입력으로 사용할 100 개의 연결된 문자열로 개체를 채 웁니다.PowerShell 개체의 텍스트에 액세스. 왜 그것이 배열에 저장된 것처럼 보이지 않습니까?

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

내가 다음 NOAA의 GTK 자바 응용 프로그램을 사용하는 모든 100 개 관찰을 통해 실행 변환 할 :

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

결과는 배열에 다음과 같이 100 개 문자열 될 것

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

하나의 관측치에 대한 반환 된 출력은 다음과 같습니다.

{ 
"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를 입력하면 반환 된 항목이 없습니다. 내가 잘못 뭐하는 거지, 난 단지 PowerShell의 이주 경험이

$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 
} 

:

이 내가하려고 노력하고 어디? 어떤 도움을 주셔서 감사합니다.

+0

안녕하세요. 트래비스. 나는 $ result가 어떤 타입인지 알 수 없다. $ 결과를 알려주십시오. Get-Member는 침을 뱉습니다. –

+0

@ JohnDonnelly 문자열 배열입니다. 외부 프로그램에서 출력을 캡처하면 이러한 현상이 발생합니다. – TheIncorrigible1

답변

2

외부 응용 프로그램의 표준 출력은 문자열 배열 (한 줄 = 하나의 열거 형)로 반환됩니다. 반환 데이터를 개체로 파싱하거나 PowerShell 5 이상을 사용하는 경우 ConvertFrom-String을 사용하여 이러한 개체의 템플릿을 만들고 변환하여 출력 할 수 있습니다.

하지만! 데이터가 잘 형성 방법에 따라, 나는 다음을 수행합니다 :

$Expected = $Result | ConvertFrom-Json 

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

고마워 ... 내가 알아 낸 바로 그 순간에이 팝업이 보였다! 도와 주셔서 정말 고맙습니다. – TravisLong

0

난 당신이 자바 응용 프로그램 실행 구성 요소에이를 추가해야이 문제를 해결하기 위해 알아 냈어.

$result = FOREACH ($k in $key.conversionString) 
{ 
java -Dparms="$k" -jar H:\gtk\jtransform_thin.jar | ConvertFrom-Json 
} 
관련 문제