263 lines
9.0 KiB
PowerShell
263 lines
9.0 KiB
PowerShell
|
function Import-AlkamiConsoleHost {
|
||
|
Add-Type -TypeDefinition @"
|
||
|
namespace Alkami {
|
||
|
using System;
|
||
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using System.Collections.ObjectModel;
|
||
|
using System.Diagnostics;
|
||
|
using System.Globalization;
|
||
|
using System.IO;
|
||
|
using System.Linq;
|
||
|
using System.Management.Automation;
|
||
|
using System.Management.Automation.Host;
|
||
|
using System.Management.Automation.Internal;
|
||
|
using System.Management.Automation.Internal.Host;
|
||
|
using System.Management.Automation.Runspaces;
|
||
|
using System.Security;
|
||
|
using System.Text;
|
||
|
using Microsoft.PowerShell;
|
||
|
using Microsoft.Win32;
|
||
|
using Microsoft.Win32.SafeHandles;
|
||
|
|
||
|
public class AlkamiDefaultHost : PSHost {
|
||
|
public AlkamiDefaultHost(CultureInfo currentCulture, CultureInfo currentUICulture)
|
||
|
{
|
||
|
_name = "Alkami Default Host";
|
||
|
_instanceId = Guid.NewGuid();
|
||
|
_currentCulture = currentCulture;
|
||
|
_currentUICulture = currentUICulture;
|
||
|
_ui = new AlkamiConsoleHostUserInterface();
|
||
|
_version = new Version(1,0,0);
|
||
|
}
|
||
|
|
||
|
private string _name;
|
||
|
public override string Name { get { return _name; } }
|
||
|
private Version _version;
|
||
|
public override Version Version { get { return _version; } }
|
||
|
private Guid _instanceId;
|
||
|
public override Guid InstanceId { get { return _instanceId; } }
|
||
|
private PSHostUserInterface _ui;
|
||
|
public override PSHostUserInterface UI { get { return _ui; } }
|
||
|
private CultureInfo _currentCulture;
|
||
|
public override CultureInfo CurrentCulture { get { return _currentCulture; } }
|
||
|
private CultureInfo _currentUICulture;
|
||
|
public override CultureInfo CurrentUICulture { get { return _currentUICulture; } }
|
||
|
|
||
|
public override void SetShouldExit(int exitCode) { }
|
||
|
public override void EnterNestedPrompt() { }
|
||
|
public override void ExitNestedPrompt() { }
|
||
|
public override void NotifyBeginApplication() { }
|
||
|
public override void NotifyEndApplication() { }
|
||
|
}
|
||
|
|
||
|
public class MessageEntry {
|
||
|
public MessageEntry() {
|
||
|
TimeStamp = DateTime.Now;
|
||
|
Exception = null;
|
||
|
}
|
||
|
|
||
|
public DateTime TimeStamp { get; set; }
|
||
|
public string Message { get; set; }
|
||
|
public string MessageType { get; set; }
|
||
|
public ConsoleColor ForegroundColor { get; set; }
|
||
|
public ConsoleColor BackgroundColor { get; set; }
|
||
|
public object MessageData { get; set; }
|
||
|
public Exception Exception { get; set; }
|
||
|
|
||
|
public static MessageEntry Information(string value, object messageData = null) {
|
||
|
var messageEntry = new MessageEntry();
|
||
|
messageEntry.BackgroundColor = ConsoleColor.DarkCyan;
|
||
|
messageEntry.ForegroundColor = ConsoleColor.White;
|
||
|
messageEntry.MessageData = messageData;
|
||
|
messageEntry.Message = value;
|
||
|
messageEntry.MessageType = "Information";
|
||
|
return messageEntry;
|
||
|
}
|
||
|
|
||
|
public static MessageEntry Information(ConsoleColor foregroundColor, ConsoleColor backgroundColor, string value, object messageData = null) {
|
||
|
var messageEntry = new MessageEntry();
|
||
|
messageEntry.BackgroundColor = backgroundColor;
|
||
|
messageEntry.ForegroundColor = foregroundColor;
|
||
|
messageEntry.MessageData = messageData;
|
||
|
messageEntry.Message = value;
|
||
|
messageEntry.MessageType = "Information";
|
||
|
return messageEntry;
|
||
|
}
|
||
|
|
||
|
public static MessageEntry Verbose(ConsoleColor foregroundColor, ConsoleColor backgroundColor, string value, object messageData = null) {
|
||
|
var messageEntry = new MessageEntry();
|
||
|
messageEntry.BackgroundColor = backgroundColor;
|
||
|
messageEntry.ForegroundColor = foregroundColor;
|
||
|
messageEntry.MessageData = messageData;
|
||
|
messageEntry.Message = value;
|
||
|
messageEntry.MessageType = "Verbose";
|
||
|
return messageEntry;
|
||
|
}
|
||
|
|
||
|
public static MessageEntry Debug(ConsoleColor foregroundColor, ConsoleColor backgroundColor, string value, object messageData = null) {
|
||
|
var messageEntry = new MessageEntry();
|
||
|
messageEntry.BackgroundColor = backgroundColor;
|
||
|
messageEntry.ForegroundColor = foregroundColor;
|
||
|
messageEntry.MessageData = messageData;
|
||
|
messageEntry.Message = value;
|
||
|
messageEntry.MessageType = "Debug";
|
||
|
return messageEntry;
|
||
|
}
|
||
|
|
||
|
public static MessageEntry Warning(ConsoleColor foregroundColor, ConsoleColor backgroundColor, string value, object messageData = null) {
|
||
|
var messageEntry = new MessageEntry();
|
||
|
messageEntry.BackgroundColor = backgroundColor;
|
||
|
messageEntry.ForegroundColor = foregroundColor;
|
||
|
messageEntry.MessageData = messageData;
|
||
|
messageEntry.Message = value;
|
||
|
messageEntry.MessageType = "Warning";
|
||
|
return messageEntry;
|
||
|
}
|
||
|
|
||
|
public static MessageEntry Error(ConsoleColor foregroundColor, ConsoleColor backgroundColor, string value, object messageData = null) {
|
||
|
var messageEntry = new MessageEntry();
|
||
|
messageEntry.BackgroundColor = backgroundColor;
|
||
|
messageEntry.ForegroundColor = foregroundColor;
|
||
|
messageEntry.MessageData = messageData;
|
||
|
messageEntry.Message = value;
|
||
|
messageEntry.MessageType = "Error";
|
||
|
return messageEntry;
|
||
|
}
|
||
|
|
||
|
public static MessageEntry Error(ConsoleColor foregroundColor, ConsoleColor backgroundColor, string value, Exception exception, object messageData = null) {
|
||
|
var messageEntry = new MessageEntry();
|
||
|
messageEntry.BackgroundColor = backgroundColor;
|
||
|
messageEntry.ForegroundColor = foregroundColor;
|
||
|
messageEntry.MessageData = messageData;
|
||
|
messageEntry.Message = value;
|
||
|
messageEntry.MessageType = "Error";
|
||
|
messageEntry.Exception = exception;
|
||
|
return messageEntry;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public class AlkamiConsoleHostUserInterface : PSHostUserInterface, IHostUISupportsMultipleChoiceSelection
|
||
|
{
|
||
|
private List<MessageEntry> MessageList = new List<MessageEntry>();
|
||
|
|
||
|
public override bool SupportsVirtualTerminal { get { return false; } }
|
||
|
|
||
|
public override PSHostRawUserInterface RawUI { get { return null; } }
|
||
|
|
||
|
public ConsoleColor ErrorForegroundColor { get; set; }
|
||
|
public ConsoleColor ErrorBackgroundColor { get; set; }
|
||
|
|
||
|
public ConsoleColor WarningForegroundColor { get; set; }
|
||
|
public ConsoleColor WarningBackgroundColor { get; set; }
|
||
|
|
||
|
public ConsoleColor DebugForegroundColor { get; set; }
|
||
|
public ConsoleColor DebugBackgroundColor { get; set; }
|
||
|
|
||
|
public ConsoleColor VerboseForegroundColor { get; set; }
|
||
|
public ConsoleColor VerboseBackgroundColor { get; set; }
|
||
|
|
||
|
public ConsoleColor ProgressForegroundColor { get; set; }
|
||
|
public ConsoleColor ProgressBackgroundColor { get; set; }
|
||
|
|
||
|
public AlkamiConsoleHostUserInterface()
|
||
|
{
|
||
|
var defaultBackgroundColor = ConsoleColor.DarkBlue;
|
||
|
|
||
|
this.ProgressBackgroundColor = ConsoleColor.DarkCyan;
|
||
|
this.ProgressForegroundColor = ConsoleColor.Yellow;
|
||
|
|
||
|
this.VerboseBackgroundColor = defaultBackgroundColor;
|
||
|
this.VerboseForegroundColor = ConsoleColor.Yellow;
|
||
|
|
||
|
this.DebugBackgroundColor = ConsoleColor.DarkCyan;
|
||
|
this.DebugForegroundColor = ConsoleColor.Yellow;
|
||
|
|
||
|
this.WarningBackgroundColor = defaultBackgroundColor;
|
||
|
this.WarningForegroundColor = ConsoleColor.Yellow;
|
||
|
|
||
|
this.ErrorBackgroundColor = ConsoleColor.Black;
|
||
|
this.ErrorForegroundColor = ConsoleColor.Red;
|
||
|
}
|
||
|
|
||
|
public override string ReadLine()
|
||
|
{
|
||
|
return "";
|
||
|
}
|
||
|
|
||
|
public override SecureString ReadLineAsSecureString()
|
||
|
{
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
public override void Write(string value)
|
||
|
{
|
||
|
MessageList.Add(MessageEntry.Information(value));
|
||
|
}
|
||
|
|
||
|
public override void Write(ConsoleColor foregroundColor, ConsoleColor backgroundColor, string value)
|
||
|
{
|
||
|
var message = MessageEntry.Information(foregroundColor, backgroundColor, value);
|
||
|
MessageList.Add(message);
|
||
|
}
|
||
|
|
||
|
public override void WriteLine(string value)
|
||
|
{
|
||
|
MessageList.Add(MessageEntry.Information(value));
|
||
|
}
|
||
|
|
||
|
public override void WriteDebugLine(string message)
|
||
|
{
|
||
|
MessageList.Add(MessageEntry.Debug(DebugForegroundColor, DebugBackgroundColor, message));
|
||
|
}
|
||
|
|
||
|
public override void WriteInformation(InformationRecord record)
|
||
|
{
|
||
|
MessageList.Add(MessageEntry.Information("InformationRecord", record));
|
||
|
}
|
||
|
|
||
|
public override void WriteVerboseLine(string message)
|
||
|
{
|
||
|
MessageList.Add(MessageEntry.Verbose(VerboseForegroundColor, VerboseBackgroundColor, message));
|
||
|
}
|
||
|
|
||
|
public override void WriteWarningLine(string message)
|
||
|
{
|
||
|
MessageList.Add(MessageEntry.Warning(WarningForegroundColor, WarningBackgroundColor, message));
|
||
|
}
|
||
|
|
||
|
public override void WriteProgress(long sourceId, ProgressRecord record) { }
|
||
|
|
||
|
public override void WriteErrorLine(string value)
|
||
|
{
|
||
|
MessageList.Add(MessageEntry.Error(ErrorForegroundColor, ErrorBackgroundColor, value));
|
||
|
}
|
||
|
|
||
|
public override Dictionary<string, PSObject> Prompt(string caption, string message, Collection<FieldDescription> descriptions)
|
||
|
{
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
public override int PromptForChoice(string caption, string message, Collection<ChoiceDescription> choices, int defaultChoice)
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
public Collection<int> PromptForChoice(string caption, string message, Collection<ChoiceDescription> choices, IEnumerable<int> defaultChoices)
|
||
|
{
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
public override PSCredential PromptForCredential(string caption, string message, string userName, string targetName)
|
||
|
{
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
public override PSCredential PromptForCredential(string caption, string message, string userName, string targetName, PSCredentialTypes allowedCredentialTypes, PSCredentialUIOptions options)
|
||
|
{
|
||
|
return null;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
"@;
|
||
|
}
|