After I had created the gl-sitewelcomepage command I needed a quick way to find all the pages that were pointing to the wrong place. To do this I hacked out this command which essentially just loops through a farm, web application, site collection or web and displays what the current welcome page is set to for each web. The command is called gl-enumwelcomepages. Like the gl-sitewelcomepage command this command is really simple – most of the code is focused on looping through the various objects to get to the PublishingWeb object:
1: /// <summary>
2: /// Runs the specified command.
3: /// </summary>
4: /// <param name="command">The command.</param>
5: /// <param name="keyValues">The key values.</param>
6: /// <param name="output">The output.</param>
7: /// <returns></returns>
8: public override int Run(string command, StringDictionary keyValues, out string output)
9: {
10: output = string.Empty;
11:
12: InitParameters(keyValues);
13:
14: string url = Params["url"].Value;
15: if (url != null)
16: url = url.TrimEnd('/');
17:
18: string scope = Params["scope"].Value.ToLowerInvariant();
19:
20: if (scope == "farm")
21: {
22: foreach (SPService svc in SPFarm.Local.Services)
23: {
24: if (!(svc is SPWebService))
25: continue;
26:
27: foreach (SPWebApplication webApp in ((SPWebService)svc).WebApplications)
28: {
29: DisplayWelcomePageUrl(webApp);
30: }
31: }
32: }
33: else if (scope == "webapplication")
34: {
35: SPWebApplication webApp = SPWebApplication.Lookup(new Uri(url));
36: DisplayWelcomePageUrl(webApp);
37: }
38: else if (scope == "site")
39: {
40: using (SPSite site = new SPSite(url))
41: {
42: DisplayWelcomePageUrl(site);
43: }
44: }
45: else if (scope == "web")
46: {
47: using (SPSite site = new SPSite(url))
48: using (SPWeb web = site.AllWebs[Utilities.GetServerRelUrlFromFullUrl(url)])
49: {
50: DisplayWelcomePageUrl(site, web, true);
51: }
52: }
53:
54: return 1;
55: }
56:
57:
58: /// <summary>
59: /// Validates the specified key values.
60: /// </summary>
61: /// <param name="keyValues">The key values.</param>
62: public override void Validate(StringDictionary keyValues)
63: {
64: if (Params["scope"].UserTypedIn)
65: {
66: if (Params["scope"].Value.ToLowerInvariant() == "farm" && Params["url"].UserTypedIn)
67: throw new SPSyntaxException("The url parameter is not compatible with a scope of Farm.");
68: if (Params["scope"].Value.ToLowerInvariant() != "farm" && !Params["url"].UserTypedIn)
69: throw new SPSyntaxException("The url parameter is required if the scope is not Farm.");
70: }
71: base.Validate(keyValues);
72: }
73:
74: #endregion
75:
76:
77: /// <summary>
78: /// Displays the welcome page URL.
79: /// </summary>
80: /// <param name="webApp">The web app.</param>
81: private static void DisplayWelcomePageUrl(SPWebApplication webApp)
82: {
83: foreach (SPSite site in webApp.Sites)
84: {
85: try
86: {
87: DisplayWelcomePageUrl(site);
88: }
89: finally
90: {
91: site.Dispose();
92: }
93: }
94: }
95:
96: /// <summary>
97: /// Displays the welcome page URL.
98: /// </summary>
99: /// <param name="site">The site.</param>
100: private static void DisplayWelcomePageUrl(SPSite site)
101: {
102: foreach (SPWeb web in site.AllWebs)
103: {
104: try
105: {
106: DisplayWelcomePageUrl(site, web, false);
107: }
108: finally
109: {
110: web.Dispose();
111: }
112: }
113: }
114:
115: /// <summary>
116: /// Displays the welcome page URL.
117: /// </summary>
118: /// <param name="site">The site.</param>
119: /// <param name="web">The web.</param>
120: /// <param name="recurseSubWebs">if set to <c>true</c> [recurse sub webs].</param>
121: internal static void DisplayWelcomePageUrl(SPSite site, SPWeb web, bool recurseSubWebs)
122: {
123: if (recurseSubWebs)
124: {
125: foreach (SPWeb subweb in web.Webs)
126: {
127: DisplayWelcomePageUrl(site, subweb, recurseSubWebs);
128: }
129: }
130:
131: if (!PublishingWeb.IsPublishingWeb(web))
132: return;
133:
134: PublishingWeb pubWeb = PublishingWeb.GetPublishingWeb(web);
135:
136: Console.WriteLine(site.MakeFullUrl(web.ServerRelativeUrl) + " = " + pubWeb.DefaultPage);
137: }
The syntax of the command can be seen below:
C:\>stsadm -help gl-enumwelcomepages stsadm -o gl-enumwelcomepages Lists all the welcome page(s) for a farm, web application, site collection, or web. Parameters: -url <url to search> -scope <Farm | WebApplication | Site | Web>
Here’s an example of how to list all the welcome pages in a web application:
stsadm -o gl-enumwelcomepages -url "http://intranet" -scope webapplication