internal void WriteWideControl(WideControl wideControl) { _writer.WriteStartElement("WideControl"); if (wideControl.Columns > 0) { _writer.WriteElementString("ColumnNumber", wideControl.Columns.ToString(CultureInfo.InvariantCulture)); } if (wideControl.AutoSize) { _writer.WriteElementString("AutoSize", ""); } _writer.WriteStartElement("WideEntries"); foreach (WideControlEntryItem entry in wideControl.Entries) { _writer.WriteStartElement("WideEntry"); WriteEntrySelectedBy(entry.EntrySelectedBy); _writer.WriteStartElement("WideItem"); WriteDisplayEntry(entry.DisplayEntry); if (!string.IsNullOrEmpty(entry.FormatString)) { _writer.WriteElementString("FormatString", entry.FormatString); } _writer.WriteEndElement(/*</WideItem>*/); _writer.WriteEndElement(/*</WideEntry>*/); } _writer.WriteEndElement(/*</WideEntries>*/); _writer.WriteEndElement(/*</WideControl>*/); }
private static IEnumerable <FormatViewDefinition> ViewsOf_FileSystemTypes(CustomControl[] sharedControls) { const string LengthScriptBlock = @"if ($_ -is [System.IO.DirectoryInfo]) { return '' } if ($_.Attributes -band [System.IO.FileAttributes]::Offline) { return '({0})' -f $_.Length } return $_.Length"; yield return(new FormatViewDefinition("children", TableControl.Create() .GroupByProperty("PSParentPath", customControl: sharedControls[0]) .AddHeader(Alignment.Left, label: "Mode", width: 7) .AddHeader(Alignment.Right, label: "LastWriteTime", width: 25) .AddHeader(Alignment.Right, label: "Length", width: 14) .AddHeader() .StartRowDefinition(wrap: true) .AddPropertyColumn("Mode") .AddScriptBlockColumn(@" [String]::Format(""{0,10} {1,8}"", $_.LastWriteTime.ToString(""d""), $_.LastWriteTime.ToString(""t"")) ") .AddScriptBlockColumn(LengthScriptBlock) .AddPropertyColumn("Name") .EndRowDefinition() .EndTable())); yield return(new FormatViewDefinition("children", ListControl.Create() .GroupByProperty("PSParentPath", customControl: sharedControls[0]) .StartEntry(entrySelectedByType: new[] { "System.IO.FileInfo" }) .AddItemProperty(@"Name") .AddItemScriptBlock(LengthScriptBlock, label: "Length") .AddItemProperty(@"CreationTime") .AddItemProperty(@"LastWriteTime") .AddItemProperty(@"LastAccessTime") .AddItemProperty(@"Mode") .AddItemProperty(@"LinkType") .AddItemProperty(@"Target") .AddItemProperty(@"VersionInfo") .EndEntry() .StartEntry() .AddItemProperty(@"Name") .AddItemProperty(@"CreationTime") .AddItemProperty(@"LastWriteTime") .AddItemProperty(@"LastAccessTime") .AddItemProperty(@"Mode") .AddItemProperty(@"LinkType") .AddItemProperty(@"Target") .EndEntry() .EndList())); yield return(new FormatViewDefinition("children", WideControl.Create() .GroupByProperty("PSParentPath", customControl: sharedControls[0]) .AddPropertyEntry("Name") .AddPropertyEntry("Name", format: "[{0}]", entrySelectedByType: new[] { "System.IO.DirectoryInfo" }) .EndWideControl())); }
protected override void ProcessRecord() { List <ViewDefinition> viewDefinitionList = base.Context.FormatDBManager.Database.viewDefinitionsSection.viewDefinitionList; Dictionary <string, List <FormatViewDefinition> > dictionary = new Dictionary <string, List <FormatViewDefinition> >(); foreach (ViewDefinition definition in viewDefinitionList) { foreach (TypeOrGroupReference reference in definition.appliesTo.referenceList) { PSControl control = null; if (definition.mainControl is TableControlBody) { control = new TableControl((TableControlBody)definition.mainControl); } if (definition.mainControl is ListControlBody) { control = new ListControl((ListControlBody)definition.mainControl); } if (definition.mainControl is WideControlBody) { control = new WideControl((WideControlBody)definition.mainControl); } if (control != null) { FormatViewDefinition item = new FormatViewDefinition(definition.name, control, definition.InstanceId); foreach (WildcardPattern pattern in this._filter) { if (pattern.IsMatch(reference.name)) { if (!dictionary.ContainsKey(reference.name)) { dictionary.Add(reference.name, new List <FormatViewDefinition>()); } dictionary[reference.name].Add(item); } } } } } foreach (string str in dictionary.Keys) { base.WriteObject(new ExtendedTypeDefinition(str, dictionary[str])); } }
private static IEnumerable <FormatViewDefinition> ViewsOf_CertificateProviderTypes() { yield return(new FormatViewDefinition("ThumbprintList", ListControl.Create() .StartEntry(entrySelectedByType: new[] { "Microsoft.PowerShell.Commands.X509StoreLocation" }) .AddItemProperty(@"Location") .AddItemProperty(@"StoreNames") .EndEntry() .StartEntry(entrySelectedByType: new[] { "System.Security.Cryptography.X509Certificates.X509Store" }) .AddItemProperty(@"Name") .EndEntry() .StartEntry() .AddItemScriptBlock(@"$_.SubjectName.Name", label: "Subject") .AddItemScriptBlock(@"$_.IssuerName.Name", label: "Issuer") .AddItemProperty(@"Thumbprint") .AddItemProperty(@"FriendlyName") .AddItemProperty(@"NotBefore") .AddItemProperty(@"NotAfter") .AddItemProperty(@"Extensions") .EndEntry() .EndList())); yield return(new FormatViewDefinition("ThumbprintWide", WideControl.Create() .GroupByProperty("PSParentPath") .AddPropertyEntry("Thumbprint") .EndWideControl())); yield return(new FormatViewDefinition("PathOnly", ListControl.Create() .StartEntry() .AddItemProperty(@"PSPathPath") .EndEntry() .StartEntry(entrySelectedByType: new[] { "Microsoft.PowerShell.Commands.X509StoreLocation" }) .AddItemProperty(@"PSPathPath") .EndEntry() .StartEntry(entrySelectedByType: new[] { "System.Security.Cryptography.X509Certificates.X509Store" }) .AddItemProperty(@"PSPath") .EndEntry() .EndList())); }
private static IEnumerable <FormatViewDefinition> ViewsOf_System_Management_Automation_Signature(CustomControl[] sharedControls) { yield return(new FormatViewDefinition("PSThumbprintTable", TableControl.Create() .GroupByScriptBlock("split-path $_.Path", customControl: sharedControls[0]) .AddHeader(label: "SignerCertificate", width: 41) .AddHeader() .AddHeader(label: "Path") .StartRowDefinition() .AddScriptBlockColumn("$_.SignerCertificate.Thumbprint") .AddPropertyColumn("Status") .AddScriptBlockColumn("split-path $_.Path -leaf") .EndRowDefinition() .EndTable())); yield return(new FormatViewDefinition("PSThumbprintWide", WideControl.Create() .GroupByScriptBlock("split-path $_.Path", customControl: sharedControls[0]) .AddScriptBlockEntry(@"""$(split-path $_.Path -leaf): $($_.Status)""") .EndWideControl())); }
/// <summary> /// Takes out the content from the database and writes them out. /// </summary> protected override void ProcessRecord() { // Remoting detection: // * Automatic variable $PSSenderInfo is defined in true remoting contexts as well as in background jobs. // * $PSSenderInfo.ApplicationArguments.PSVersionTable.PSVersion contains the client version, as a [version] instance. // Note: Even though $PSVersionTable.PSVersion is of type [semver] in PowerShell 6+, it is of type [version] here, // presumably because only the latter type deserializes type-faithfully. var clientVersion = PowerShellVersion; PSSenderInfo remotingClientInfo = GetVariableValue("PSSenderInfo") as PSSenderInfo; if (clientVersion == null && remotingClientInfo != null) { clientVersion = PSObject.Base((PSObject.Base(remotingClientInfo.ApplicationArguments["PSVersionTable"]) as PSPrimitiveDictionary)?["PSVersion"]) as Version; } // During remoting, remain compatible with v5.0- clients by default. // Passing a -PowerShellVersion argument allows overriding the client version. bool writeOldWay = (remotingClientInfo != null && clientVersion == null) // To be safe: Remoting client version could unexpectedly not be determined. || (clientVersion != null && (clientVersion.Major < 5 || (clientVersion.Major == 5 && clientVersion.Minor < 1))); TypeInfoDataBase db = this.Context.FormatDBManager.Database; List<ViewDefinition> viewdefinitions = db.viewDefinitionsSection.viewDefinitionList; Dictionary<string, List<string>> typeGroupMap = GetTypeGroupMap(db.typeGroupSection.typeGroupDefinitionList); var typedefs = new Dictionary<ConsolidatedString, List<FormatViewDefinition>>(ConsolidatedString.EqualityComparer); foreach (ViewDefinition definition in viewdefinitions) { if (definition.isHelpFormatter) continue; var consolidatedTypeName = CreateConsolidatedTypeName(definition, typeGroupMap); if (!ShouldGenerateView(consolidatedTypeName)) continue; PSControl control; var tableControlBody = definition.mainControl as TableControlBody; if (tableControlBody != null) { control = new TableControl(tableControlBody, definition); } else { var listControlBody = definition.mainControl as ListControlBody; if (listControlBody != null) { control = new ListControl(listControlBody, definition); } else { var wideControlBody = definition.mainControl as WideControlBody; if (wideControlBody != null) { control = new WideControl(wideControlBody, definition); if (writeOldWay) { // Alignment was added to WideControl in V2, but wasn't // used. It was removed in V5, but old PowerShell clients // expect this property or fail to rehydrate the remote object. var psobj = new PSObject(control); psobj.Properties.Add(new PSNoteProperty("Alignment", 0)); } } else { var complexControlBody = (ComplexControlBody)definition.mainControl; control = new CustomControl(complexControlBody, definition); } } } // Older version of PowerShell do not know about something in the control, so // don't return it. if (writeOldWay && !control.CompatibleWithOldPowerShell()) continue; var formatdef = new FormatViewDefinition(definition.name, control, definition.InstanceId); List<FormatViewDefinition> viewList; if (!typedefs.TryGetValue(consolidatedTypeName, out viewList)) { viewList = new List<FormatViewDefinition>(); typedefs.Add(consolidatedTypeName, viewList); } viewList.Add(formatdef); } // write out all the available type definitions foreach (var pair in typedefs) { var typeNames = pair.Key; if (writeOldWay) { foreach (var typeName in typeNames) { var etd = new ExtendedTypeDefinition(typeName, pair.Value); WriteObject(etd); } } else { var etd = new ExtendedTypeDefinition(typeNames[0], pair.Value); for (int i = 1; i < typeNames.Count; i++) { etd.TypeNames.Add(typeNames[i]); } WriteObject(etd); } } }
/// <summary> /// Takes out the content from the database and writes them out. /// </summary> protected override void ProcessRecord() { bool writeOldWay = PowerShellVersion == null || PowerShellVersion.Major < 5 || (PowerShellVersion.Major == 5 && PowerShellVersion.Minor < 1); TypeInfoDataBase db = this.Context.FormatDBManager.Database; List <ViewDefinition> viewdefinitions = db.viewDefinitionsSection.viewDefinitionList; Dictionary <string, List <string> > typeGroupMap = GetTypeGroupMap(db.typeGroupSection.typeGroupDefinitionList); var typedefs = new Dictionary <ConsolidatedString, List <FormatViewDefinition> >(ConsolidatedString.EqualityComparer); foreach (ViewDefinition definition in viewdefinitions) { if (definition.isHelpFormatter) { continue; } var consolidatedTypeName = CreateConsolidatedTypeName(definition, typeGroupMap); if (!ShouldGenerateView(consolidatedTypeName)) { continue; } PSControl control; var tableControlBody = definition.mainControl as TableControlBody; if (tableControlBody != null) { control = new TableControl(tableControlBody, definition); } else { var listControlBody = definition.mainControl as ListControlBody; if (listControlBody != null) { control = new ListControl(listControlBody, definition); } else { var wideControlBody = definition.mainControl as WideControlBody; if (wideControlBody != null) { control = new WideControl(wideControlBody, definition); if (writeOldWay) { // Alignment was added to WideControl in V2, but wasn't // used. It was removed in V5, but old PowerShell clients // expect this property or fail to rehydrate the remote object. var psobj = new PSObject(control); psobj.Properties.Add(new PSNoteProperty("Alignment", 0)); } } else { var complexControlBody = (ComplexControlBody)definition.mainControl; control = new CustomControl(complexControlBody, definition); } } } // Older version of PowerShell do not know about something in the control, so // don't return it. if (writeOldWay && !control.CompatibleWithOldPowerShell()) { continue; } var formatdef = new FormatViewDefinition(definition.name, control, definition.InstanceId); List <FormatViewDefinition> viewList; if (!typedefs.TryGetValue(consolidatedTypeName, out viewList)) { viewList = new List <FormatViewDefinition>(); typedefs.Add(consolidatedTypeName, viewList); } viewList.Add(formatdef); }// foreach(ViewDefinition... // write out all the available type definitions foreach (var pair in typedefs) { var typeNames = pair.Key; if (writeOldWay) { foreach (var typeName in typeNames) { var etd = new ExtendedTypeDefinition(typeName, pair.Value); WriteObject(etd); } } else { var etd = new ExtendedTypeDefinition(typeNames[0], pair.Value); for (int i = 1; i < typeNames.Count; i++) { etd.TypeNames.Add(typeNames[i]); } WriteObject(etd); } } }
private static IEnumerable <FormatViewDefinition> ViewsOf_FileSystemTypes(CustomControl[] sharedControls) { yield return(new FormatViewDefinition("children", TableControl.Create() .GroupByProperty("PSParentPath", customControl: sharedControls[0]) .AddHeader(Alignment.Left, label: "Mode", width: 7) .AddHeader(Alignment.Right, label: "LastWriteTime", width: 26) .AddHeader(Alignment.Right, label: "Length", width: 14) .AddHeader(Alignment.Left, label: "Name") .StartRowDefinition(wrap: true) .AddPropertyColumn("ModeWithoutHardLink") .AddPropertyColumn("LastWriteTimeString") .AddPropertyColumn("LengthString") .AddPropertyColumn("NameString") .EndRowDefinition() .EndTable())); yield return(new FormatViewDefinition("childrenWithHardlink", TableControl.Create() .GroupByProperty("PSParentPath", customControl: sharedControls[0]) .AddHeader(Alignment.Left, label: "Mode", width: 7) .AddHeader(Alignment.Right, label: "LastWriteTime", width: 26) .AddHeader(Alignment.Right, label: "Length", width: 14) .AddHeader(Alignment.Left, label: "Name") .StartRowDefinition(wrap: true) .AddPropertyColumn("Mode") .AddPropertyColumn("LastWriteTimeString") .AddPropertyColumn("LengthString") .AddPropertyColumn("NameString") .EndRowDefinition() .EndTable())); yield return(new FormatViewDefinition("children", ListControl.Create() .GroupByProperty("PSParentPath", customControl: sharedControls[0]) .StartEntry(entrySelectedByType: new[] { "System.IO.FileInfo" }) .AddItemProperty(@"Name") .AddItemProperty("LengthString", label: "Length") .AddItemProperty(@"CreationTime") .AddItemProperty(@"LastWriteTime") .AddItemProperty(@"LastAccessTime") .AddItemProperty(@"Mode") .AddItemProperty(@"LinkType") .AddItemProperty(@"Target") .AddItemProperty(@"VersionInfo") .EndEntry() .StartEntry() .AddItemProperty(@"Name") .AddItemProperty(@"CreationTime") .AddItemProperty(@"LastWriteTime") .AddItemProperty(@"LastAccessTime") .AddItemProperty(@"Mode") .AddItemProperty(@"LinkType") .AddItemProperty(@"Target") .EndEntry() .EndList())); yield return(new FormatViewDefinition("children", WideControl.Create() .GroupByProperty("PSParentPath", customControl: sharedControls[0]) .AddPropertyEntry("Name") .AddPropertyEntry("Name", format: "[{0}]", entrySelectedByType: new[] { "System.IO.DirectoryInfo" }) .EndWideControl())); }
private static IEnumerable <FormatViewDefinition> ViewsOf_FileSystemTypes(CustomControl[] sharedControls) { #if UNIX if (ExperimentalFeature.IsEnabled("PSUnixFileStat")) { yield return(new FormatViewDefinition("childrenWithUnixStat", TableControl.Create() .GroupByProperty("PSParentPath", customControl: sharedControls[0]) .AddHeader(Alignment.Left, label: "UnixMode", width: 10) .AddHeader(Alignment.Left, label: "User", width: 16) .AddHeader(Alignment.Left, label: "Group", width: 16) .AddHeader(Alignment.Right, label: "LastWriteTime", width: 18) .AddHeader(Alignment.Right, label: "Size", width: 14) .AddHeader(Alignment.Left, label: "Name") .StartRowDefinition(wrap: true) .AddPropertyColumn("UnixMode") .AddPropertyColumn("User") .AddPropertyColumn("Group") .AddScriptBlockColumn(scriptBlock: @"'{0:d} {0:HH}:{0:mm}' -f $_.LastWriteTime") .AddPropertyColumn("Size") .AddPropertyColumn("NameString") .EndRowDefinition() .EndTable())); } #endif yield return(new FormatViewDefinition("children", TableControl.Create() .GroupByProperty("PSParentPath", customControl: sharedControls[0]) .AddHeader(Alignment.Left, label: "Mode", width: 7) .AddHeader(Alignment.Right, label: "LastWriteTime", width: 26) .AddHeader(Alignment.Right, label: "Length", width: 14) .AddHeader(Alignment.Left, label: "Name") .StartRowDefinition(wrap: true) .AddPropertyColumn("ModeWithoutHardLink") .AddPropertyColumn("LastWriteTimeString") .AddPropertyColumn("LengthString") .AddPropertyColumn("NameString") .EndRowDefinition() .EndTable())); yield return(new FormatViewDefinition("childrenWithHardlink", TableControl.Create() .GroupByProperty("PSParentPath", customControl: sharedControls[0]) .AddHeader(Alignment.Left, label: "Mode", width: 7) .AddHeader(Alignment.Right, label: "LastWriteTime", width: 26) .AddHeader(Alignment.Right, label: "Length", width: 14) .AddHeader(Alignment.Left, label: "Name") .StartRowDefinition(wrap: true) .AddPropertyColumn("Mode") .AddPropertyColumn("LastWriteTimeString") .AddPropertyColumn("LengthString") .AddPropertyColumn("NameString") .EndRowDefinition() .EndTable())); yield return(new FormatViewDefinition("children", ListControl.Create() .GroupByProperty("PSParentPath", customControl: sharedControls[0]) .StartEntry(entrySelectedByType: new[] { "System.IO.FileInfo" }) .AddItemProperty(@"Name") .AddItemProperty("LengthString", label: "Length") .AddItemProperty(@"CreationTime") .AddItemProperty(@"LastWriteTime") .AddItemProperty(@"LastAccessTime") .AddItemProperty(@"Mode") .AddItemProperty(@"LinkType") .AddItemProperty(@"Target") .AddItemProperty(@"VersionInfo") .EndEntry() .StartEntry() .AddItemProperty(@"Name") .AddItemProperty(@"CreationTime") .AddItemProperty(@"LastWriteTime") .AddItemProperty(@"LastAccessTime") .AddItemProperty(@"Mode") .AddItemProperty(@"LinkType") .AddItemProperty(@"Target") .EndEntry() .EndList())); yield return(new FormatViewDefinition("children", WideControl.Create() .GroupByProperty("PSParentPath", customControl: sharedControls[0]) .AddPropertyEntry("Name") .AddPropertyEntry("Name", format: "[{0}]", entrySelectedByType: new[] { "System.IO.DirectoryInfo" }) .EndWideControl())); }