Beispiel #1
0
        public override PSMemberInfo Copy()
        {
            PSPropertySet destiny = new PSPropertySet(base.name, this.referencedPropertyNames);

            base.CloneBaseProperties(destiny);
            return(destiny);
        }
Beispiel #2
0
        public override PSMemberInfo Copy()
        {
            PSPropertySet psPropertySet = new PSPropertySet(this.name, (IEnumerable <string>) this.referencedPropertyNames);

            this.CloneBaseProperties((PSMemberInfo)psPropertySet);
            return((PSMemberInfo)psPropertySet);
        }
Beispiel #3
0
        /// <summary>
        /// Gets property records from the item.
        /// </summary>
        /// <param name="item">The item from which properties are retrieved.</param>
        protected override void ProcessItem(PSObject item)
        {
            var path = item.GetPropertyValue<string>("PSPath");
            var providerPath = this.SessionState.Path.GetUnresolvedProviderPathFromPSPath(path);

            var db = this.OpenDatabase(providerPath);
            if (null != db)
            {
                // Keep track of which properties were selected.
                IList<string> properties = null;
                if (this.PassThru)
                {
                    properties = new List<string>();
                }

                using (db)
                {
                    TransformView transform = null;
                    if (db.Tables.Contains(TransformView.TableName))
                    {
                        transform = new TransformView(db);
                    }

                    var table = "Property";
                    if ((db is PatchPackage) && db.Tables.Contains("MsiPatchMetadata"))
                    {
                        table = "MsiPatchMetadata";
                    }

                    var query = string.Format("SELECT `Property`, `Value` FROM `{0}`", table);
                    using (var view = db.OpenView(query))
                    {
                        view.Execute();

                        // Get column information from the view before being disposed.
                        var columns = ViewManager.GetColumns(view);

                        var record = view.Fetch();
                        while (null != record)
                        {
                            using (record)
                            {
                                var name = record.GetString(1);
                                if (0 == this.propertyPatterns.Count() || name.Match(this.propertyPatterns))
                                {
                                    if (this.PassThru)
                                    {
                                        if (0 == item.Properties.Match(name).Count())
                                        {
                                            properties.Add(name);

                                            var property = new PSNoteProperty(name, record.GetString(2));
                                            item.Properties.Add(property, true);
                                        }
                                    }
                                    else
                                    {
                                        // Create a locally cached copy of the record.
                                        var copy = new Record(record, columns, transform, providerPath);
                                        var obj = PSObject.AsPSObject(copy);

                                        // Show only column properties by default.
                                        var memberSet = ViewManager.GetMemberSet(view);
                                        obj.Members.Add(memberSet, true);

                                        base.WriteObject(obj);
                                    }
                                }
                            }

                            record = view.Fetch();
                        }
                    }
                }

                if (this.PassThru)
                {
                    var propertySet = new PSPropertySet("MSIProperties", properties);
                    item.Members.Add(propertySet, true);

                    base.WriteObject(item);
                }
            }
        }
Beispiel #4
0
        /// <summary>
        /// Creates and caches an instance of the "PSStandardMembers" <see cref="PSMemberSet"/> to attach to a <see cref="Record"/>.
        /// </summary>
        /// <param name="view">The <see cref="View"/> from which column information is retrieved.</param>
        /// <returns>A new or cached copy of the "PSStandardMembers" <see cref="PSMemberSet"/>.</returns>
        /// <exception cref="ArgumentNullException">The <paramref name="view"/> parameter value is null.</exception>
        internal static PSMemberSet GetMemberSet(View view)
        {
            if (null == view)
            {
                throw new ArgumentNullException("view");
            }

            PSMemberSet memberSet;
            if (memberSets.ContainsKey(view.QueryString) && memberSets[view.QueryString].IsAlive)
            {
                // Get an existing PSMemberSet.
                memberSet = (PSMemberSet)memberSets[view.QueryString].Target;
            }
            else
            {
                // Add or set a new PSMemberSet.
                memberSet = new PSMemberSet("PSStandardMembers");

                var columns = ViewManager.GetColumns(view).Select(column => column.Key);
                var properties = new PSPropertySet("DefaultDisplayPropertySet", columns);
                memberSet.Members.Add(properties);

                columns = ViewManager.GetColumns(view).PrimaryKeys;
                if (0 < columns.Count())
                {
                    properties = new PSPropertySet("DefaultKeyPropertySet", columns);
                    memberSet.Members.Add(properties);
                }

                memberSets[view.QueryString] = new WeakReference(memberSet);
            }

            return memberSet;
        }
Beispiel #5
0
 public override PSMemberInfo Copy()
 {
     PSPropertySet destiny = new PSPropertySet(base.name, this.referencedPropertyNames);
     base.CloneBaseProperties(destiny);
     return destiny;
 }