2017-12-15 3 views
-1

PowerShell 스크립트에서 XML 파일의 각 줄을 읽고 싶습니다. XML 파일의 Get-Content 이후에, 나는 각 라인 요소를 읽기 위해 foreach 문을 사용했다. 그것은 작동하지 않았습니다. XML 파일의 각 행을 읽으려면 어떻게해야합니까? XML 파일의 각 줄 읽기

Test.xml

:

<?xml version="1.0" encoding="utf-8"?> 
<Install-Plan> 
    <ADSetup> ... </ADSetup> 
    <SQLSetup> 
     <SqlServerName>ServerName</SqlServerName> 
     <SqlVersion>SQL2014</SqlVersion> 
     <InstanceName>MSSQLSERVER</InstanceName> 
     <SqlInstall>TRUE</SqlInstall> 
     <SqlClientInstall>TRUE</SqlClientInstall> 
     <RSInstall>TRUE</RSInstall> 
     ... 
    </SQLSetup> 
</Install-Plan> 

PowerShell을 :

[xml]$XmlData = Get-Content test.xml -ErrorAction Stop 
$Config = $xmlData.SelectNodes("//Install-Plan"); 
$uConfigFile = $Config.CommonConfig.SQLSetup 
foreach ($uconfigval in $uConfigFile) { 
    switch ($uconfigval[0]) { 
     "$SQLServerData.SQLSetup.Sqlserver" {$uSQL_SERVER_NAME = $uconfigVal.Trim()} 
     "$SQLServerData.SQLSetup.SqlVersion" {$uSQLVERSION = $uconfigVal[1].Trim()} 
     ... 
    } 
+2

귀하의 질문은 매우 모호하고 실제 포함되어 있지 않습니다 그래서 우리는 당신이 무엇을 어떻게 시도하는지 전혀 모릅니다. 정말로 [How to Ask] (http://stackoverflow.com/questions/how-to-ask)를 읽어야합니다. –

+0

여기에 코드를 추가하십시오. 당신이 지금까지 시도한 건 뭐든간에. – Billa

+0

xml의 SqlSetup 섹션에 대해서만 신경 쓰고 배열 변수에 동일한 내용을 읽고 foreach를 각 행의 변수 uconfigval에 입력하고 각 변수에 할당하려고했습니다. – Jyothi

답변

0

당신이 노드 <CommonConfig>이없는 게시 된 샘플 XML, 그래서 $uConfigFile = $Config.CommonConfig.SQLSetup는 빈 결과를 생성합니다. 또한 귀하의 switch 명세서의 변수 및 조건은 완전히 해제되어 있습니다.

foreach ($node in $xmlData.SelectNodes('/Install-Plan/SQLSetup/*')) { 
    switch ($node.Name) { 
     'SqlServerName' { $uSQL_SERVER_NAME = $node.InnerText.Trim() } 
     'SqlVersion' { $uSQLVERSION = $node.InnerText.Trim() } 
     ... 
    } 
} 

또는 (아마도 더 나은) 개별 변수보다는 해시 테이블을 채우기 : 당신이 실제로 수행 할 작업을

이 같은 것입니다

$cfg = @{} 
foreach ($node in $xmlData.SelectNodes('/Install-Plan/SQLSetup/*')) { 
    $cfg[$node.Name] = $node.InnerText.Trim() 
}