1993 lines
103 KiB
C#
1993 lines
103 KiB
C#
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT License.
|
|
|
|
using System.Collections.Generic;
|
|
|
|
namespace System.Management.Automation.Runspaces
|
|
{
|
|
internal sealed class PowerShellCore_Format_Ps1Xml
|
|
{
|
|
internal static IEnumerable<ExtendedTypeDefinition> GetFormatData()
|
|
{
|
|
var AvailableModules_GroupingFormat = CustomControl.Create()
|
|
.StartEntry()
|
|
.StartFrame()
|
|
.AddText(FileSystemProviderStrings.DirectoryDisplayGrouping)
|
|
.AddScriptBlockExpressionBinding(@"Split-Path -Parent $_.Path | ForEach-Object { if([Version]::TryParse((Split-Path $_ -Leaf), [ref]$null)) { Split-Path -Parent $_} else {$_} } | Split-Path -Parent")
|
|
.EndFrame()
|
|
.EndEntry()
|
|
.EndControl();
|
|
|
|
var sharedControls = new CustomControl[] {
|
|
AvailableModules_GroupingFormat
|
|
};
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"System.RuntimeType",
|
|
ViewsOf_System_RuntimeType());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"Microsoft.PowerShell.Commands.MemberDefinition",
|
|
ViewsOf_Microsoft_PowerShell_Commands_MemberDefinition());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"Microsoft.PowerShell.Commands.GroupInfo",
|
|
ViewsOf_Microsoft_PowerShell_Commands_GroupInfo());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"Microsoft.PowerShell.Commands.GroupInfoNoElement",
|
|
ViewsOf_Microsoft_PowerShell_Commands_GroupInfoNoElement());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"Microsoft.PowerShell.Commands.HistoryInfo",
|
|
ViewsOf_Microsoft_PowerShell_Commands_HistoryInfo());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"Microsoft.PowerShell.Commands.MatchInfo",
|
|
ViewsOf_Microsoft_PowerShell_Commands_MatchInfo());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"Deserialized.Microsoft.PowerShell.Commands.MatchInfo",
|
|
ViewsOf_Deserialized_Microsoft_PowerShell_Commands_MatchInfo());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"System.Management.Automation.PSVariable",
|
|
ViewsOf_System_Management_Automation_PSVariable());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"System.Management.Automation.PathInfo",
|
|
ViewsOf_System_Management_Automation_PathInfo());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"System.Management.Automation.CommandInfo",
|
|
ViewsOf_System_Management_Automation_CommandInfo());
|
|
|
|
var td10 = new ExtendedTypeDefinition(
|
|
"System.Management.Automation.AliasInfo",
|
|
ViewsOf_System_Management_Automation_AliasInfo_System_Management_Automation_ApplicationInfo_System_Management_Automation_CmdletInfo_System_Management_Automation_ExternalScriptInfo_System_Management_Automation_FilterInfo_System_Management_Automation_FunctionInfo_System_Management_Automation_ScriptInfo());
|
|
td10.TypeNames.Add("System.Management.Automation.ApplicationInfo");
|
|
td10.TypeNames.Add("System.Management.Automation.CmdletInfo");
|
|
td10.TypeNames.Add("System.Management.Automation.ExternalScriptInfo");
|
|
td10.TypeNames.Add("System.Management.Automation.FilterInfo");
|
|
td10.TypeNames.Add("System.Management.Automation.FunctionInfo");
|
|
td10.TypeNames.Add("System.Management.Automation.ScriptInfo");
|
|
yield return td10;
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"System.Management.Automation.Runspaces.TypeData",
|
|
ViewsOf_System_Management_Automation_Runspaces_TypeData());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"Microsoft.PowerShell.Commands.ControlPanelItem",
|
|
ViewsOf_Microsoft_PowerShell_Commands_ControlPanelItem());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"System.Management.Automation.ApplicationInfo",
|
|
ViewsOf_System_Management_Automation_ApplicationInfo());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"System.Management.Automation.ScriptInfo",
|
|
ViewsOf_System_Management_Automation_ScriptInfo());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"System.Management.Automation.ExternalScriptInfo",
|
|
ViewsOf_System_Management_Automation_ExternalScriptInfo());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"System.Management.Automation.FunctionInfo",
|
|
ViewsOf_System_Management_Automation_FunctionInfo());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"System.Management.Automation.FilterInfo",
|
|
ViewsOf_System_Management_Automation_FilterInfo());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"System.Management.Automation.AliasInfo",
|
|
ViewsOf_System_Management_Automation_AliasInfo());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"Microsoft.PowerShell.Commands.ListCommand+MemberInfo",
|
|
ViewsOf_Microsoft_PowerShell_Commands_ListCommand_MemberInfo());
|
|
|
|
var td20 = new ExtendedTypeDefinition(
|
|
"Microsoft.PowerShell.Commands.ActiveDirectoryProvider+ADPSDriveInfo",
|
|
ViewsOf_Microsoft_PowerShell_Commands_ActiveDirectoryProvider_ADPSDriveInfo_System_Management_Automation_PSDriveInfo());
|
|
td20.TypeNames.Add("System.Management.Automation.PSDriveInfo");
|
|
yield return td20;
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"System.Management.Automation.ProviderInfo",
|
|
ViewsOf_System_Management_Automation_ProviderInfo());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"System.Management.Automation.CmdletInfo",
|
|
ViewsOf_System_Management_Automation_CmdletInfo());
|
|
|
|
var td23 = new ExtendedTypeDefinition(
|
|
"System.Management.Automation.FilterInfo",
|
|
ViewsOf_System_Management_Automation_FilterInfo_System_Management_Automation_FunctionInfo());
|
|
td23.TypeNames.Add("System.Management.Automation.FunctionInfo");
|
|
yield return td23;
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"System.Management.Automation.PSDriveInfo",
|
|
ViewsOf_System_Management_Automation_PSDriveInfo());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"System.Management.Automation.ShellVariable",
|
|
ViewsOf_System_Management_Automation_ShellVariable());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"System.Management.Automation.ScriptBlock",
|
|
ViewsOf_System_Management_Automation_ScriptBlock());
|
|
|
|
var extendedError = new ExtendedTypeDefinition(
|
|
"System.Management.Automation.ErrorRecord#PSExtendedError",
|
|
ViewsOf_System_Management_Automation_GetError());
|
|
extendedError.TypeNames.Add("System.Exception#PSExtendedError");
|
|
yield return extendedError;
|
|
|
|
var errorRecord_Exception = new ExtendedTypeDefinition(
|
|
"System.Management.Automation.ErrorRecord",
|
|
ViewsOf_System_Management_Automation_ErrorRecord());
|
|
yield return errorRecord_Exception;
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"System.Management.Automation.WarningRecord",
|
|
ViewsOf_System_Management_Automation_WarningRecord());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"Deserialized.System.Management.Automation.WarningRecord",
|
|
ViewsOf_Deserialized_System_Management_Automation_WarningRecord());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"System.Management.Automation.InformationRecord",
|
|
ViewsOf_System_Management_Automation_InformationRecord());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"System.Management.Automation.CommandParameterSetInfo",
|
|
ViewsOf_System_Management_Automation_CommandParameterSetInfo());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"System.Management.Automation.Runspaces.Runspace",
|
|
ViewsOf_System_Management_Automation_Runspaces_Runspace());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"System.Management.Automation.Runspaces.PSSession",
|
|
ViewsOf_System_Management_Automation_Runspaces_PSSession());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"System.Management.Automation.Job",
|
|
ViewsOf_System_Management_Automation_Job());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"Deserialized.Microsoft.PowerShell.Commands.TextMeasureInfo",
|
|
ViewsOf_Deserialized_Microsoft_PowerShell_Commands_TextMeasureInfo());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"Deserialized.Microsoft.PowerShell.Commands.GenericMeasureInfo",
|
|
ViewsOf_Deserialized_Microsoft_PowerShell_Commands_GenericMeasureInfo());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"System.Management.Automation.CallStackFrame",
|
|
ViewsOf_System_Management_Automation_CallStackFrame());
|
|
|
|
var td40 = new ExtendedTypeDefinition(
|
|
"System.Management.Automation.CommandBreakpoint",
|
|
ViewsOf_BreakpointTypes());
|
|
td40.TypeNames.Add("System.Management.Automation.LineBreakpoint");
|
|
td40.TypeNames.Add("System.Management.Automation.VariableBreakpoint");
|
|
yield return td40;
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"Microsoft.PowerShell.Commands.PSSessionConfigurationCommands#PSSessionConfiguration",
|
|
ViewsOf_Microsoft_PowerShell_Commands_PSSessionConfigurationCommands_PSSessionConfiguration());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"Microsoft.PowerShell.Commands.ComputerChangeInfo",
|
|
ViewsOf_Microsoft_PowerShell_Commands_ComputerChangeInfo());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"Microsoft.PowerShell.Commands.RenameComputerChangeInfo",
|
|
ViewsOf_Microsoft_PowerShell_Commands_RenameComputerChangeInfo());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"ModuleInfoGrouping",
|
|
ViewsOf_ModuleInfoGrouping(sharedControls));
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"System.Management.Automation.PSModuleInfo",
|
|
ViewsOf_System_Management_Automation_PSModuleInfo());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"System.Management.Automation.ExperimentalFeature",
|
|
ViewsOf_System_Management_Automation_ExperimentalFeature());
|
|
|
|
var td46 = new ExtendedTypeDefinition(
|
|
"Microsoft.PowerShell.Commands.BasicHtmlWebResponseObject",
|
|
ViewsOf_Microsoft_PowerShell_Commands_BasicHtmlWebResponseObject());
|
|
yield return td46;
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"Microsoft.PowerShell.Commands.WebResponseObject",
|
|
ViewsOf_Microsoft_PowerShell_Commands_WebResponseObject());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"Microsoft.PowerShell.Commands.FileHashInfo",
|
|
ViewsOf_Microsoft_Powershell_Utility_FileHashInfo());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"Microsoft.PowerShell.Commands.PSRunspaceDebug",
|
|
ViewsOf_Microsoft_PowerShell_Commands_PSRunspaceDebug());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"Microsoft.PowerShell.MarkdownRender.PSMarkdownOptionInfo",
|
|
ViewsOf_Microsoft_PowerShell_MarkdownRender_MarkdownOptionInfo());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"Microsoft.PowerShell.Commands.TestConnectionCommand+PingStatus",
|
|
ViewsOf_Microsoft_PowerShell_Commands_TestConnectionCommand_PingStatus());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"Microsoft.PowerShell.Commands.TestConnectionCommand+PingMtuStatus",
|
|
ViewsOf_Microsoft_PowerShell_Commands_TestConnectionCommand_PingMtuStatus());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"Microsoft.PowerShell.Commands.TestConnectionCommand+TraceStatus",
|
|
ViewsOf_Microsoft_PowerShell_Commands_TestConnectionCommand_TraceStatus());
|
|
|
|
yield return new ExtendedTypeDefinition(
|
|
"Microsoft.PowerShell.Commands.ByteCollection",
|
|
ViewsOf_Microsoft_PowerShell_Commands_ByteCollection());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_RuntimeType()
|
|
{
|
|
yield return new FormatViewDefinition("System.RuntimeType",
|
|
TableControl.Create()
|
|
.AddHeader(label: "IsPublic", width: 8)
|
|
.AddHeader(label: "IsSerial", width: 8)
|
|
.AddHeader(width: 40)
|
|
.AddHeader()
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("IsPublic")
|
|
.AddPropertyColumn("IsSerializable")
|
|
.AddPropertyColumn("Name")
|
|
.AddPropertyColumn("BaseType")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_Microsoft_PowerShell_Commands_MemberDefinition()
|
|
{
|
|
yield return new FormatViewDefinition("Microsoft.PowerShell.Commands.MemberDefinition",
|
|
TableControl.Create(autoSize: true)
|
|
.GroupByProperty("TypeName")
|
|
.AddHeader(label: "Name")
|
|
.AddHeader(label: "MemberType")
|
|
.AddHeader(label: "Definition")
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("Name")
|
|
.AddPropertyColumn("MemberType")
|
|
.AddPropertyColumn("Definition")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_Microsoft_PowerShell_Commands_GroupInfo()
|
|
{
|
|
yield return new FormatViewDefinition("Microsoft.PowerShell.Commands.GroupInfo",
|
|
TableControl.Create()
|
|
.AddHeader(Alignment.Right, label: "Count", width: 5)
|
|
.AddHeader(width: 25)
|
|
.AddHeader()
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("Count")
|
|
.AddPropertyColumn("Name")
|
|
.AddPropertyColumn("Group")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
|
|
yield return new FormatViewDefinition("Microsoft.PowerShell.Commands.GroupInfo",
|
|
ListControl.Create()
|
|
.StartEntry()
|
|
.AddItemProperty(@"Name")
|
|
.AddItemProperty(@"Count")
|
|
.AddItemProperty(@"Group")
|
|
.AddItemProperty(@"Values")
|
|
.EndEntry()
|
|
.EndList());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_Microsoft_PowerShell_Commands_GroupInfoNoElement()
|
|
{
|
|
yield return new FormatViewDefinition("Microsoft.PowerShell.Commands.GroupInfoNoElement",
|
|
TableControl.Create()
|
|
.AddHeader(Alignment.Right, label: "Count", width: 5)
|
|
.AddHeader(width: 25)
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("Count")
|
|
.AddPropertyColumn("Name")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
|
|
yield return new FormatViewDefinition("Microsoft.PowerShell.Commands.GroupInfoNoElement",
|
|
ListControl.Create()
|
|
.StartEntry()
|
|
.AddItemProperty(@"Name")
|
|
.AddItemProperty(@"Count")
|
|
.AddItemProperty(@"Values")
|
|
.EndEntry()
|
|
.EndList());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_Microsoft_PowerShell_Commands_HistoryInfo()
|
|
{
|
|
yield return new FormatViewDefinition("history",
|
|
TableControl.Create()
|
|
.AddHeader(Alignment.Right, width: 4)
|
|
.AddHeader(Alignment.Right, label: "Duration", width: 12)
|
|
.AddHeader()
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("Id")
|
|
.AddScriptBlockColumn(@"
|
|
if ($_.Duration.TotalHours -ge 10) {
|
|
return ""{0}:{1:mm}:{1:ss}.{1:fff}"" -f [int]$_.Duration.TotalHours, $_.Duration
|
|
}
|
|
elseif ($_.Duration.TotalHours -ge 1) {
|
|
$formatString = ""h\:mm\:ss\.fff""
|
|
}
|
|
elseif ($_.Duration.TotalMinutes -ge 1) {
|
|
$formatString = ""m\:ss\.fff""
|
|
}
|
|
else {
|
|
$formatString = ""s\.fff""
|
|
}
|
|
|
|
$_.Duration.ToString($formatString)
|
|
")
|
|
.AddPropertyColumn("CommandLine")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
|
|
yield return new FormatViewDefinition("history",
|
|
WideControl.Create()
|
|
.AddPropertyEntry("CommandLine")
|
|
.EndWideControl());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_Microsoft_PowerShell_Commands_MatchInfo()
|
|
{
|
|
yield return new FormatViewDefinition("MatchInfo",
|
|
CustomControl.Create()
|
|
.StartEntry()
|
|
.AddScriptBlockExpressionBinding(@"$_.ToEmphasizedString(((get-location).path))")
|
|
.EndEntry()
|
|
.EndControl());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_Deserialized_Microsoft_PowerShell_Commands_MatchInfo()
|
|
{
|
|
yield return new FormatViewDefinition("MatchInfo",
|
|
CustomControl.Create()
|
|
.StartEntry()
|
|
.AddScriptBlockExpressionBinding(@"$_.Line")
|
|
.EndEntry()
|
|
.EndControl());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_PSVariable()
|
|
{
|
|
yield return new FormatViewDefinition("Variable",
|
|
TableControl.Create()
|
|
.AddHeader(width: 30)
|
|
.AddHeader()
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("Name")
|
|
.AddPropertyColumn("Value")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_PathInfo()
|
|
{
|
|
yield return new FormatViewDefinition("PathInfo",
|
|
TableControl.Create()
|
|
.AddHeader()
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("Path")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_CommandInfo()
|
|
{
|
|
yield return new FormatViewDefinition("CommandInfo",
|
|
TableControl.Create()
|
|
.AddHeader(width: 15)
|
|
.AddHeader()
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("CommandType")
|
|
.AddPropertyColumn("Name")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_AliasInfo_System_Management_Automation_ApplicationInfo_System_Management_Automation_CmdletInfo_System_Management_Automation_ExternalScriptInfo_System_Management_Automation_FilterInfo_System_Management_Automation_FunctionInfo_System_Management_Automation_ScriptInfo()
|
|
{
|
|
yield return new FormatViewDefinition("CommandInfo",
|
|
TableControl.Create()
|
|
.AddHeader(label: "CommandType", width: 15)
|
|
.AddHeader(label: "Name", width: 50)
|
|
.AddHeader(label: "Version", width: 10)
|
|
.AddHeader(label: "Source")
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("CommandType")
|
|
.AddScriptBlockColumn(@"
|
|
if ($_.CommandType -eq ""Alias"")
|
|
{
|
|
$_.DisplayName
|
|
}
|
|
else
|
|
{
|
|
$_.Name
|
|
}
|
|
")
|
|
.AddPropertyColumn("Version")
|
|
.AddPropertyColumn("Source")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_Runspaces_TypeData()
|
|
{
|
|
yield return new FormatViewDefinition("TypeData",
|
|
TableControl.Create()
|
|
.AddHeader(label: "TypeName")
|
|
.AddHeader(label: "Members")
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("TypeName")
|
|
.AddPropertyColumn("Members")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_Microsoft_PowerShell_Commands_ControlPanelItem()
|
|
{
|
|
yield return new FormatViewDefinition("ControlPanelItem",
|
|
TableControl.Create()
|
|
.AddHeader(label: "Name")
|
|
.AddHeader(label: "CanonicalName")
|
|
.AddHeader(label: "Category")
|
|
.AddHeader(label: "Description")
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("Name")
|
|
.AddPropertyColumn("CanonicalName")
|
|
.AddPropertyColumn("Category")
|
|
.AddPropertyColumn("Description")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_ApplicationInfo()
|
|
{
|
|
yield return new FormatViewDefinition("ApplicationInfo",
|
|
TableControl.Create()
|
|
.AddHeader(width: 15)
|
|
.AddHeader()
|
|
.AddHeader()
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("CommandType")
|
|
.AddPropertyColumn("Name")
|
|
.AddPropertyColumn("Path")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
|
|
yield return new FormatViewDefinition("System.Management.Automation.ApplicationInfo",
|
|
ListControl.Create()
|
|
.StartEntry()
|
|
.AddItemProperty(@"Name")
|
|
.AddItemProperty(@"CommandType")
|
|
.AddItemProperty(@"Definition")
|
|
.AddItemProperty(@"Extension")
|
|
.AddItemProperty(@"Path")
|
|
.AddItemProperty(@"FileVersionInfo")
|
|
.EndEntry()
|
|
.EndList());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_ScriptInfo()
|
|
{
|
|
yield return new FormatViewDefinition("ScriptInfo",
|
|
TableControl.Create()
|
|
.AddHeader(width: 15)
|
|
.AddHeader()
|
|
.AddHeader()
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("CommandType")
|
|
.AddPropertyColumn("Name")
|
|
.AddPropertyColumn("Definition")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
|
|
yield return new FormatViewDefinition("System.Management.Automation.ScriptInfo",
|
|
ListControl.Create()
|
|
.StartEntry()
|
|
.AddItemProperty(@"Name")
|
|
.AddItemProperty(@"CommandType")
|
|
.AddItemProperty(@"Definition")
|
|
.AddItemProperty(@"Path")
|
|
.EndEntry()
|
|
.EndList());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_ExternalScriptInfo()
|
|
{
|
|
yield return new FormatViewDefinition("ExternalScriptInfo",
|
|
TableControl.Create()
|
|
.AddHeader(width: 15)
|
|
.AddHeader()
|
|
.AddHeader()
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("CommandType")
|
|
.AddPropertyColumn("Name")
|
|
.AddPropertyColumn("Path")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_FunctionInfo()
|
|
{
|
|
yield return new FormatViewDefinition("FunctionInfo",
|
|
TableControl.Create()
|
|
.AddHeader(width: 15)
|
|
.AddHeader()
|
|
.AddHeader()
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("CommandType")
|
|
.AddPropertyColumn("Name")
|
|
.AddPropertyColumn("Function")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_FilterInfo()
|
|
{
|
|
yield return new FormatViewDefinition("FilterInfo",
|
|
TableControl.Create()
|
|
.AddHeader(width: 15)
|
|
.AddHeader()
|
|
.AddHeader()
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("CommandType")
|
|
.AddPropertyColumn("Name")
|
|
.AddPropertyColumn("Filter")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_AliasInfo()
|
|
{
|
|
yield return new FormatViewDefinition("AliasInfo",
|
|
TableControl.Create()
|
|
.AddHeader(width: 15)
|
|
.AddHeader()
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("CommandType")
|
|
.AddPropertyColumn("DisplayName")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
|
|
yield return new FormatViewDefinition("System.Management.Automation.AliasInfo",
|
|
ListControl.Create()
|
|
.StartEntry()
|
|
.AddItemProperty(@"DisplayName")
|
|
.AddItemProperty(@"CommandType")
|
|
.AddItemProperty(@"Definition")
|
|
.AddItemProperty(@"ReferencedCommand")
|
|
.AddItemProperty(@"ResolvedCommand")
|
|
.EndEntry()
|
|
.EndList());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_Microsoft_PowerShell_Commands_ListCommand_MemberInfo()
|
|
{
|
|
yield return new FormatViewDefinition("memberinfo",
|
|
TableControl.Create()
|
|
.AddHeader(label: "Class", width: 11)
|
|
.AddHeader(width: 25)
|
|
.AddHeader()
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("MemberClass")
|
|
.AddPropertyColumn("Name")
|
|
.AddPropertyColumn("MemberData")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
|
|
yield return new FormatViewDefinition("Microsoft.PowerShell.Commands.ListCommand+MemberInfo",
|
|
ListControl.Create()
|
|
.StartEntry()
|
|
.AddItemProperty(@"Name")
|
|
.AddItemProperty(@"MemberClass")
|
|
.AddItemProperty(@"MemberData")
|
|
.EndEntry()
|
|
.EndList());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_Microsoft_PowerShell_Commands_ActiveDirectoryProvider_ADPSDriveInfo_System_Management_Automation_PSDriveInfo()
|
|
{
|
|
yield return new FormatViewDefinition("drive",
|
|
TableControl.Create()
|
|
.AddHeader(width: 10)
|
|
.AddHeader(label: "Used (GB)", width: 13)
|
|
.AddHeader(label: "Free (GB)", width: 13)
|
|
.AddHeader(label: "Provider", width: 13)
|
|
.AddHeader(label: "Root", width: 35)
|
|
.AddHeader()
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("Name")
|
|
.AddScriptBlockColumn(@"if($_.Used -or $_.Free) { ""{0:###0.00}"" -f ($_.Used / 1GB) }", alignment: Alignment.Right)
|
|
.AddScriptBlockColumn(@"if($_.Used -or $_.Free) { ""{0:###0.00}"" -f ($_.Free / 1GB) }", alignment: Alignment.Right)
|
|
.AddScriptBlockColumn("$_.Provider.Name")
|
|
.AddScriptBlockColumn("if($null -ne $_.DisplayRoot) { $_.DisplayRoot } else { $_.Root }")
|
|
.AddPropertyColumn("CurrentLocation", alignment: Alignment.Right)
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_ProviderInfo()
|
|
{
|
|
yield return new FormatViewDefinition("provider",
|
|
TableControl.Create()
|
|
.AddHeader(width: 20)
|
|
.AddHeader()
|
|
.AddHeader()
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("Name")
|
|
.AddPropertyColumn("Capabilities")
|
|
.AddPropertyColumn("Drives")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
|
|
yield return new FormatViewDefinition("provider",
|
|
ListControl.Create()
|
|
.StartEntry()
|
|
.AddItemProperty(@"Name")
|
|
.AddItemProperty(@"Drives")
|
|
.AddItemProperty(@"Path")
|
|
.AddItemProperty(@"Home")
|
|
.AddItemProperty(@"Description")
|
|
.AddItemProperty(@"Capabilities")
|
|
.AddItemProperty(@"ImplementingType")
|
|
.AddItemProperty(@"AssemblyInfo")
|
|
.EndEntry()
|
|
.EndList());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_CmdletInfo()
|
|
{
|
|
yield return new FormatViewDefinition("System.Management.Automation.CmdletInfo",
|
|
ListControl.Create()
|
|
.StartEntry()
|
|
.AddItemProperty(@"Name")
|
|
.AddItemProperty(@"CommandType")
|
|
.AddItemProperty(@"Definition")
|
|
.AddItemProperty(@"Path")
|
|
.AddItemProperty(@"AssemblyInfo")
|
|
.AddItemProperty(@"DLL")
|
|
.AddItemProperty(@"HelpFile")
|
|
.AddItemProperty(@"ParameterSets")
|
|
.AddItemProperty(@"ImplementingType")
|
|
.AddItemProperty(@"Verb")
|
|
.AddItemProperty(@"Noun")
|
|
.EndEntry()
|
|
.EndList());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_FilterInfo_System_Management_Automation_FunctionInfo()
|
|
{
|
|
yield return new FormatViewDefinition("System.Management.Automation.CommandInfo",
|
|
ListControl.Create()
|
|
.StartEntry()
|
|
.AddItemProperty(@"Name")
|
|
.AddItemProperty(@"CommandType")
|
|
.AddItemProperty(@"Definition")
|
|
.EndEntry()
|
|
.EndList());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_PSDriveInfo()
|
|
{
|
|
yield return new FormatViewDefinition("System.Management.Automation.PSDriveInfo",
|
|
ListControl.Create()
|
|
.StartEntry()
|
|
.AddItemProperty(@"Name")
|
|
.AddItemProperty(@"Description")
|
|
.AddItemProperty(@"Provider")
|
|
.AddItemProperty(@"Root")
|
|
.AddItemProperty(@"CurrentLocation")
|
|
.EndEntry()
|
|
.EndList());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_ShellVariable()
|
|
{
|
|
yield return new FormatViewDefinition("ShellVariable",
|
|
ListControl.Create()
|
|
.StartEntry()
|
|
.AddItemProperty(@"Name")
|
|
.AddItemProperty(@"Value")
|
|
.EndEntry()
|
|
.EndList());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_ScriptBlock()
|
|
{
|
|
yield return new FormatViewDefinition("ScriptBlock",
|
|
CustomControl.Create(outOfBand: true)
|
|
.StartEntry()
|
|
.AddScriptBlockExpressionBinding(@"$_")
|
|
.EndEntry()
|
|
.EndControl());
|
|
}
|
|
|
|
// This generates a custom view for ErrorRecords and Exceptions making
|
|
// specific nested types defined in $expandTypes visible. It also handles
|
|
// IEnumerable types. Nested types are indented by 4 spaces.
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_GetError()
|
|
{
|
|
yield return new FormatViewDefinition("GetErrorInstance",
|
|
CustomControl.Create()
|
|
.GroupByProperty("PSErrorIndex", label: "ErrorIndex")
|
|
.StartEntry()
|
|
.AddScriptBlockExpressionBinding(@"
|
|
Set-StrictMode -Off
|
|
|
|
$maxDepth = 10
|
|
$ellipsis = ""`u{2026}""
|
|
$resetColor = ''
|
|
if ($Host.UI.SupportsVirtualTerminal -and !(Test-Path env:__SuppressAnsiEscapeSequences)) {
|
|
$resetColor = [System.Management.Automation.VTUtility]::GetEscapeSequence(
|
|
[System.Management.Automation.VTUtility+VT]::Reset
|
|
)
|
|
}
|
|
|
|
function Get-VT100Color([ConsoleColor] $color) {
|
|
if (!$Host.UI.SupportsVirtualTerminal -or (Test-Path env:__SuppressAnsiEscapeSequences)) {
|
|
return ''
|
|
}
|
|
|
|
return [System.Management.Automation.VTUtility]::GetEscapeSequence($color)
|
|
}
|
|
|
|
function Show-ErrorRecord($obj, [int]$indent = 0, [int]$depth = 1) {
|
|
$newline = [Environment]::Newline
|
|
$output = [System.Text.StringBuilder]::new()
|
|
$prefix = ' ' * $indent
|
|
$accentColor = ''
|
|
|
|
if ($null -ne $Host.PrivateData) {
|
|
$accentColor = Get-VT100Color ($Host.PrivateData.FormatAccentColor ?? $Host.PrivateData.ErrorForegroundColor)
|
|
}
|
|
|
|
$expandTypes = @(
|
|
'Microsoft.Rest.HttpRequestMessageWrapper'
|
|
'Microsoft.Rest.HttpResponseMessageWrapper'
|
|
'System.Management.Automation.InvocationInfo'
|
|
)
|
|
|
|
# if object is an Exception, add an ExceptionType property
|
|
if ($obj -is [Exception]) {
|
|
$obj | Add-Member -NotePropertyName Type -NotePropertyValue $obj.GetType().FullName -ErrorAction Ignore
|
|
}
|
|
|
|
# first find the longest property so we can indent properly
|
|
$propLength = 0
|
|
foreach ($prop in $obj.PSObject.Properties) {
|
|
if ($prop.Value -ne $null -and $prop.Value -ne [string]::Empty -and $prop.Name.Length -gt $propLength) {
|
|
$propLength = $prop.Name.Length
|
|
}
|
|
}
|
|
|
|
$addedProperty = $false
|
|
foreach ($prop in $obj.PSObject.Properties) {
|
|
|
|
# don't show empty properties or our added property for $error[index]
|
|
if ($prop.Value -ne $null -and $prop.Value -ne [string]::Empty -and $prop.Value.count -gt 0 -and $prop.Name -ne 'PSErrorIndex') {
|
|
$addedProperty = $true
|
|
$null = $output.Append($prefix)
|
|
$null = $output.Append($accentColor)
|
|
$null = $output.Append($prop.Name)
|
|
$propNameIndent = ' ' * ($propLength - $prop.Name.Length)
|
|
$null = $output.Append($propNameIndent)
|
|
$null = $output.Append(' : ')
|
|
$null = $output.Append($resetColor)
|
|
|
|
$newIndent = $indent + 4
|
|
|
|
# only show nested objects that are Exceptions, ErrorRecords, or types defined in $expandTypes and types not in $ignoreTypes
|
|
if ($prop.Value -is [Exception] -or $prop.Value -is [System.Management.Automation.ErrorRecord] -or
|
|
$expandTypes -contains $prop.TypeNameOfValue -or ($prop.TypeNames -ne $null -and $expandTypes -contains $prop.TypeNames[0])) {
|
|
|
|
if ($depth -ge $maxDepth) {
|
|
$null = $output.Append($ellipsis)
|
|
}
|
|
else {
|
|
$null = $output.Append($newline)
|
|
$null = $output.Append((Show-ErrorRecord $prop.Value $newIndent ($depth + 1)))
|
|
}
|
|
}
|
|
# `TargetSite` has many members that are not useful visually, so we have a reduced view of the relevant members
|
|
elseif ($prop.Name -eq 'TargetSite' -and $prop.Value.GetType().Name -eq 'RuntimeMethodInfo') {
|
|
if ($depth -ge $maxDepth) {
|
|
$null = $output.Append($ellipsis)
|
|
}
|
|
else {
|
|
$targetSite = [PSCustomObject]@{
|
|
Name = $prop.Value.Name
|
|
DeclaringType = $prop.Value.DeclaringType
|
|
MemberType = $prop.Value.MemberType
|
|
Module = $prop.Value.Module
|
|
}
|
|
|
|
$null = $output.Append($newline)
|
|
$null = $output.Append((Show-ErrorRecord $targetSite $newIndent ($depth + 1)))
|
|
}
|
|
}
|
|
# `StackTrace` is handled specifically because the lines are typically long but necessary so they are left justified without additional indentation
|
|
elseif ($prop.Name -eq 'StackTrace') {
|
|
# for a stacktrace which is usually quite wide with info, we left justify it
|
|
$null = $output.Append($newline)
|
|
$null = $output.Append($prop.Value)
|
|
}
|
|
# Dictionary and Hashtable we want to show as Key/Value pairs, we don't do the extra whitespace alignment here
|
|
elseif ($prop.Value.GetType().Name.StartsWith('Dictionary') -or $prop.Value.GetType().Name -eq 'Hashtable') {
|
|
$isFirstElement = $true
|
|
foreach ($key in $prop.Value.Keys) {
|
|
if ($isFirstElement) {
|
|
$null = $output.Append($newline)
|
|
}
|
|
|
|
if ($key -eq 'Authorization') {
|
|
$null = $output.Append(""${prefix} ${accentColor}${key} : ${resetColor}${ellipsis}${newline}"")
|
|
}
|
|
else {
|
|
$null = $output.Append(""${prefix} ${accentColor}${key} : ${resetColor}$($prop.Value[$key])${newline}"")
|
|
}
|
|
|
|
$isFirstElement = $false
|
|
}
|
|
}
|
|
# if the object implements IEnumerable and not a string, we try to show each object
|
|
# We ignore the `Data` property as it can contain lots of type information by the interpreter that isn't useful here
|
|
elseif (!($prop.Value -is [System.String]) -and $prop.Value.GetType().GetInterface('IEnumerable') -ne $null -and $prop.Name -ne 'Data') {
|
|
|
|
if ($depth -ge $maxDepth) {
|
|
$null = $output.Append($ellipsis)
|
|
}
|
|
else {
|
|
$isFirstElement = $true
|
|
foreach ($value in $prop.Value) {
|
|
$null = $output.Append($newline)
|
|
if (!$isFirstElement) {
|
|
$null = $output.Append($newline)
|
|
}
|
|
$null = $output.Append((Show-ErrorRecord $value $newIndent ($depth + 1)))
|
|
$isFirstElement = $false
|
|
}
|
|
}
|
|
}
|
|
# Anything else, we convert to string.
|
|
# ToString() can throw so we use LanguagePrimitives.TryConvertTo() to hide a convert error
|
|
else {
|
|
$value = $null
|
|
if ([System.Management.Automation.LanguagePrimitives]::TryConvertTo($prop.Value, [string], [ref]$value) -and $value -ne $null)
|
|
{
|
|
$isFirstLine = $true
|
|
if ($value.Contains($newline)) {
|
|
# the 3 is to account for ' : '
|
|
$valueIndent = ' ' * ($propLength + 3)
|
|
# need to trim any extra whitespace already in the text
|
|
foreach ($line in $value.Split($newline)) {
|
|
if (!$isFirstLine) {
|
|
$null = $output.Append(""${newline}${prefix}${valueIndent}"")
|
|
}
|
|
$null = $output.Append($line.Trim())
|
|
$isFirstLine = $false
|
|
}
|
|
}
|
|
else {
|
|
$null = $output.Append($value)
|
|
}
|
|
}
|
|
}
|
|
|
|
$null = $output.Append($newline)
|
|
}
|
|
}
|
|
|
|
# if we had added nested properties, we need to remove the last newline
|
|
if ($addedProperty) {
|
|
$null = $output.Remove($output.Length - $newline.Length, $newline.Length)
|
|
}
|
|
|
|
$output.ToString()
|
|
}
|
|
|
|
# Add back original typename and remove PSExtendedError
|
|
if ($_.PSObject.TypeNames.Contains('System.Management.Automation.ErrorRecord#PSExtendedError')) {
|
|
$_.PSObject.TypeNames.Add('System.Management.Automation.ErrorRecord')
|
|
$null = $_.PSObject.TypeNames.Remove('System.Management.Automation.ErrorRecord#PSExtendedError')
|
|
}
|
|
elseif ($_.PSObject.TypeNames.Contains('System.Exception#PSExtendedError')) {
|
|
$_.PSObject.TypeNames.Add('System.Exception')
|
|
$null = $_.PSObject.TypeNames.Remove('System.Exception#PSExtendedError')
|
|
}
|
|
|
|
Show-ErrorRecord $_
|
|
")
|
|
.EndEntry()
|
|
.EndControl());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_ErrorRecord()
|
|
{
|
|
yield return new FormatViewDefinition("ErrorInstance",
|
|
CustomControl.Create(outOfBand: true)
|
|
.StartEntry()
|
|
.AddScriptBlockExpressionBinding(@"
|
|
if (@('NativeCommandErrorMessage','NativeCommandError') -notcontains $_.FullyQualifiedErrorId -and @('CategoryView','ConciseView') -notcontains $ErrorView)
|
|
{
|
|
$myinv = $_.InvocationInfo
|
|
if ($myinv -and $myinv.MyCommand)
|
|
{
|
|
switch -regex ( $myinv.MyCommand.CommandType )
|
|
{
|
|
([System.Management.Automation.CommandTypes]::ExternalScript)
|
|
{
|
|
if ($myinv.MyCommand.Path)
|
|
{
|
|
$myinv.MyCommand.Path + ' : '
|
|
}
|
|
|
|
break
|
|
}
|
|
|
|
([System.Management.Automation.CommandTypes]::Script)
|
|
{
|
|
if ($myinv.MyCommand.ScriptBlock)
|
|
{
|
|
$myinv.MyCommand.ScriptBlock.ToString() + ' : '
|
|
}
|
|
|
|
break
|
|
}
|
|
default
|
|
{
|
|
if ($myinv.InvocationName -match '^[&\.]?$')
|
|
{
|
|
if ($myinv.MyCommand.Name)
|
|
{
|
|
$myinv.MyCommand.Name + ' : '
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$myinv.InvocationName + ' : '
|
|
}
|
|
|
|
break
|
|
}
|
|
}
|
|
}
|
|
elseif ($myinv -and $myinv.InvocationName)
|
|
{
|
|
$myinv.InvocationName + ' : '
|
|
}
|
|
}
|
|
")
|
|
.AddScriptBlockExpressionBinding(@"
|
|
Set-StrictMode -Off
|
|
$newline = [Environment]::Newline
|
|
|
|
function Get-ConciseViewPositionMessage {
|
|
|
|
$resetColor = ''
|
|
if ($Host.UI.SupportsVirtualTerminal -and !(Test-Path env:__SuppressAnsiEscapeSequences)) {
|
|
$resetColor = [System.Management.Automation.VTUtility]::GetEscapeSequence(
|
|
[System.Management.Automation.VTUtility+VT]::Reset
|
|
)
|
|
}
|
|
|
|
function Get-VT100Color([ConsoleColor] $color) {
|
|
if (!$Host.UI.SupportsVirtualTerminal -or (Test-Path env:__SuppressAnsiEscapeSequences)) {
|
|
return ''
|
|
}
|
|
|
|
return [System.Management.Automation.VTUtility]::GetEscapeSequence($color)
|
|
}
|
|
|
|
# return length of string sans VT100 codes
|
|
function Get-RawStringLength($string) {
|
|
$vtCodes = ""`e[0m"", ""`e[2;30m"", ""`e[2;31m"", ""`e[2;32m"", ""`e[2;33m"", ""`e[2;34m"",
|
|
""`e[2;35m"", ""`e[2;36m"", ""`e[2;37m"", ""`e[1;30m"", ""`e[1;31m"", ""`e[1;32m"",
|
|
""`e[1;33m"", ""`e[1;34m"", ""`e[1;35m"", ""`e[1;36m"", ""`e[1;37m""
|
|
|
|
$newString = $string
|
|
foreach ($vtCode in $vtCodes) {
|
|
$newString = $newString.Replace($vtCode, '')
|
|
}
|
|
|
|
return $newString.Length
|
|
}
|
|
|
|
# returns a string cut to last whitespace
|
|
function Get-TruncatedString($string, [int]$length) {
|
|
|
|
if ($string.Length -le $length) {
|
|
return $string
|
|
}
|
|
|
|
return ($string.Substring(0,$length) -split '\s',-2)[0]
|
|
}
|
|
|
|
$errorColor = ''
|
|
$accentColor = ''
|
|
|
|
if ($null -ne $Host.PrivateData) {
|
|
$errorColor = Get-VT100Color $Host.PrivateData.ErrorForegroundColor
|
|
$accentColor = Get-VT100Color ($Host.PrivateData.ErrorAccentColor ?? $errorColor)
|
|
}
|
|
|
|
$posmsg = ''
|
|
$headerWhitespace = ''
|
|
$offsetWhitespace = ''
|
|
$message = ''
|
|
$prefix = ''
|
|
|
|
if ($myinv -and $myinv.ScriptName -or $myinv.ScriptLineNumber -gt 1 -or $err.CategoryInfo.Category -eq 'ParserError') {
|
|
$useTargetObject = $false
|
|
|
|
# Handle case where there is a TargetObject and we can show the error at the target rather than the script source
|
|
if ($_.TargetObject.Line -and $_.TargetObject.LineText) {
|
|
$posmsg = ""${resetcolor}$($_.TargetObject.File)${newline}""
|
|
$useTargetObject = $true
|
|
}
|
|
elseif ($myinv.ScriptName) {
|
|
if ($env:TERM_PROGRAM -eq 'vscode') {
|
|
# If we are running in vscode, we know the file:line:col links are clickable so we use this format
|
|
$posmsg = ""${resetcolor}$($myinv.ScriptName):$($myinv.ScriptLineNumber):$($myinv.OffsetInLine)${newline}""
|
|
}
|
|
else {
|
|
$posmsg = ""${resetcolor}$($myinv.ScriptName):$($myinv.ScriptLineNumber)${newline}""
|
|
}
|
|
}
|
|
else {
|
|
$posmsg = ""${newline}""
|
|
}
|
|
|
|
if ($useTargetObject) {
|
|
$scriptLineNumber = $_.TargetObject.Line
|
|
$scriptLineNumberLength = $_.TargetObject.Line.ToString().Length
|
|
}
|
|
else {
|
|
$scriptLineNumber = $myinv.ScriptLineNumber
|
|
$scriptLineNumberLength = $myinv.ScriptLineNumber.ToString().Length
|
|
}
|
|
|
|
if ($scriptLineNumberLength -gt 4) {
|
|
$headerWhitespace = ' ' * ($scriptLineNumberLength - 4)
|
|
}
|
|
|
|
$lineWhitespace = ''
|
|
if ($scriptLineNumberLength -lt 4) {
|
|
$lineWhitespace = ' ' * (4 - $scriptLineNumberLength)
|
|
}
|
|
|
|
$verticalBar = '|'
|
|
$posmsg += ""${accentColor}${headerWhitespace}Line ${verticalBar}${newline}""
|
|
|
|
$highlightLine = ''
|
|
if ($useTargetObject) {
|
|
$line = $_.TargetObject.LineText.Trim()
|
|
$offsetLength = 0
|
|
$offsetInLine = 0
|
|
}
|
|
else {
|
|
$positionMessage = $myinv.PositionMessage.Split($newline)
|
|
$line = $positionMessage[1].Substring(1) # skip the '+' at the start
|
|
$highlightLine = $positionMessage[$positionMessage.Count - 1].Substring(1)
|
|
$offsetLength = $highlightLine.Trim().Length
|
|
$offsetInLine = $highlightLine.IndexOf('~')
|
|
}
|
|
|
|
if (-not $line.EndsWith($newline)) {
|
|
$line += $newline
|
|
}
|
|
|
|
# don't color the whole line
|
|
if ($offsetLength -lt $line.Length - 1) {
|
|
$line = $line.Insert($offsetInLine + $offsetLength, $resetColor).Insert($offsetInLine, $accentColor)
|
|
}
|
|
|
|
$posmsg += ""${accentColor}${lineWhitespace}${ScriptLineNumber} ${verticalBar} ${resetcolor}${line}""
|
|
$offsetWhitespace = ' ' * $offsetInLine
|
|
$prefix = ""${accentColor}${headerWhitespace} ${verticalBar} ${errorColor}""
|
|
if ($highlightLine -ne '') {
|
|
$posMsg += ""${prefix}${highlightLine}${newline}""
|
|
}
|
|
$message = ""${prefix}""
|
|
}
|
|
|
|
if (! $err.ErrorDetails -or ! $err.ErrorDetails.Message) {
|
|
if ($err.CategoryInfo.Category -eq 'ParserError' -and $err.Exception.Message.Contains(""~$newline"")) {
|
|
# need to parse out the relevant part of the pre-rendered positionmessage
|
|
$message += $err.Exception.Message.split(""~$newline"")[1].split(""${newline}${newline}"")[0]
|
|
}
|
|
elseif ($err.Exception) {
|
|
$message += $err.Exception.Message
|
|
}
|
|
elseif ($err.Message) {
|
|
$message += $err.Message
|
|
}
|
|
else {
|
|
$message += $err.ToString()
|
|
}
|
|
}
|
|
else {
|
|
$message += $err.ErrorDetails.Message
|
|
}
|
|
|
|
# if rendering line information, break up the message if it's wider than the console
|
|
if ($myinv -and $myinv.ScriptName -or $err.CategoryInfo.Category -eq 'ParserError') {
|
|
$prefixLength = Get-RawStringLength -string $prefix
|
|
$prefixVtLength = $prefix.Length - $prefixLength
|
|
|
|
# replace newlines in message so it lines up correct
|
|
$message = $message.Replace($newline, ' ').Replace(""`t"", ' ')
|
|
|
|
$windowWidth = 120
|
|
if ($Host.UI.RawUI -ne $null) {
|
|
$windowWidth = $Host.UI.RawUI.WindowSize.Width
|
|
}
|
|
|
|
if ($windowWidth -gt 0 -and ($message.Length - $prefixVTLength) -gt $windowWidth) {
|
|
$sb = [Text.StringBuilder]::new()
|
|
$substring = Get-TruncatedString -string $message -length ($windowWidth + $prefixVTLength)
|
|
$null = $sb.Append($substring)
|
|
$remainingMessage = $message.Substring($substring.Length).Trim()
|
|
$null = $sb.Append($newline)
|
|
while (($remainingMessage.Length + $prefixLength) -gt $windowWidth) {
|
|
$subMessage = $prefix + $remainingMessage
|
|
$substring = Get-TruncatedString -string $subMessage -length ($windowWidth + $prefixVtLength)
|
|
|
|
if ($substring.Length - $prefix.Length -gt 0)
|
|
{
|
|
$null = $sb.Append($substring)
|
|
$null = $sb.Append($newline)
|
|
$remainingMessage = $remainingMessage.Substring($substring.Length - $prefix.Length).Trim()
|
|
}
|
|
else
|
|
{
|
|
break
|
|
}
|
|
}
|
|
$null = $sb.Append($prefix + $remainingMessage.Trim())
|
|
$message = $sb.ToString()
|
|
}
|
|
|
|
$message += $newline
|
|
}
|
|
|
|
$posmsg += ""${errorColor}"" + $message
|
|
|
|
$reason = 'Error'
|
|
if ($err.Exception -and $err.Exception.WasThrownFromThrowStatement) {
|
|
$reason = 'Exception'
|
|
}
|
|
# MyCommand can be the script block, so we don't want to show that so check if it's an actual command
|
|
elseif ($myinv.MyCommand -and (Get-Command -Name $myinv.MyCommand -ErrorAction Ignore))
|
|
{
|
|
$reason = $myinv.MyCommand
|
|
}
|
|
# If it's a scriptblock, better to show the command in the scriptblock that had the error
|
|
elseif ($_.CategoryInfo.Activity) {
|
|
$reason = $_.CategoryInfo.Activity
|
|
}
|
|
elseif ($myinv.MyCommand) {
|
|
$reason = $myinv.MyCommand
|
|
}
|
|
elseif ($myinv.InvocationName) {
|
|
$reason = $myinv.InvocationName
|
|
}
|
|
elseif ($err.CategoryInfo.Category) {
|
|
$reason = $err.CategoryInfo.Category
|
|
}
|
|
elseif ($err.CategoryInfo.Reason) {
|
|
$reason = $err.CategoryInfo.Reason
|
|
}
|
|
|
|
$errorMsg = 'Error'
|
|
|
|
""${errorColor}${reason}: ${posmsg}${resetcolor}""
|
|
}
|
|
|
|
$myinv = $_.InvocationInfo
|
|
$err = $_
|
|
if (!$myinv -and $_.ErrorRecord -and $_.ErrorRecord.InvocationInfo) {
|
|
$err = $_.ErrorRecord
|
|
$myinv = $err.InvocationInfo
|
|
}
|
|
|
|
if ($err.FullyQualifiedErrorId -eq 'NativeCommandErrorMessage' -or $err.FullyQualifiedErrorId -eq 'NativeCommandError') {
|
|
$err.Exception.Message
|
|
}
|
|
else
|
|
{
|
|
$myinv = $err.InvocationInfo
|
|
if ($ErrorView -eq 'ConciseView') {
|
|
$posmsg = Get-ConciseViewPositionMessage
|
|
}
|
|
elseif ($myinv -and ($myinv.MyCommand -or ($err.CategoryInfo.Category -ne 'ParserError'))) {
|
|
$posmsg = $myinv.PositionMessage
|
|
} else {
|
|
$posmsg = ''
|
|
}
|
|
|
|
if ($posmsg -ne '')
|
|
{
|
|
$posmsg = $newline + $posmsg
|
|
}
|
|
|
|
if ($err.PSMessageDetails) {
|
|
$posmsg = ' : ' + $err.PSMessageDetails + $posmsg
|
|
}
|
|
|
|
if ($ErrorView -eq 'ConciseView') {
|
|
return $posmsg
|
|
}
|
|
|
|
$indent = 4
|
|
|
|
$errorCategoryMsg = $err.ErrorCategory_Message
|
|
|
|
if ($null -ne $errorCategoryMsg)
|
|
{
|
|
$indentString = '+ CategoryInfo : ' + $err.ErrorCategory_Message
|
|
}
|
|
else
|
|
{
|
|
$indentString = '+ CategoryInfo : ' + $err.CategoryInfo
|
|
}
|
|
|
|
$posmsg += $newline + $indentString
|
|
|
|
$indentString = ""+ FullyQualifiedErrorId : "" + $err.FullyQualifiedErrorId
|
|
$posmsg += $newline + $indentString
|
|
|
|
$originInfo = $err.OriginInfo
|
|
|
|
if (($null -ne $originInfo) -and ($null -ne $originInfo.PSComputerName))
|
|
{
|
|
$indentString = ""+ PSComputerName : "" + $originInfo.PSComputerName
|
|
$posmsg += $newline + $indentString
|
|
}
|
|
|
|
if ($ErrorView -eq 'CategoryView') {
|
|
$err.CategoryInfo.GetMessage()
|
|
}
|
|
elseif (! $err.ErrorDetails -or ! $err.ErrorDetails.Message) {
|
|
$err.Exception.Message + $posmsg + $newline
|
|
} else {
|
|
$err.ErrorDetails.Message + $posmsg
|
|
}
|
|
}
|
|
")
|
|
.EndEntry()
|
|
.EndControl());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_WarningRecord()
|
|
{
|
|
yield return new FormatViewDefinition("WarningRecord",
|
|
CustomControl.Create(outOfBand: true)
|
|
.StartEntry()
|
|
.AddPropertyExpressionBinding(@"Message")
|
|
.EndEntry()
|
|
.EndControl());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_Deserialized_System_Management_Automation_WarningRecord()
|
|
{
|
|
yield return new FormatViewDefinition("DeserializedWarningRecord",
|
|
CustomControl.Create(outOfBand: true)
|
|
.StartEntry()
|
|
.AddPropertyExpressionBinding(@"InformationalRecord_Message")
|
|
.EndEntry()
|
|
.EndControl());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_InformationRecord()
|
|
{
|
|
yield return new FormatViewDefinition("InformationRecord",
|
|
CustomControl.Create(outOfBand: true)
|
|
.StartEntry()
|
|
.AddScriptBlockExpressionBinding(@"$_.ToString()")
|
|
.EndEntry()
|
|
.EndControl());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_CommandParameterSetInfo()
|
|
{
|
|
var FmtParameterAttributes = CustomControl.Create()
|
|
.StartEntry()
|
|
.StartFrame(leftIndent: 2)
|
|
.AddNewline()
|
|
.EndFrame()
|
|
.EndEntry()
|
|
.EndControl();
|
|
|
|
var FmtParameterInfo = CustomControl.Create()
|
|
.StartEntry()
|
|
.AddNewline()
|
|
.StartFrame(leftIndent: 2)
|
|
.AddText("Parameter Name: ")
|
|
.AddPropertyExpressionBinding(@"Name")
|
|
.AddNewline()
|
|
.StartFrame(leftIndent: 2)
|
|
.AddText("ParameterType = ")
|
|
.AddPropertyExpressionBinding(@"ParameterType")
|
|
.AddNewline()
|
|
.AddText("Position = ")
|
|
.AddPropertyExpressionBinding(@"Position")
|
|
.AddNewline()
|
|
.AddText("IsMandatory = ")
|
|
.AddPropertyExpressionBinding(@"IsMandatory")
|
|
.AddNewline()
|
|
.AddText("IsDynamic = ")
|
|
.AddPropertyExpressionBinding(@"IsDynamic")
|
|
.AddNewline()
|
|
.AddText("HelpMessage = ")
|
|
.AddPropertyExpressionBinding(@"HelpMessage")
|
|
.AddNewline()
|
|
.AddText("ValueFromPipeline = ")
|
|
.AddPropertyExpressionBinding(@"ValueFromPipeline")
|
|
.AddNewline()
|
|
.AddText("ValueFromPipelineByPropertyName = ")
|
|
.AddPropertyExpressionBinding(@"ValueFromPipelineByPropertyName")
|
|
.AddNewline()
|
|
.AddText("ValueFromRemainingArguments = ")
|
|
.AddPropertyExpressionBinding(@"ValueFromRemainingArguments")
|
|
.AddNewline()
|
|
.AddText("Aliases = ")
|
|
.AddPropertyExpressionBinding(@"Aliases")
|
|
.AddNewline()
|
|
.AddText("Attributes =")
|
|
.AddNewline()
|
|
.AddPropertyExpressionBinding(@"Attributes", enumerateCollection: true, customControl: FmtParameterAttributes)
|
|
.EndFrame()
|
|
.EndFrame()
|
|
.EndEntry()
|
|
.EndControl();
|
|
|
|
yield return new FormatViewDefinition("CommandParameterSetInfo",
|
|
CustomControl.Create()
|
|
.StartEntry()
|
|
.AddText("Parameter Set Name: ")
|
|
.AddPropertyExpressionBinding(@"Name")
|
|
.AddNewline()
|
|
.AddText("Is default parameter set: ")
|
|
.AddPropertyExpressionBinding(@"IsDefault")
|
|
.AddNewline()
|
|
.AddPropertyExpressionBinding(@"Parameters", enumerateCollection: true, customControl: FmtParameterInfo)
|
|
.AddNewline()
|
|
.EndEntry()
|
|
.EndControl());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_Runspaces_Runspace()
|
|
{
|
|
yield return new FormatViewDefinition("Runspace",
|
|
TableControl.Create()
|
|
.AddHeader(Alignment.Right, label: "Id", width: 3)
|
|
.AddHeader(Alignment.Left, label: "Name", width: 15)
|
|
.AddHeader(Alignment.Left, label: "ComputerName", width: 15)
|
|
.AddHeader(Alignment.Left, label: "Type", width: 13)
|
|
.AddHeader(Alignment.Left, label: "State", width: 13)
|
|
.AddHeader(Alignment.Left, label: "Availability", width: 15)
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("Id")
|
|
.AddPropertyColumn("Name")
|
|
.AddScriptBlockColumn(@"
|
|
if ($null -ne $_.ConnectionInfo)
|
|
{
|
|
$_.ConnectionInfo.ComputerName
|
|
}
|
|
else
|
|
{
|
|
""localhost""
|
|
}
|
|
")
|
|
.AddScriptBlockColumn(@"
|
|
if ($null -ne $_.ConnectionInfo)
|
|
{
|
|
""Remote""
|
|
}
|
|
else
|
|
{
|
|
""Local""
|
|
}
|
|
")
|
|
.AddScriptBlockColumn("$_.RunspaceStateInfo.State")
|
|
.AddScriptBlockColumn(@"
|
|
if (($null -ne $_.Debugger) -and ($_.Debugger.InBreakpoint))
|
|
{
|
|
""InBreakpoint""
|
|
}
|
|
else
|
|
{
|
|
$_.RunspaceAvailability
|
|
}
|
|
")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_Runspaces_PSSession()
|
|
{
|
|
yield return new FormatViewDefinition("PSSession",
|
|
TableControl.Create()
|
|
.AddHeader(Alignment.Right, label: "Id", width: 3)
|
|
.AddHeader(Alignment.Left, label: "Name", width: 15)
|
|
.AddHeader(Alignment.Left, label: "Transport", width: 9)
|
|
.AddHeader(Alignment.Left, label: "ComputerName", width: 15)
|
|
.AddHeader(Alignment.Left, label: "ComputerType", width: 15)
|
|
.AddHeader(Alignment.Left, label: "State", width: 13)
|
|
.AddHeader(Alignment.Left, label: "ConfigurationName", width: 20)
|
|
.AddHeader(Alignment.Right, label: "Availability", width: 13)
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("Id")
|
|
.AddPropertyColumn("Name")
|
|
.AddPropertyColumn("Transport")
|
|
.AddPropertyColumn("ComputerName")
|
|
.AddPropertyColumn("ComputerType")
|
|
.AddPropertyColumn("State")
|
|
.AddPropertyColumn("ConfigurationName")
|
|
.AddPropertyColumn("Availability")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_Job()
|
|
{
|
|
yield return new FormatViewDefinition("Job",
|
|
TableControl.Create()
|
|
.AddHeader(Alignment.Left, label: "Id", width: 6)
|
|
.AddHeader(Alignment.Left, label: "Name", width: 15)
|
|
.AddHeader(Alignment.Left, label: "PSJobTypeName", width: 15)
|
|
.AddHeader(Alignment.Left, label: "State", width: 13)
|
|
.AddHeader(Alignment.Left, label: "HasMoreData", width: 15)
|
|
.AddHeader(Alignment.Left, label: "Location", width: 20)
|
|
.AddHeader(Alignment.Left, label: "Command", width: 25)
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("Id")
|
|
.AddPropertyColumn("Name")
|
|
.AddPropertyColumn("PSJobTypeName")
|
|
.AddPropertyColumn("State")
|
|
.AddPropertyColumn("HasMoreData")
|
|
.AddPropertyColumn("Location")
|
|
.AddPropertyColumn("Command")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_Deserialized_Microsoft_PowerShell_Commands_TextMeasureInfo()
|
|
{
|
|
yield return new FormatViewDefinition("Microsoft.PowerShell.Commands.TextMeasureInfo",
|
|
TableControl.Create()
|
|
.AddHeader(label: "Lines")
|
|
.AddHeader(label: "Words")
|
|
.AddHeader(label: "Characters")
|
|
.AddHeader(label: "Property")
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("Lines")
|
|
.AddPropertyColumn("Words")
|
|
.AddPropertyColumn("Characters")
|
|
.AddPropertyColumn("Property")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_Deserialized_Microsoft_PowerShell_Commands_GenericMeasureInfo()
|
|
{
|
|
yield return new FormatViewDefinition("Microsoft.PowerShell.Commands.GenericMeasureInfo",
|
|
ListControl.Create()
|
|
.StartEntry()
|
|
.AddItemProperty(@"Count")
|
|
.AddItemProperty(@"Average")
|
|
.AddItemProperty(@"Sum")
|
|
.AddItemProperty(@"Maximum")
|
|
.AddItemProperty(@"Minimum")
|
|
.AddItemProperty(@"Property")
|
|
.EndEntry()
|
|
.EndList());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_CallStackFrame()
|
|
{
|
|
yield return new FormatViewDefinition("CallStackFrame",
|
|
TableControl.Create()
|
|
.AddHeader(label: "Command")
|
|
.AddHeader(label: "Arguments")
|
|
.AddHeader(label: "Location")
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("Command")
|
|
.AddPropertyColumn("Arguments")
|
|
.AddPropertyColumn("Location")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_BreakpointTypes()
|
|
{
|
|
yield return new FormatViewDefinition("Breakpoint",
|
|
TableControl.Create()
|
|
.AddHeader(Alignment.Right, label: "ID", width: 4)
|
|
.AddHeader(label: "Script")
|
|
.AddHeader(Alignment.Right, label: "Line", width: 4)
|
|
.AddHeader(label: "Command")
|
|
.AddHeader(label: "Variable")
|
|
.AddHeader(label: "Action")
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("ID")
|
|
.AddScriptBlockColumn("if ($_.Script) { [System.IO.Path]::GetFileName($_.Script) }")
|
|
.AddPropertyColumn("Line")
|
|
.AddPropertyColumn("Command")
|
|
.AddPropertyColumn("Variable")
|
|
.AddPropertyColumn("Action")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
|
|
yield return new FormatViewDefinition("Breakpoint",
|
|
ListControl.Create()
|
|
.StartEntry(entrySelectedByType: new[] { "System.Management.Automation.LineBreakpoint" })
|
|
.AddItemProperty(@"ID")
|
|
.AddItemProperty(@"Script")
|
|
.AddItemProperty(@"Line")
|
|
.AddItemProperty(@"Column")
|
|
.AddItemProperty(@"Enabled")
|
|
.AddItemProperty(@"HitCount")
|
|
.AddItemProperty(@"Action")
|
|
.EndEntry()
|
|
.StartEntry(entrySelectedByType: new[] { "System.Management.Automation.VariableBreakpoint" })
|
|
.AddItemProperty(@"ID")
|
|
.AddItemProperty(@"Variable")
|
|
.AddItemProperty(@"AccessMode")
|
|
.AddItemProperty(@"Enabled")
|
|
.AddItemProperty(@"HitCount")
|
|
.AddItemProperty(@"Action")
|
|
.EndEntry()
|
|
.StartEntry(entrySelectedByType: new[] { "System.Management.Automation.CommandBreakpoint" })
|
|
.AddItemProperty(@"ID")
|
|
.AddItemProperty(@"Command")
|
|
.AddItemProperty(@"Enabled")
|
|
.AddItemProperty(@"HitCount")
|
|
.AddItemProperty(@"Action")
|
|
.EndEntry()
|
|
.StartEntry()
|
|
.AddItemProperty(@"ID")
|
|
.AddItemProperty(@"Script")
|
|
.AddItemProperty(@"Enabled")
|
|
.AddItemProperty(@"HitCount")
|
|
.AddItemProperty(@"Action")
|
|
.EndEntry()
|
|
.EndList());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_Microsoft_PowerShell_Commands_PSSessionConfigurationCommands_PSSessionConfiguration()
|
|
{
|
|
yield return new FormatViewDefinition("PSSessionConfiguration",
|
|
ListControl.Create()
|
|
.StartEntry()
|
|
.AddItemProperty(@"Name")
|
|
.AddItemProperty(@"PSVersion")
|
|
.AddItemProperty(@"StartupScript")
|
|
.AddItemProperty(@"RunAsUser")
|
|
.AddItemProperty(@"Permission")
|
|
.EndEntry()
|
|
.EndList());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_Microsoft_PowerShell_Commands_ComputerChangeInfo()
|
|
{
|
|
yield return new FormatViewDefinition("Microsoft.PowerShell.Commands.ComputerChangeInfo",
|
|
TableControl.Create()
|
|
.AddHeader(Alignment.Left, label: "HasSucceeded", width: 12)
|
|
.AddHeader(label: "ComputerName", width: 25)
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("HasSucceeded")
|
|
.AddPropertyColumn("ComputerName")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_Microsoft_PowerShell_Commands_RenameComputerChangeInfo()
|
|
{
|
|
yield return new FormatViewDefinition("Microsoft.PowerShell.Commands.RenameComputerChangeInfo",
|
|
TableControl.Create()
|
|
.AddHeader(Alignment.Left, label: "HasSucceeded", width: 12)
|
|
.AddHeader(label: "OldComputerName", width: 25)
|
|
.AddHeader(label: "NewComputerName", width: 25)
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("HasSucceeded")
|
|
.AddPropertyColumn("OldComputerName")
|
|
.AddPropertyColumn("NewComputerName")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_ModuleInfoGrouping(CustomControl[] sharedControls)
|
|
{
|
|
yield return new FormatViewDefinition("Module",
|
|
TableControl.Create()
|
|
.GroupByScriptBlock("Split-Path -Parent $_.Path | ForEach-Object { if([Version]::TryParse((Split-Path $_ -Leaf), [ref]$null)) { Split-Path -Parent $_} else {$_} } | Split-Path -Parent", customControl: sharedControls[0])
|
|
.AddHeader(Alignment.Left, width: 10)
|
|
.AddHeader(Alignment.Left, width: 10)
|
|
.AddHeader(Alignment.Left, label: "PreRelease", width: 10)
|
|
.AddHeader(Alignment.Left, width: 35)
|
|
.AddHeader(Alignment.Left, width: 9, label: "PSEdition")
|
|
.AddHeader(Alignment.Left, label: "ExportedCommands")
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("ModuleType")
|
|
.AddPropertyColumn("Version")
|
|
.AddScriptBlockColumn(@"
|
|
if ($_.PrivateData -and $_.PrivateData.PSData)
|
|
{
|
|
$_.PrivateData.PSData.PreRelease
|
|
}")
|
|
.AddPropertyColumn("Name")
|
|
.AddScriptBlockColumn(@"
|
|
$result = [System.Collections.ArrayList]::new()
|
|
$editions = $_.CompatiblePSEditions
|
|
if (-not $editions)
|
|
{
|
|
$editions = @('Desktop')
|
|
}
|
|
|
|
foreach ($edition in $editions)
|
|
{
|
|
$result += $edition.Substring(0,4)
|
|
}
|
|
|
|
($result | Sort-Object) -join ','")
|
|
.AddScriptBlockColumn("$_.ExportedCommands.Keys")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_PSModuleInfo()
|
|
{
|
|
yield return new FormatViewDefinition("Module",
|
|
TableControl.Create()
|
|
.AddHeader(Alignment.Left, width: 10)
|
|
.AddHeader(Alignment.Left, width: 10)
|
|
.AddHeader(Alignment.Left, label: "PreRelease", width: 10)
|
|
.AddHeader(Alignment.Left, width: 35)
|
|
.AddHeader(Alignment.Left, label: "ExportedCommands")
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("ModuleType")
|
|
.AddPropertyColumn("Version")
|
|
.AddScriptBlockColumn(@"
|
|
if ($_.PrivateData -and $_.PrivateData.PSData)
|
|
{
|
|
$_.PrivateData.PSData.PreRelease
|
|
}")
|
|
.AddPropertyColumn("Name")
|
|
.AddScriptBlockColumn("$_.ExportedCommands.Keys")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
|
|
yield return new FormatViewDefinition("Module",
|
|
WideControl.Create()
|
|
.AddPropertyEntry("Name")
|
|
.EndWideControl());
|
|
|
|
yield return new FormatViewDefinition("Module",
|
|
ListControl.Create()
|
|
.StartEntry()
|
|
.AddItemProperty(@"Name")
|
|
.AddItemProperty(@"Path")
|
|
.AddItemProperty(@"Description")
|
|
.AddItemProperty(@"ModuleType")
|
|
.AddItemProperty(@"Version")
|
|
.AddItemScriptBlock(
|
|
@"
|
|
if ($_.PrivateData -and $_.PrivateData.PSData)
|
|
{
|
|
$_.PrivateData.PSData.PreRelease
|
|
}",
|
|
label: "PreRelease")
|
|
.AddItemProperty(@"NestedModules")
|
|
.AddItemScriptBlock(@"$_.ExportedFunctions.Keys", label: "ExportedFunctions")
|
|
.AddItemScriptBlock(@"$_.ExportedCmdlets.Keys", label: "ExportedCmdlets")
|
|
.AddItemScriptBlock(@"$_.ExportedVariables.Keys", label: "ExportedVariables")
|
|
.AddItemScriptBlock(@"$_.ExportedAliases.Keys", label: "ExportedAliases")
|
|
.EndEntry()
|
|
.EndList());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_System_Management_Automation_ExperimentalFeature()
|
|
{
|
|
yield return new FormatViewDefinition("ExperimentalFeature",
|
|
TableControl.Create()
|
|
.AddHeader(Alignment.Left, width: 35)
|
|
.AddHeader(Alignment.Right, width: 7)
|
|
.AddHeader(Alignment.Left, width: 35)
|
|
.AddHeader(Alignment.Left)
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("Name")
|
|
.AddPropertyColumn("Enabled")
|
|
.AddPropertyColumn("Source")
|
|
.AddPropertyColumn("Description")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
|
|
yield return new FormatViewDefinition("ExperimentalFeature",
|
|
ListControl.Create()
|
|
.StartEntry()
|
|
.AddItemProperty("Name")
|
|
.AddItemProperty("Enabled")
|
|
.AddItemProperty("Source")
|
|
.AddItemProperty("Description")
|
|
.EndEntry()
|
|
.EndList());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_Microsoft_PowerShell_Commands_BasicHtmlWebResponseObject()
|
|
{
|
|
yield return new FormatViewDefinition("Microsoft.PowerShell.Commands.BasicHtmlWebResponseObject",
|
|
ListControl.Create()
|
|
.StartEntry()
|
|
.AddItemProperty(@"StatusCode")
|
|
.AddItemProperty(@"StatusDescription")
|
|
.AddItemScriptBlock(@"
|
|
$result = $_.Content
|
|
$result = $result.Substring(0, [Math]::Min($result.Length, 200) )
|
|
if($result.Length -eq 200) { $result += ""`u{2026}"" }
|
|
|
|
$result
|
|
", label: "Content")
|
|
.AddItemScriptBlock(@"
|
|
$result = $_.RawContent
|
|
$result = $result.Substring(0, [Math]::Min($result.Length, 200) )
|
|
if($result.Length -eq 200) { $result += ""`u{2026}"" }
|
|
|
|
$result
|
|
", label: "RawContent")
|
|
.AddItemProperty(@"Headers")
|
|
.AddItemProperty(@"Images")
|
|
.AddItemProperty(@"InputFields")
|
|
.AddItemProperty(@"Links")
|
|
.AddItemProperty(@"RawContentLength")
|
|
.AddItemProperty(@"RelationLink")
|
|
.EndEntry()
|
|
.EndList());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_Microsoft_PowerShell_Commands_WebResponseObject()
|
|
{
|
|
yield return new FormatViewDefinition("Microsoft.PowerShell.Commands.WebResponseObject",
|
|
ListControl.Create()
|
|
.StartEntry()
|
|
.AddItemProperty(@"StatusCode")
|
|
.AddItemProperty(@"StatusDescription")
|
|
.AddItemProperty(@"Content")
|
|
.AddItemScriptBlock(@"
|
|
$result = $_.RawContent
|
|
$result = $result.Substring(0, [Math]::Min($result.Length, 200) )
|
|
if($result.Length -eq 200) { $result += ""`u{2026}"" }
|
|
|
|
$result
|
|
", label: "RawContent")
|
|
.AddItemProperty(@"Headers")
|
|
.AddItemProperty(@"RawContentLength")
|
|
.AddItemProperty(@"RelationLink")
|
|
.EndEntry()
|
|
.EndList());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_Microsoft_Powershell_Utility_FileHashInfo()
|
|
{
|
|
yield return new FormatViewDefinition("Microsoft.PowerShell.Commands.FileHashInfo",
|
|
TableControl.Create()
|
|
.AddHeader(Alignment.Left, width: 15)
|
|
.AddHeader(Alignment.Left, width: 70)
|
|
.AddHeader()
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("Algorithm")
|
|
.AddPropertyColumn("Hash")
|
|
.AddPropertyColumn("Path")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_Microsoft_PowerShell_Commands_PSRunspaceDebug()
|
|
{
|
|
yield return new FormatViewDefinition("PSRunspaceDebug>",
|
|
TableControl.Create()
|
|
.AddHeader(Alignment.Right, label: "Id", width: 3)
|
|
.AddHeader(Alignment.Left, label: "Name", width: 20)
|
|
.AddHeader(Alignment.Left, label: "Enabled", width: 10)
|
|
.AddHeader(Alignment.Left, label: "BreakAll", width: 10)
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("RunspaceId")
|
|
.AddPropertyColumn("RunspaceName")
|
|
.AddPropertyColumn("Enabled")
|
|
.AddPropertyColumn("BreakAll")
|
|
.EndRowDefinition()
|
|
.EndTable());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_Microsoft_PowerShell_MarkdownRender_MarkdownOptionInfo()
|
|
{
|
|
yield return new FormatViewDefinition("Microsoft.PowerShell.MarkdownRender.PSMarkdownOptionInfo",
|
|
ListControl.Create()
|
|
.StartEntry()
|
|
.AddItemScriptBlock(@"$_.AsEscapeSequence('Header1')", label: "Header1")
|
|
.AddItemScriptBlock(@"$_.AsEscapeSequence('Header2')", label: "Header2")
|
|
.AddItemScriptBlock(@"$_.AsEscapeSequence('Header3')", label: "Header3")
|
|
.AddItemScriptBlock(@"$_.AsEscapeSequence('Header4')", label: "Header4")
|
|
.AddItemScriptBlock(@"$_.AsEscapeSequence('Header5')", label: "Header5")
|
|
.AddItemScriptBlock(@"$_.AsEscapeSequence('Header6')", label: "Header6")
|
|
.AddItemScriptBlock(@"$_.AsEscapeSequence('Code')", label: "Code")
|
|
.AddItemScriptBlock(@"$_.AsEscapeSequence('Link')", label: "Link")
|
|
.AddItemScriptBlock(@"$_.AsEscapeSequence('Image')", label: "Image")
|
|
.AddItemScriptBlock(@"$_.AsEscapeSequence('EmphasisBold')", label: "EmphasisBold")
|
|
.AddItemScriptBlock(@"$_.AsEscapeSequence('EmphasisItalics')", label: "EmphasisItalics")
|
|
.EndEntry()
|
|
.EndList());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_Microsoft_PowerShell_Commands_TestConnectionCommand_PingStatus()
|
|
{
|
|
yield return new FormatViewDefinition(
|
|
"Microsoft.PowerShell.Commands.TestConnectionCommand+PingStatus",
|
|
TableControl.Create()
|
|
.AddHeader(Alignment.Right, label: "Ping", width: 4)
|
|
.AddHeader(Alignment.Left, label: "Source", width: 16)
|
|
.AddHeader(Alignment.Left, label: "Address", width: 25)
|
|
.AddHeader(Alignment.Right, label: "Latency(ms)", width: 7)
|
|
.AddHeader(Alignment.Right, label: "BufferSize(B)", width: 10)
|
|
.AddHeader(Alignment.Left, label: "Status", width: 16)
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("Ping")
|
|
.AddPropertyColumn("Source")
|
|
.AddPropertyColumn("DisplayAddress")
|
|
.AddScriptBlockColumn(@"
|
|
if ($_.Status -eq 'TimedOut') {
|
|
'*'
|
|
}
|
|
else {
|
|
$_.Latency
|
|
}
|
|
")
|
|
.AddScriptBlockColumn(@"
|
|
if ($_.Status -eq 'TimedOut') {
|
|
'*'
|
|
}
|
|
else {
|
|
$_.BufferSize
|
|
}
|
|
")
|
|
.AddPropertyColumn("Status")
|
|
.EndRowDefinition()
|
|
.GroupByProperty("Destination")
|
|
.EndTable());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_Microsoft_PowerShell_Commands_TestConnectionCommand_PingMtuStatus()
|
|
{
|
|
yield return new FormatViewDefinition(
|
|
"Microsoft.PowerShell.Commands.TestConnectionCommand+PingMtuStatus",
|
|
TableControl.Create()
|
|
.AddHeader(Alignment.Left, label: "Source", width: 16)
|
|
.AddHeader(Alignment.Left, label: "Address", width: 25)
|
|
.AddHeader(Alignment.Right, label: "Latency(ms)", width: 7)
|
|
.AddHeader(Alignment.Left, label: "Status", width: 16)
|
|
.AddHeader(Alignment.Right, label: "MtuSize(B)", width: 7)
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("Source")
|
|
.AddPropertyColumn("DisplayAddress")
|
|
.AddScriptBlockColumn(@"
|
|
if ($_.Status -eq 'TimedOut') {
|
|
'*'
|
|
}
|
|
else {
|
|
$_.Latency
|
|
}
|
|
")
|
|
.AddPropertyColumn("Status")
|
|
.AddPropertyColumn("MtuSize")
|
|
.EndRowDefinition()
|
|
.GroupByProperty("Destination")
|
|
.EndTable());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_Microsoft_PowerShell_Commands_TestConnectionCommand_TraceStatus()
|
|
{
|
|
yield return new FormatViewDefinition(
|
|
"Microsoft.PowerShell.Commands.TestConnectionCommand+TraceStatus",
|
|
TableControl.Create()
|
|
.AddHeader(Alignment.Right, label: "Hop", width: 3)
|
|
.AddHeader(Alignment.Left, label: "Hostname", width: 25)
|
|
.AddHeader(Alignment.Right, label: "Ping", width: 4)
|
|
.AddHeader(Alignment.Right, label: "Latency(ms)", width: 7)
|
|
.AddHeader(Alignment.Left, label: "Status", width: 16)
|
|
.AddHeader(Alignment.Left, label: "Source", width: 12)
|
|
.AddHeader(Alignment.Left, label: "TargetAddress", width: 15)
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("Hop")
|
|
.AddScriptBlockColumn(@"
|
|
if ($_.Hostname) {
|
|
$_.HostName
|
|
}
|
|
else {
|
|
'*'
|
|
}
|
|
")
|
|
.AddPropertyColumn("Ping")
|
|
.AddScriptBlockColumn(@"
|
|
if ($_.Status -eq 'TimedOut') {
|
|
'*'
|
|
}
|
|
else {
|
|
$_.Latency
|
|
}
|
|
")
|
|
.AddPropertyColumn("Status")
|
|
.AddPropertyColumn("Source")
|
|
.AddPropertyColumn("TargetAddress")
|
|
.EndRowDefinition()
|
|
.GroupByProperty("Target")
|
|
.EndTable());
|
|
}
|
|
|
|
private static IEnumerable<FormatViewDefinition> ViewsOf_Microsoft_PowerShell_Commands_ByteCollection()
|
|
{
|
|
yield return new FormatViewDefinition(
|
|
"Microsoft.PowerShell.Commands.ByteCollection",
|
|
TableControl.Create()
|
|
.AddHeader(Alignment.Right, label: "Offset", width: 16)
|
|
.AddHeader(Alignment.Left, label: "Bytes\n00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F", width: 47)
|
|
.AddHeader(Alignment.Left, label: "Ascii", width: 16)
|
|
.StartRowDefinition()
|
|
.AddPropertyColumn("HexOffset")
|
|
.AddPropertyColumn("HexBytes")
|
|
.AddPropertyColumn("Ascii")
|
|
.EndRowDefinition()
|
|
.GroupByProperty("Label")
|
|
.EndTable());
|
|
}
|
|
}
|
|
}
|