/// <summary> /// Gets the values of the object properties matched by this expression. /// </summary> /// <param name="target">The object to match against.</param> /// <param name="expand">If the matched properties are parameter sets, expand them.</param> /// <param name="eatExceptions">If true, any exceptions that occur during the match process are ignored.</param> public List <PSPropertyExpressionResult> GetValues(PSObject target, bool expand, bool eatExceptions) { List <PSPropertyExpressionResult> retVal = new List <PSPropertyExpressionResult>(); // If the object passed in is a hashtable, then turn it into a PSCustomObject so // that property expressions can work on it. target = IfHashtableWrapAsPSCustomObject(target); // process the script case if (Script != null) { PSPropertyExpression scriptExpression = new PSPropertyExpression(Script); PSPropertyExpressionResult r = scriptExpression.GetValue(target, eatExceptions); retVal.Add(r); return(retVal); } // process the expression List <PSPropertyExpression> resolvedExpressionList = this.ResolveNames(target, expand); foreach (PSPropertyExpression re in resolvedExpressionList) { PSPropertyExpressionResult r = re.GetValue(target, eatExceptions); retVal.Add(r); } return(retVal); }
/// <summary> /// Gets the values of the object properties matched by this expression. /// </summary> /// <param name="target">The object to match against.</param> /// <param name="expand">If the matched properties are parameter sets, expand them.</param> /// <param name="eatExceptions">If true, any exceptions that occur during the match process are ignored.</param> public List <PSPropertyExpressionResult> GetValues(PSObject target, bool expand, bool eatExceptions) { List <PSPropertyExpressionResult> retVal = new List <PSPropertyExpressionResult>(); // process the script case if (Script != null) { PSPropertyExpression scriptExpression = new PSPropertyExpression(Script); PSPropertyExpressionResult r = scriptExpression.GetValue(target, eatExceptions); retVal.Add(r); return(retVal); } foreach (PSPropertyExpression resolvedName in ResolveNames(target, expand)) { PSPropertyExpressionResult result = resolvedName.GetValue(target, eatExceptions); retVal.Add(result); } return(retVal); }
internal override object GetValue(PSObject liveObject) { List <PSPropertyExpressionResult> resList = _expression.GetValues(liveObject); if (resList.Count == 0) { return(null); } // Only first element is used. PSPropertyExpressionResult result = resList[0]; if (result.Exception != null) { return(null); } object objectResult = result.Result; return(objectResult == null ? string.Empty : ColumnInfo.LimitString(objectResult.ToString())); }
private void ProcessExpandParameter(MshParameter p, PSObject inputObject, List <PSNoteProperty> matchedProperties) { PSPropertyExpression ex = p.GetEntry(FormatParameterDefinitionKeys.ExpressionEntryKey) as PSPropertyExpression; List <PSPropertyExpressionResult> expressionResults = ex.GetValues(inputObject); if (expressionResults.Count == 0) { ErrorRecord errorRecord = new( PSTraceSource.NewArgumentException("ExpandProperty", SelectObjectStrings.PropertyNotFound, ExpandProperty), "ExpandPropertyNotFound", ErrorCategory.InvalidArgument, inputObject); throw new SelectObjectException(errorRecord); } if (expressionResults.Count > 1) { ErrorRecord errorRecord = new( PSTraceSource.NewArgumentException("ExpandProperty", SelectObjectStrings.MutlipleExpandProperties, ExpandProperty), "MutlipleExpandProperties", ErrorCategory.InvalidArgument, inputObject); throw new SelectObjectException(errorRecord); } PSPropertyExpressionResult r = expressionResults[0]; if (r.Exception == null) { // ignore the property value if it's null if (r.Result == null) { return; } System.Collections.IEnumerable results = LanguagePrimitives.GetEnumerable(r.Result); if (results == null) { // add NoteProperties if there is any // If r.Result is a base object, we don't want to associate the NoteProperty // directly with it. We want the NoteProperty to be associated only with this // particular PSObject, so that when the user uses the base object else where, // its members remain the same as before the Select-Object command run. PSObject expandedObject = PSObject.AsPSObject(r.Result, true); AddNoteProperties(expandedObject, inputObject, matchedProperties); FilteredWriteObject(expandedObject, matchedProperties); return; } foreach (object expandedValue in results) { // ignore the element if it's null if (expandedValue == null) { continue; } // add NoteProperties if there is any // If expandedValue is a base object, we don't want to associate the NoteProperty // directly with it. We want the NoteProperty to be associated only with this // particular PSObject, so that when the user uses the base object else where, // its members remain the same as before the Select-Object command run. PSObject expandedObject = PSObject.AsPSObject(expandedValue, true); AddNoteProperties(expandedObject, inputObject, matchedProperties); FilteredWriteObject(expandedObject, matchedProperties); } } else { ErrorRecord errorRecord = new( r.Exception, "PropertyEvaluationExpand", ErrorCategory.InvalidResult, inputObject); throw new SelectObjectException(errorRecord); } }