2017-01-31 5 views
0

Ich versuche, Replikation in RavenDB mit PowerShell DSC einzurichten, aber ich bekomme diesen Fehler in TestScript Skriptblock, wenn ich versuche, die Konfiguration zu kompilieren:"Fehler beim Formatieren der Zeichenfolge" beim Verwenden der Variablen aus Zeichenfolge ersetzen in PowerShell DSC

PSDesiredStateConfiguration \ Node: Fehler beim Formatieren einer Zeichenfolge: Die Eingabezeichenfolge hatte kein richtiges Format.

Hier ist meine Skript:

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) 

Und RavenSlaves wie ein String in meiner Configuration für die Knoten wie folgt definiert ist: scheint

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

Das Problem beim Anschluss an I benutze die foreach um über die $ravenSlaves Variable zu iterieren, denn wenn ich die foreach (und die if) entferne die foreach) die Konfiguration kompiliert und die MOF-Datei erstellt.

+0

dies - "{0}". Split (",") benötigt den Operator -f-Format – Kiran

+0

@Kiran, ja? Habe ich das nicht getan? Wenn Sie sich den Skriptblock anschauen, den ich in der Frage angegeben habe, habe ich am Ende des Skripts "-f ($ Node.RavenSlaves)" angegeben. Ist das nicht richtig? – user2731951

+0

ok habe den dsc-Teil der Frage nicht gesehen .... die Skript-Ressource in dsc ist eine Zeichenkette und erlaubt es, Werte zu verwenden, die außerhalb des $ using-Modifikators definiert sind. Vielleicht müssen Sie also Ihre Hashtabelle in die Testressource als $ using importieren : myhashtable dann tun Sie die Spaltung auf der Rabenklave Schlüssel – Kiran

Antwort

0

Kiran führte mich durch seinen Kommentar zur Verwendung des Modifikators $using in der Konfiguration zur richtigen Lösung.

Ich habe das RavenSlaves Eigenschaft auf dem Knoten ein Array wie folgt zu sein:

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

Und dann änderte ich den TestScript -Block so sein:

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 

} 

Das Skript erstellt und wurde auf dem Server ausgeführt und das Replikationsdokument in RavenDB war korrekt.

+0

grt ... die $ ravenslaves sollten $ using sein: node.ravenslaves ... dann können Sie mit foreach auf $ ravenslaves iterieren anstelle von $ using: ravenslaves – Kiran

+0

Danke @Kiran! Ich denke, das ist ein besserer Ansatz, um es lesbarer zu machen und zu vermeiden, dass $ mehrere Stellen verwendet, wenn Sie die Variable an mehreren Stellen in der Konfiguration für diesen einen Knoten verwenden. Aber hat es auch andere Vorteile? – user2731951

Verwandte Themen