示例#1
0
        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>*/);
        }
示例#2
0
        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]));
            }
        }
示例#4
0
        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()));
        }
示例#5
0
        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);
                }
            }
        }
示例#7
0
        /// <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);
                }
            }
        }
示例#8
0
        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()));
        }
示例#9
0
        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()));
        }