ps/Modules/Cole.PowerShell.Developer/Public/Import-AlkamiConsoleHost.ps1

263 lines
9.0 KiB
PowerShell
Raw Normal View History

2023-05-30 22:51:22 -07:00
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;
}
}
}
"@;
}