Thursday, November 18, 2010

My First PowerShell Scripting Project - SharePoint 2010 Inventory

PowerShell! What is PowerShell? I don't really care what it is, all I care is what it can do for me. I think PowerShell in windows is a really powerful command-line shell and its scripting language is easy to learn. Tranferring my knowledge in DOS scripting to PowerShell was such a breeze. In fact, I find it more easy and efficient to write scripts in PowerShell. The cmdlets are very straight-forward. One thing I notice though that it works and behaves like xTerm - I'll end there since that would be a very different topic :).

Basically, my script is just a simple program that creates an XML file that contains all the information regarding the SharePoint services, apps and sites in the server. Then I can use the file as my inventory report source.

NOTE: please adjust the code a little bit when you copy and paste the code below... I put space between the "<" and tag name for the code to be posted.

write-host "start processing SharePoint Sites Inventory..."
$outputFile = "C:\ps_scripts\inventory.xml"

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null

$farm = [Microsoft.SharePoint.Administration.SPFarm]::Local
$websvcs = $farm.Services where -FilterScript {$_.GetType() -eq [Microsoft.SharePoint.Administration.SPWebService]}
$webapps = @()

'< ?xml version="1.0" encoding="utf-8"?>' out-File $outputFile
'<>' out-File $outputFile -append
foreach ($websvc in $websvcs)
{
'<>' out-File $outputFile -append
'<>' out-File $outputFile -append
$websvc.Name out-File $outputFile -append
'< /Name>' out-File $outputFile -append

'<>' out-File $outputFile -append
foreach ($webapp in $websvc.WebApplications)
{
'<>' out-File $outputFile -append
'<>' out-File $outputFile -append
$webapp.Name out-File $outputFile -append
'< /Name>' out-File $outputFile -append
'<>' out-File $outputFile -append
$webapp.URL out-File $outputFile -append
'< /URL>' out-File $outputFile -append

'<>' out-File $outputFile -append
foreach ($site in $webapp.Sites)
{
'<>' out-File $outputFile -append
'<>' out-File $outputFile -append
$site.Name out-File $outputFile -append
'< /Name>' out-File $outputFile -append
'<>' out-File $outputFile -append
$site.URL out-File $outputFile -append
'< /URL>' out-File $outputFile -append

'<>' out-File $outputFile -append
foreach ($web in $site.AllWebs)
{
'<>' out-File $outputFile -append
'<>' out-File $outputFile -append
$web.Name out-File $outputFile -append
'< /Name>' out-File $outputFile -append
'<>' out-File $outputFile -append
$web.URL out-File $outputFile -append
'< /URL>' out-File $outputFile -append

'<>' out-File $outputFile -append
foreach ($list in $web.Lists)
{
'<>' out-File $outputFile -append
'<>' out-File $outputFile -append
$list.Title out-File $outputFile -append
'< /Title>' out-File $outputFile -append
'<>' out-File $outputFile -append
$list.URL out-File $outputFile -append
'< /URL>' out-File $outputFile -append
'< /List>' out-File $outputFile -append
}
'< /Lists>' out-File $outputFile -append

'<>' out-File $outputFile -append
foreach ($group in $web.Groups)
{
'<>' out-File $outputFile -append
'<>' out-File $outputFile -append
$group.Name out-File $outputFile -append
'< /Name>' out-File $outputFile -append

'<>' out-File $outputFile -append
foreach ($user in $group.Users)
{
'<>' out-File $outputFile -append
$user.Name out-File $outputFile -append
'< /User>' out-File $outputFile -append
}
'< /Users>' out-File $outputFile -append

'< /Group>' out-File $outputFile -append
}
'< /Groups>' out-File $outputFile -append

'< /Web>' out-File $outputFile -append

}
'< /Webs>' out-File $outputFile -append

'< /Site>' out-File $outputFile -append
}
'< /Sites>' out-File $outputFile -append

'< /App>' out-File $outputFile -append
}
'< /Apps>' out-File $outputFile -append
'< /Service>' out-File $outputFile -append
}
'< /Services>' out-File $outputFile -append

write-host "done."

Wednesday, November 10, 2010

C# code connects to ESSBase OLAP via XMLA

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.ReportingServices.XmlaClient;


namespace RawEssBaseConnect
{
class Program
{
static void Main(string[] args)
{

connectNow();
Console.Read();
}

static void connectNow()
{
Console.WriteLine("Connecting...");
AdomdConnection cn = new AdomdConnection();
string connString = "Data Source=http://YOURSERVER/aps/XMLA;Initial Catalog=YOURCATALOG;DataSourceInfo=\"Provider=Essbase;Data Source=YOURDATASOURCE\";Persist Security Info=True;User ID=YOURUSERID;Password=YOURPASSWORD";
cn.ConnectionString = connString;
cn.Open();
Console.WriteLine("State=" + cn.State.ToString());

CubeCollection cubes = cn.Cubes;
Console.WriteLine("Cube Count=" + cubes.Count.ToString());


CubeDef cube = cubes[0];

Console.WriteLine("Cube name=" + cube.Name);
Console.WriteLine("Dimensions count=" + cubes[0].Dimensions.Count.ToString());
foreach (Dimension dim in cubes[0].Dimensions)
{
Console.WriteLine();
Console.WriteLine("Dimension = " + dim.Name);

}

string mdx = "WRITE YOUR MDX HERE";
AdomdCommand cmd = new AdomdCommand(mdx, cn);
AdomdDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
Console.WriteLine();
for (int i = 0; i < dr.FieldCount; i++)
{
Console.WriteLine(dr[i].ToString());
}
}

dr.Close();

cn.Close();
cn.Dispose();



}
}


}