2017-01-31 5 views
0

PowerShell DSC를 사용하여 RavenDB에서 복제를 설정하려고하는데 구성을 컴파일하려고 시도 할 때 스크립트 블록에서이 오류가 발생합니다.PowerShell DSC에서 문자열 바꾸기에서 변수를 사용할 때

PSDesiredStateConfiguration \ Node : 문자열 서식 지정 오류 : 입력 문자열의 형식이 잘못되었습니다.

TestScript = { 
    $result = Invoke-WebRequest -Method GET "http://localhost:8080/Databases/Test/Docs/Raven/Replication/Destinations" -UseBasicParsing 

    $ravenSlaves = "{0}".Split(",") 

    foreach($ravenSlave in $ravenSlaves) 
    { 
     if($result -notmatch $ravenSlave) 
     { 
      return $false 
     } 
    } 

    return $true 
} -f ($Node.RavenSlaves) 

그리고 RavenSlaves이 같은 노드 내 ConfigurationData에서 문자열과 같이 정의된다 : 여기

내 스크립트 블록입니다

@{ 
    NodeName = "localhost" 
    WebApplication = "test"    
    Role = "Master server" 
    RavenSlaves = "server1,server2" 
} 

문제는 경우에 연결되어있는 것 같다 I 'foreach을 사용하여 $ravenSlaves 변수를 반복합니다. 왜냐하면 foreach (및 if 내부 foreach) 구성이 컴파일되고 mof 파일이 만들어집니다.

+0

- "{0}"분할 (",")에는 -f 형식 연산자가 필요합니다. – Kiran

+0

@Kiran, 네? 그게 내가 한 짓이 아닌가? 질문에서 제공 한 스크립트 블록을 보면 스크립트의 끝에 "-f ($ Node.RavenSlaves)"를 지정했습니다. 맞지 않아? – user2731951

+0

괜찮 았어 질문의 dsc 부분을 참조하십시오 .... dsc의 스크립트 리소스는 문자열이며 $ using 수정자를 사용하여 외부에서 정의 된 값을 사용할 수 있으므로 $로 테스트 리소스에 ur 해시 테이블을 가져와야 할 수 있습니다. : myhashtable 다음 ravenslaves 키를 나누십시오 – Kiran

답변

0

Kiran은 구성에서 $using 수정자를 사용하는 것에 대한 그의 의견을 통해 올바른 해결책을 제시했습니다.

는이 같은 배열로 노드에서 RavenSlaves 속성을 편집 :

@{ 
    NodeName = "localhost" 
    WebApplication = "test"    
    Role = "Master server" 
    RavenSlaves = @("server1,server2") 
} 

그리고 내가 이렇게 될하기 위해 TestScript - 블록을 변경 :

TestScript = { 
    $result = Invoke-WebRequest -Method GET "http://localhost:8080/Databases/Test/Docs/Raven/Replication/Destinations" -UseBasicParsing 

    $ravenSlaves = $Node.RavenSlaves 

    foreach($ravenSlave in $using:ravenSlaves) 
    { 
     if($result -notmatch $ravenSlave) 
     { 
      return $false 
     } 
    } 

    return $true 

} 

스크립트 컴파일 서버에서 실행되었고 RavenDB의 복제 문서가 정확했습니다.

+0

grt ... $ ravenslaves는 $ using : node.ravenslaves이어야합니다. $ 대신 $ ravenslaves에서 foreach를 사용하여 반복 할 수 있습니다. ravenslaves – Kiran

+0

Thanks @Kiran! 나는 그것이 더 읽기 쉽도록하고 변수를 여러 노드를 사용하여 하나의 노드에 대한 구성에서 여러 곳에 사용하는 것을 피하기 위해 더 나은 방법이라고 생각합니다. 하지만 다른 장점도 있습니까? – user2731951