Changeset 4cf1dbffa904…
Parent 22b0ad8f0907…
by Quentin Schroeder <quentin@fogcreek.com>
Changes to one file · Browse files at 4cf1dbffa904 Showing diff from parent 22b0ad8f0907 Diff from another changeset...
|
|
@@ -0,0 +1,117 @@ + <#
+.SYNOPSIS
+ Repairs all repositories on a Kiln server
+
+.DESCRIPTION
+ Uses the Kiln API to gather information about all repositories hosted on the Kiln server and then
+ issues API commands to repair each of the repositories.
+
+.EXAMPLE
+ .\repair_all_repos.ps1 -kilnUrl "http://my.fogbugz/kiln" -token "gfd4567f2g7d8f2g4d6f8sdsdg88"
+
+.PARAMETER kilnUrl
+ Where Kiln is hosted, this URL must be reachable from the local machine
+
+.PARAMETER token
+ A valid API token for the Kiln server
+
+.NOTES
+ Author: Quentin Schroeder
+ Version: 1.0
+ Date: Jan 22, 2013
+#>
+
+
+param([string]$kilnUrl = "http://localhost/kiln",
+ [string]$token = ""
+ )
+
+
+function main() {
+ if ($token -eq "") {write-host "Must provide a token to authorize access to Kiln."; exit;}
+
+ $url = "{0}/Api/1.0/Project?token={1}" -f ($kilnUrl, $token)
+ write-host ("Getting repo information from {0}" -f $url)
+ $response = (New-Object System.Net.WebClient).DownloadString($url)
+ if (!($?)) {write-host "Failed to get repo information. Confirm the kilnUrl parameter is correct."; exit;}
+
+ $responseXml = Convert-JsonToXml($response)
+ $projects = $responseXml.root.childnodes
+
+ foreach ($project in $projects) {
+ foreach ($group in $project.repoGroups.childnodes) {
+ foreach ($repo in $group.repos.childnodes) {
+ $ixRepo = $repo.ixRepo."#text"
+ $repoName = $repo.sName."#text"
+ $URI = "{0}/api/1.0/repo/{1}/repair" -f ($kilnUrl, $ixRepo)
+ write-host ("Attempting to repair repo '{0}' (ixRepo: {1})" -f ($repoName, $ixRepo) )
+ Execute-HTTPPostCommand $URI "a=1"
+ if (!($?)) {write-host "Failed!!"}
+ }
+ }
+ }
+}
+
+
+
+# This is provided as an alternative to ConvertFrom-JSON, which requires Powershell V3
+# which is not on most servers by default and requires a reboot to install.
+# Source: (https://www.cogmotive.com/blog/powershell/parsing-json-in-powershell-xml-the-member-item-is-already-present)
+Add-Type -Assembly System.ServiceModel.Web,System.Runtime.Serialization
+function Convert-JsonToXml([string]$json)
+{
+ $bytes = [byte[]][char[]]$json
+ $quotas = [System.Xml.XmlDictionaryReaderQuotas]::Max
+ $jsonReader = [System.Runtime.Serialization.Json.JsonReaderWriterFactory]::CreateJsonReader($bytes,$quotas)
+ try
+ {
+ $xml = new-object System.Xml.XmlDocument
+ $xml.Load($jsonReader)
+ $xml
+ }
+ finally
+ {
+ $jsonReader.Close()
+ }
+}
+
+
+
+# Source: (http://stackoverflow.com/questions/5246836/user-powershell-script-to-post-to-url)
+function Execute-HTTPPostCommand() {
+ param(
+ [string] $target = $null,
+ [string] $post = $null
+ )
+
+ $webRequest = [System.Net.WebRequest]::Create($target)
+ $webRequest.ContentType = "text/html"
+ $PostStr = [System.Text.Encoding]::UTF8.GetBytes($post)
+ $webrequest.ContentLength = $PostStr.Length
+ $webRequest.ServicePoint.Expect100Continue = $false
+ $webRequest.Method = "POST"
+
+ $requestStream = $webRequest.GetRequestStream()
+ $requestStream.Write($PostStr, 0,$PostStr.length)
+ $requestStream.Close()
+
+ try
+ {
+ [System.Net.WebResponse] $resp = $webRequest.GetResponse()
+ }
+ catch [Net.WebException]
+ {
+ write-host $_.Exception.ToString()
+ }
+
+ $rs = $resp.GetResponseStream()
+ [System.IO.StreamReader] $sr = New-Object System.IO.StreamReader -argumentList $rs
+ [string] $results = $sr.ReadToEnd()
+
+ return $results
+}
+
+
+
+main
+
|
Loading...