Kiln » KilnSupportScripts Powershell Scripts to help monitor a Kiln environment. Contact Fog Creek support before using.
Clone URL:  
Pushed to one repository · View In Graph Contained in tip

created powershell version of repair_all_repos script

Changeset 4cf1dbffa904

Parent 22b0ad8f0907

by Profile picture of User 1563Quentin Schroeder <quentin@fogcreek.com>

Changes to one file · Browse files at 4cf1dbffa904 Showing diff from parent 22b0ad8f0907 Diff from another changeset...

Change 1 of 1 Show Entire File misc/​repair_all_repos.ps1 Stacked
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
@@ -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 +