Kiln » KilnSupportScripts Powershell Scripts to help monitor a Kiln environment. Contact Fog Creek support before using.
Clone URL:  
repair_all_repos.ps1
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
<# .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