public object ExecuteCommand(string guid, string command, string stringFormat) { var serializer = new JavaScriptSerializer(); var output = new StringBuilder(); if (!IsLoggedInUserAuthorized || !SessionElevationManager.IsSessionTokenElevated(ApplicationNames.Console)) { return(serializer.Serialize( new { status = StatusElevationRequired, result = "You need to be authenticated, elevated and have sufficient privileges to use the PowerShell console. Please (re)login to Sitecore.", prompt = "PS >", background = OutputLine.ProcessHtmlColor(ConsoleColor.DarkBlue) })); } PowerShellLog.Info($"Arbitrary script execution in Console session '{guid}' by user: '******'"); var session = GetScriptSession(guid); session.Interactive = true; session.SetItemContextFromLocation(); try { var handle = ID.NewID.ToString(); var jobOptions = TypeResolver.Resolve <IJobOptions>(new object[] { GetJobId(guid, handle), "PowerShell", "shell", this, nameof(RunJob), new object[] { session, command } }); jobOptions.ContextUser = Sitecore.Context.User; jobOptions.EnableSecurity = true; jobOptions.ClientLanguage = Sitecore.Context.ContentLanguage; jobOptions.AfterLife = new TimeSpan(0, 0, 20); var jobManager = TypeResolver.ResolveFromCache <IJobManager>(); jobManager.StartJob(jobOptions); Thread.Sleep(WebServiceSettings.CommandWaitMillis); return(PollCommandOutput(guid, handle, stringFormat)); } catch (Exception ex) { return (serializer.Serialize( new Result { status = StatusError, result = output + ScriptSession.GetExceptionString(ex, ScriptSession.ExceptionStringFormat.Console) + "\r\n" + "\r\n[[;#f00;#000]Uh oh, looks like the command you ran is invalid or something else went wrong. Is it something we should know about?]\r\n" + "[[;#f00;#000]Please submit a support ticket here https://git.io/spe with error details, screenshots, and anything else that might help.]\r\n\r\n" + "[[;#f00;#000]We also have a user guide here https://doc.sitecorepowershell.com/.]\r\n\r\n", prompt = $"PS {session.CurrentLocation}>", background = OutputLine.ProcessHtmlColor(session.PrivateData.BackgroundColor), color = OutputLine.ProcessHtmlColor(session.PrivateData.ForegroundColor) })); } }