Should you put your Sitecore site behind a load balancing proxy you will run into a bit of a problem with analytics where all the Engagement Analytics app would ever report would be your own load balancing proxy’s IP address. Needless to say that is fairly big loss as you are unable to reap a host of benefits of the Sitecore CEP like page personalization, automation and reporting.
While our website was running on Sitecore 6.4 this problem was already solved and we have implemented something akin to the solution from Jeroen’s blog. Meanwhile Sitecore has reimplemented its analytics engine from the grounds up in version 6.5, and I should say they did a great job on that. However in the process the API for the analytics has changed to a degree that made our current solution obsolete, basically what we got logged looked as follows:

Read the rest of this article »
Popularity: 2% [?]
We had a situation in the company this week which required us to deliver the whole EPiServer virtual path provider file structure to the client – zipped. Easy enough… go to the EpiServer VPP directory and… well… ok… hmm… so the path provider is versioning and as a consequence the physical organization of files on the disk does not make any sense for a human trying to browse it.
Fine! So let’s create a native provider and do a copy and paste within the file manager…. hmm an exception complaining about the provider incompatibility…
Naturally, my knee-jerk reaction is – let’s do it with the PowerShell… which I recall was doing something like this in it’s previous version… The example I’ve tested and placed in the “Samples” tab was:
cd VPP:\
cd \Documents\
get-childitem -recurse |
copy-item -destination \DocumentsNonVersioningVPP\
This worked well but flattened the directory structure – in other words useless for our client.
I’ve tried what should work in a plain PowerShell:
cd VPP:\
copy-item -path vpp:\Documents\*
-destination vpp:\DocumentsNonVersioningVPP\
-recurse -force
Now that didn’t work at all, and turned out to be a bug in my PowerShell plugin’s PSDrive provider. Unfortunately when I attempted to fix it by implementing the copy in the naive way – using UnifiedDirectory’s Copy method I’ve run into the same exception about incompatibility between the classes that I’ve seen when trying to copy the files form the file manager.
Mmmkay… I’ll just implement the recursion myself… Read the rest of this article »
Popularity: 2% [?]
Most of this post is also based on the Microsoft’s Windows PowerShell Quick Reference however despite the sharing scripting runtimes the nature of the both shells differ considerably as described in the previous post: PowerShell for EPiServer – cheat sheet – Part 1. In all cases where it made sense I’ve converted the samples to establish them in EPiServer scenarios.
How to Write Conditional Statements
To write an If statement use code similar to this:
$page = Get-CurrentPage;
$changedBy = $page.ChangedBy;
$me = [EPiServer.Security.PrincipalInfo]::Current;
$myName = $me.Name;
if ($changedBy -eq "")
{ "Unspecified author - a system page?" }
elseif ($changedBy -eq $myName)
{ "The page has been last edited by me!" }
else
{ "The page has been last edited by "+ $changedBy }
Instead of writing a series of If statements you can use a Switch statement, which is equivalent to VBScript’s Select Case statement:
$page = Get-CurrentPage;
switch ($page.PageChildOrderRule) {
0 {"Undefined sort order. "}
1 {"Most recently created page will be first in list"}
2 {"Oldest created page will be first in list"}
3 {"Sorted alphabetical on name"}
4 {"Sorted on page index"}
5 {"Most recently changed page will be first in list"}
6 {"Sort on ranking, only supported by special controls"}
7 {"Oldest published page will be first in list"}
8 {"Most recently published page will be first in list"}
default {"No idea what that means!"}
}
How to Write For and For Each Loops
Read the rest of this article »
Popularity: 4% [?]
Most of this is based on the Microsoft’s Windows PowerShell Quick Reference however despite the sharing scripting runtimes the nature of the both shells are pretty different (although the differences are not as vast as one might think).
| Windows PowerShell |
PowerShell Console for EPiServer |
| Interactive – command can ask for confirmations and can be aborted. User can be solicited to provide input. |
Batch – all commands are being executed in one go, the script has no chance to ask questions, go or no-go decisions have to be solved within the script. |
| Supports colouring. |
Supports plain text output only. |
| Supports command line arguments for running scripts. |
All arguments are defined directly within the script or derived from context automatically. |
| Can access any file depending on the rights of the user. |
Can only access files the web application identity can write to. Cannot access files on user’s machine but rather operates on the server’s file system. Cannot operate with elevated privileges. |
That said, I considered that enough of the Reference document is irrelevant in the EPiServer scenario that it’s beneficial for the users of the console to have a bespoke cheat sheet created especially for the purpose of this plugin.
The content & samples of the original cheat sheet has been adjusted to more closely reflect scenarios usable for an EPiServer admin or developer.
So here go the EPiServer specific tips
Read the rest of this article »
Popularity: 3% [?]
The PowerShell plugin gets an update once again to support Admin mode script collections in addition to the context scripts.
How to write an Admin mode script collections?
<ContextScriptCollection>
<Title>Statistics Scripts</Title>
<Description>This script collection ... </Description>
<Area>Administration</Area>
<Scripts>
<ContextScript>
<Title>Restart Application</Title>
<Description>The script restarts this instance of EPiServer...</Warning>
<Script>Restart-Application</Script>
<Icon>/App_Themes/Default/Images/Tools/Refresh.gif</Icon>
<Groups>
</Groups>
</ContextScript>
</Scripts>
</ContextScriptCollection>
Where can I access that?

Read the rest of this article »
Popularity: 2% [?]
Ok, so I’ve got my shot of endorphins writing about PowerShell last week (damn, it’s nice to be able to code again!), and I got pretty determined on making it usable and achieving all the goals I’ve initially envisioned. and in the process build a usable tool and a library of scripts that people can use either directly or to modify to meet their needs.
The goal for this week: Context Scripts
Context scripts are the first step to break the scripting out of the admin realm and into the editor’s space. Those scripts will still be written by admins and developers but the goal is for them to be usable by the authors. The goal for those scripts can be as trivial as e.g. syndicating all the great functionality little plugins like this Unpublish button by Ted in one place and then mix and match them to your liking.
Some of the important bits:
- Context scripts are something that is visible to users on “Scripts” page.
- Scripts can be exposed to everyone or just the groups of your liking… you define it in the script.
- Scripts are grouped in collections that are defined in *.psepi files that you drop into your application folder
How do I define a script collection?
Read the rest of this article »
Popularity: 2% [?]