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

bugfix: added token parameter to repair command

Changeset 57dcd44b2fb2

Parent 0714200d90e8

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

Changes to one file · Browse files at 57dcd44b2fb2 Showing diff from parent 0714200d90e8 Diff from another changeset...

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
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) + $URI = "{0}/api/1.0/repo/{1}/repair?token={2}" -f ($kilnUrl, $ixRepo, $token)   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