internal void AddToTypesXmlCache(T member, bool preValidated) { if (member == null) { throw PSTraceSource.NewArgumentNullException("member"); } if (!preValidated && PSMemberInfoCollection <T> .IsReservedName(member.Name)) { throw new ExtendedTypeSystemException("PSObjectMembersMembersAddReservedName", null, ExtendedTypeSystem.ReservedMemberName, new object[] { member.Name }); } PSMemberInfo info = member.Copy(); if (this.mshOwner != null) { if (!preValidated) { TypeTable typeTable = this.mshOwner.GetTypeTable(); if ((typeTable != null) && (typeTable.GetMembers <T>(this.mshOwner.InternalTypeNames)[member.Name] != null)) { throw new ExtendedTypeSystemException("AlreadyPresentInTypesXml", null, ExtendedTypeSystem.MemberAlreadyPresentFromTypesXml, new object[] { member.Name }); } } info.ReplicateInstance(this.mshOwner); this.mshOwner.InstanceMembers.Add(info, preValidated); PSGetMemberBinder.SetHasInstanceMember(info.Name); PSVariableAssignmentBinder.NoteTypeHasInstanceMemberOrTypeName(PSObject.Base(this.mshOwner).GetType()); } else { this.memberSetOwner.InternalMembers.Add(info, preValidated); } }
private PSPropertyExpressionResult GetValue(PSObject target, bool eatExceptions) { try { object result = null; if (Script != null) { result = Script.DoInvokeReturnAsIs( useLocalScope: true, errorHandlingBehavior: ScriptBlock.ErrorHandlingBehavior.WriteToExternalErrorPipe, dollarUnder: target, input: AutomationNull.Value, scriptThis: AutomationNull.Value, args: Array.Empty <object>()); } else { if (_getValueDynamicSite is null) { _getValueDynamicSite = CallSite <Func <CallSite, object, object> > .Create( PSGetMemberBinder.Get( _stringValue, classScope: (Type)null, @static: false)); } result = _getValueDynamicSite.Target.Invoke(_getValueDynamicSite, target); } return(new PSPropertyExpressionResult(result, this, null)); } catch (RuntimeException e) { if (eatExceptions) { return(new PSPropertyExpressionResult(null, this, e)); } else { throw; } } }
internal static object PropertyGetter(PSGetMemberBinder binder, IEnumerator enumerator) { CallSite <Func <CallSite, object, object> > getMemberBinderSite = CallSite <Func <CallSite, object, object> > .Create(binder); ArrayList result = new ArrayList(); ExecutionContext executionContextFromTLS = LocalPipeline.GetExecutionContextFromTLS(); PropertyGetterWorker(getMemberBinderSite, enumerator, executionContextFromTLS, result); if (result.Count == 1) { return(result[0]); } if (result.Count != 0) { return(result.ToArray()); } if (executionContextFromTLS.IsStrictVersion(2)) { throw InterpreterError.NewInterpreterException(null, typeof(RuntimeException), null, "PropertyNotFoundStrict", ParserStrings.PropertyNotFoundStrict, new object[] { binder.Name }); } return(null); }
public PSSetMemberBinder(string name, bool ignoreCase, bool @static) : base(name, ignoreCase) { this._static = @static; this._getMemberBinder = PSGetMemberBinder.Get(name, @static); }
private void Process_GetEvent_Types_Ps1Xml(string filePath, ConcurrentBag <string> errors) { typesInfo.Add(new SessionStateTypeEntry(filePath)); string typeName = null; PSMemberInfoInternalCollection <PSMemberInfo> typeMembers = null; PSMemberInfoInternalCollection <PSMemberInfo> memberSetMembers = null; HashSet <string> newMembers = new HashSet <string>(StringComparer.OrdinalIgnoreCase); #region System.Diagnostics.Eventing.Reader.EventLogConfiguration typeName = @"System.Diagnostics.Eventing.Reader.EventLogConfiguration"; typeMembers = _extendedMembers.GetOrAdd(typeName, GetValueFactoryBasedOnInitCapacity(capacity: 1)); // Process standard members. memberSetMembers = new PSMemberInfoInternalCollection <PSMemberInfo>(capacity: 1); AddMember( errors, typeName, new PSPropertySet( @"DefaultDisplayPropertySet", new List <string> { "LogName", "MaximumSizeInBytes", "RecordCount", "LogMode" }), memberSetMembers, isOverride: false); ProcessStandardMembers( errors, typeName, memberSetMembers, typeMembers, isOverride: false); #endregion System.Diagnostics.Eventing.Reader.EventLogConfiguration #region System.Diagnostics.Eventing.Reader.EventLogRecord typeName = @"System.Diagnostics.Eventing.Reader.EventLogRecord"; typeMembers = _extendedMembers.GetOrAdd(typeName, GetValueFactoryBasedOnInitCapacity(capacity: 1)); // Process standard members. memberSetMembers = new PSMemberInfoInternalCollection <PSMemberInfo>(capacity: 1); AddMember( errors, typeName, new PSPropertySet( @"DefaultDisplayPropertySet", new List <string> { "TimeCreated", "ProviderName", "Id", "Message" }), memberSetMembers, isOverride: false); ProcessStandardMembers( errors, typeName, memberSetMembers, typeMembers, isOverride: false); #endregion System.Diagnostics.Eventing.Reader.EventLogRecord #region System.Diagnostics.Eventing.Reader.ProviderMetadata typeName = @"System.Diagnostics.Eventing.Reader.ProviderMetadata"; typeMembers = _extendedMembers.GetOrAdd(typeName, GetValueFactoryBasedOnInitCapacity(capacity: 2)); // Process regular members. newMembers.Add(@"ProviderName"); AddMember( errors, typeName, new PSAliasProperty(@"ProviderName", @"Name", conversionType: null), typeMembers, isOverride: false); // Process standard members. memberSetMembers = new PSMemberInfoInternalCollection <PSMemberInfo>(capacity: 1); AddMember( errors, typeName, new PSPropertySet( @"DefaultDisplayPropertySet", new List <string> { "Name", "LogLinks" }), memberSetMembers, isOverride: false); ProcessStandardMembers( errors, typeName, memberSetMembers, typeMembers, isOverride: false); #endregion System.Diagnostics.Eventing.Reader.ProviderMetadata #if !CORECLR #region Microsoft.PowerShell.Commands.GetCounter.CounterSet typeName = @"Microsoft.PowerShell.Commands.GetCounter.CounterSet"; typeMembers = _extendedMembers.GetOrAdd(typeName, GetValueFactoryBasedOnInitCapacity(capacity: 1)); // Process regular members. newMembers.Add(@"Counter"); AddMember( errors, typeName, new PSAliasProperty(@"Counter", @"Paths", conversionType: null), typeMembers, isOverride: false); #endregion Microsoft.PowerShell.Commands.GetCounter.CounterSet #region Microsoft.PowerShell.Commands.GetCounter.PerformanceCounterSample typeName = @"Microsoft.PowerShell.Commands.GetCounter.PerformanceCounterSample"; typeMembers = _extendedMembers.GetOrAdd(typeName, GetValueFactoryBasedOnInitCapacity(capacity: 1)); // Process standard members. memberSetMembers = new PSMemberInfoInternalCollection <PSMemberInfo>(capacity: 1); AddMember( errors, typeName, new PSPropertySet( @"DefaultDisplayPropertySet", new List <string> { "Path", "InstanceName", "CookedValue" }), memberSetMembers, isOverride: false); ProcessStandardMembers( errors, typeName, memberSetMembers, typeMembers, isOverride: false); #endregion Microsoft.PowerShell.Commands.GetCounter.PerformanceCounterSample #region Microsoft.PowerShell.Commands.GetCounter.PerformanceCounterSampleSet typeName = @"Microsoft.PowerShell.Commands.GetCounter.PerformanceCounterSampleSet"; typeMembers = _extendedMembers.GetOrAdd(typeName, GetValueFactoryBasedOnInitCapacity(capacity: 2)); // Process regular members. newMembers.Add(@"Readings"); AddMember( errors, typeName, new PSScriptProperty( @"Readings", GetScriptBlock(@"$strPaths = """" foreach ($ctr in $this.CounterSamples) { $strPaths += ($ctr.Path + "" :"" + ""`n"") $strPaths += ($ctr.CookedValue.ToString() + ""`n`n"") } return $strPaths"), setterScript: null, shouldCloneOnAccess: true), typeMembers, isOverride: false); // Process standard members. memberSetMembers = new PSMemberInfoInternalCollection <PSMemberInfo>(capacity: 1); AddMember( errors, typeName, new PSPropertySet( @"DefaultDisplayPropertySet", new List <string> { "Timestamp", "Readings" }), memberSetMembers, isOverride: false); ProcessStandardMembers( errors, typeName, memberSetMembers, typeMembers, isOverride: false); #endregion Microsoft.PowerShell.Commands.GetCounter.PerformanceCounterSampleSet #endif // Update binder version for newly added members. foreach (string memberName in newMembers) { PSGetMemberBinder.TypeTableMemberAdded(memberName); } }
private void Process_TypesV3_Ps1Xml(string filePath, ConcurrentBag <string> errors) { typesInfo.Add(new SessionStateTypeEntry(filePath)); string typeName = null; PSMemberInfoInternalCollection <PSMemberInfo> typeMembers = null; PSMemberInfoInternalCollection <PSMemberInfo> memberSetMembers = null; HashSet <string> newMembers = new HashSet <string>(StringComparer.OrdinalIgnoreCase); #region System.Security.Cryptography.X509Certificates.X509Certificate2 typeName = @"System.Security.Cryptography.X509Certificates.X509Certificate2"; typeMembers = _extendedMembers.GetOrAdd(typeName, GetValueFactoryBasedOnInitCapacity(capacity: 3)); // Process regular members. newMembers.Add(@"EnhancedKeyUsageList"); AddMember( errors, typeName, new PSScriptProperty( @"EnhancedKeyUsageList", GetScriptBlock(@",(new-object Microsoft.Powershell.Commands.EnhancedKeyUsageProperty -argumentlist $this).EnhancedKeyUsageList;"), setterScript: null, shouldCloneOnAccess: true), typeMembers, isOverride: false); newMembers.Add(@"DnsNameList"); AddMember( errors, typeName, new PSScriptProperty( @"DnsNameList", GetScriptBlock(@",(new-object Microsoft.Powershell.Commands.DnsNameProperty -argumentlist $this).DnsNameList;"), setterScript: null, shouldCloneOnAccess: true), typeMembers, isOverride: false); newMembers.Add(@"SendAsTrustedIssuer"); AddMember( errors, typeName, new PSScriptProperty( @"SendAsTrustedIssuer", GetScriptBlock(@"[Microsoft.Powershell.Commands.SendAsTrustedIssuerProperty]::ReadSendAsTrustedIssuerProperty($this)"), GetScriptBlock(@"$sendAsTrustedIssuer = $args[0] [Microsoft.Powershell.Commands.SendAsTrustedIssuerProperty]::WriteSendAsTrustedIssuerProperty($this,$this.PsPath,$sendAsTrustedIssuer)"), shouldCloneOnAccess: true), typeMembers, isOverride: false); #endregion System.Security.Cryptography.X509Certificates.X509Certificate2 #region System.Management.Automation.Remoting.PSSenderInfo typeName = @"System.Management.Automation.Remoting.PSSenderInfo"; typeMembers = _extendedMembers.GetOrAdd(typeName, GetValueFactoryBasedOnInitCapacity(capacity: 2)); // Process regular members. newMembers.Add(@"ConnectedUser"); AddMember( errors, typeName, new PSScriptProperty( @"ConnectedUser", GetScriptBlock(@"$this.UserInfo.Identity.Name"), setterScript: null, shouldCloneOnAccess: true), typeMembers, isOverride: false); newMembers.Add(@"RunAsUser"); AddMember( errors, typeName, new PSScriptProperty( @"RunAsUser", GetScriptBlock(@"if($null -ne $this.UserInfo.WindowsIdentity) { $this.UserInfo.WindowsIdentity.Name }"), setterScript: null, shouldCloneOnAccess: true), typeMembers, isOverride: false); #endregion System.Management.Automation.Remoting.PSSenderInfo #region System.Management.Automation.CompletionResult typeName = @"System.Management.Automation.CompletionResult"; typeMembers = _extendedMembers.GetOrAdd(typeName, GetValueFactoryBasedOnInitCapacity(capacity: 1)); // Process standard members. memberSetMembers = new PSMemberInfoInternalCollection <PSMemberInfo>(capacity: 1); AddMember( errors, typeName, new PSNoteProperty(@"SerializationDepth", 1), memberSetMembers, isOverride: false); ProcessStandardMembers( errors, typeName, memberSetMembers, typeMembers, isOverride: false); #endregion System.Management.Automation.CompletionResult #region Deserialized.System.Management.Automation.CompletionResult typeName = @"Deserialized.System.Management.Automation.CompletionResult"; typeMembers = _extendedMembers.GetOrAdd(typeName, GetValueFactoryBasedOnInitCapacity(capacity: 1)); // Process standard members. memberSetMembers = new PSMemberInfoInternalCollection <PSMemberInfo>(capacity: 1); AddMember( errors, typeName, new PSNoteProperty(@"TargetTypeForDeserialization", typeof(Microsoft.PowerShell.DeserializingTypeConverter)), memberSetMembers, isOverride: false); ProcessStandardMembers( errors, typeName, memberSetMembers, typeMembers, isOverride: false); #endregion Deserialized.System.Management.Automation.CompletionResult #region System.Management.Automation.CommandCompletion typeName = @"System.Management.Automation.CommandCompletion"; typeMembers = _extendedMembers.GetOrAdd(typeName, GetValueFactoryBasedOnInitCapacity(capacity: 1)); // Process standard members. memberSetMembers = new PSMemberInfoInternalCollection <PSMemberInfo>(capacity: 1); AddMember( errors, typeName, new PSNoteProperty(@"SerializationDepth", 1), memberSetMembers, isOverride: false); ProcessStandardMembers( errors, typeName, memberSetMembers, typeMembers, isOverride: false); #endregion System.Management.Automation.CommandCompletion #region Deserialized.System.Management.Automation.CommandCompletion typeName = @"Deserialized.System.Management.Automation.CommandCompletion"; typeMembers = _extendedMembers.GetOrAdd(typeName, GetValueFactoryBasedOnInitCapacity(capacity: 1)); // Process standard members. memberSetMembers = new PSMemberInfoInternalCollection <PSMemberInfo>(capacity: 1); AddMember( errors, typeName, new PSNoteProperty(@"TargetTypeForDeserialization", typeof(Microsoft.PowerShell.DeserializingTypeConverter)), memberSetMembers, isOverride: false); ProcessStandardMembers( errors, typeName, memberSetMembers, typeMembers, isOverride: false); #endregion Deserialized.System.Management.Automation.CommandCompletion #region Microsoft.PowerShell.Commands.ModuleSpecification typeName = @"Microsoft.PowerShell.Commands.ModuleSpecification"; typeMembers = _extendedMembers.GetOrAdd(typeName, GetValueFactoryBasedOnInitCapacity(capacity: 1)); // Process standard members. memberSetMembers = new PSMemberInfoInternalCollection <PSMemberInfo>(capacity: 1); AddMember( errors, typeName, new PSNoteProperty(@"SerializationDepth", 1), memberSetMembers, isOverride: false); ProcessStandardMembers( errors, typeName, memberSetMembers, typeMembers, isOverride: false); #endregion Microsoft.PowerShell.Commands.ModuleSpecification #region Deserialized.Microsoft.PowerShell.Commands.ModuleSpecification typeName = @"Deserialized.Microsoft.PowerShell.Commands.ModuleSpecification"; typeMembers = _extendedMembers.GetOrAdd(typeName, GetValueFactoryBasedOnInitCapacity(capacity: 1)); // Process standard members. memberSetMembers = new PSMemberInfoInternalCollection <PSMemberInfo>(capacity: 1); AddMember( errors, typeName, new PSNoteProperty(@"TargetTypeForDeserialization", typeof(Microsoft.PowerShell.DeserializingTypeConverter)), memberSetMembers, isOverride: false); ProcessStandardMembers( errors, typeName, memberSetMembers, typeMembers, isOverride: false); #endregion Deserialized.Microsoft.PowerShell.Commands.ModuleSpecification #region System.Management.Automation.JobStateEventArgs typeName = @"System.Management.Automation.JobStateEventArgs"; typeMembers = _extendedMembers.GetOrAdd(typeName, GetValueFactoryBasedOnInitCapacity(capacity: 1)); // Process standard members. memberSetMembers = new PSMemberInfoInternalCollection <PSMemberInfo>(capacity: 1); AddMember( errors, typeName, new PSNoteProperty(@"SerializationDepth", 2), memberSetMembers, isOverride: false); ProcessStandardMembers( errors, typeName, memberSetMembers, typeMembers, isOverride: false); #endregion System.Management.Automation.JobStateEventArgs #region Deserialized.System.Management.Automation.JobStateEventArgs typeName = @"Deserialized.System.Management.Automation.JobStateEventArgs"; typeMembers = _extendedMembers.GetOrAdd(typeName, GetValueFactoryBasedOnInitCapacity(capacity: 1)); // Process standard members. memberSetMembers = new PSMemberInfoInternalCollection <PSMemberInfo>(capacity: 1); AddMember( errors, typeName, new PSNoteProperty(@"TargetTypeForDeserialization", typeof(Microsoft.PowerShell.DeserializingTypeConverter)), memberSetMembers, isOverride: false); ProcessStandardMembers( errors, typeName, memberSetMembers, typeMembers, isOverride: false); #endregion Deserialized.System.Management.Automation.JobStateEventArgs #region System.Exception typeName = @"System.Exception"; typeMembers = _extendedMembers.GetOrAdd(typeName, GetValueFactoryBasedOnInitCapacity(capacity: 1)); // Process standard members. memberSetMembers = new PSMemberInfoInternalCollection <PSMemberInfo>(capacity: 1); AddMember( errors, typeName, new PSNoteProperty(@"SerializationDepth", 1), memberSetMembers, isOverride: false); ProcessStandardMembers( errors, typeName, memberSetMembers, typeMembers, isOverride: false); #endregion System.Exception #region System.Management.Automation.Remoting.PSSessionOption typeName = @"System.Management.Automation.Remoting.PSSessionOption"; typeMembers = _extendedMembers.GetOrAdd(typeName, GetValueFactoryBasedOnInitCapacity(capacity: 1)); // Process standard members. memberSetMembers = new PSMemberInfoInternalCollection <PSMemberInfo>(capacity: 1); AddMember( errors, typeName, new PSNoteProperty(@"SerializationDepth", 1), memberSetMembers, isOverride: false); ProcessStandardMembers( errors, typeName, memberSetMembers, typeMembers, isOverride: false); #endregion System.Management.Automation.Remoting.PSSessionOption #region Deserialized.System.Management.Automation.Remoting.PSSessionOption typeName = @"Deserialized.System.Management.Automation.Remoting.PSSessionOption"; typeMembers = _extendedMembers.GetOrAdd(typeName, GetValueFactoryBasedOnInitCapacity(capacity: 1)); // Process standard members. memberSetMembers = new PSMemberInfoInternalCollection <PSMemberInfo>(capacity: 1); AddMember( errors, typeName, new PSNoteProperty(@"TargetTypeForDeserialization", typeof(Microsoft.PowerShell.DeserializingTypeConverter)), memberSetMembers, isOverride: false); ProcessStandardMembers( errors, typeName, memberSetMembers, typeMembers, isOverride: false); #endregion Deserialized.System.Management.Automation.Remoting.PSSessionOption #region System.Management.Automation.DebuggerStopEventArgs typeName = @"System.Management.Automation.DebuggerStopEventArgs"; typeMembers = _extendedMembers.GetOrAdd(typeName, GetValueFactoryBasedOnInitCapacity(capacity: 2)); // Process regular members. newMembers.Add(@"SerializedInvocationInfo"); AddMember( errors, typeName, new PSCodeProperty( @"SerializedInvocationInfo", GetMethodInfo(typeof(Microsoft.PowerShell.DeserializingTypeConverter), @"GetInvocationInfo"), setterCodeReference: null) { IsHidden = true }, typeMembers, isOverride: false); // Process standard members. memberSetMembers = new PSMemberInfoInternalCollection <PSMemberInfo>(capacity: 3); AddMember( errors, typeName, new PSNoteProperty(@"SerializationMethod", @"SpecificProperties"), memberSetMembers, isOverride: false); AddMember( errors, typeName, new PSNoteProperty(@"SerializationDepth", 2), memberSetMembers, isOverride: false); AddMember( errors, typeName, new PSPropertySet( @"PropertySerializationSet", new List <string> { "Breakpoints", "ResumeAction", "SerializedInvocationInfo" }), memberSetMembers, isOverride: false); ProcessStandardMembers( errors, typeName, memberSetMembers, typeMembers, isOverride: false); #endregion System.Management.Automation.DebuggerStopEventArgs #region Deserialized.System.Management.Automation.DebuggerStopEventArgs typeName = @"Deserialized.System.Management.Automation.DebuggerStopEventArgs"; typeMembers = _extendedMembers.GetOrAdd(typeName, GetValueFactoryBasedOnInitCapacity(capacity: 1)); // Process standard members. memberSetMembers = new PSMemberInfoInternalCollection <PSMemberInfo>(capacity: 1); AddMember( errors, typeName, new PSNoteProperty(@"TargetTypeForDeserialization", typeof(Microsoft.PowerShell.DeserializingTypeConverter)), memberSetMembers, isOverride: false); ProcessStandardMembers( errors, typeName, memberSetMembers, typeMembers, isOverride: false); #endregion Deserialized.System.Management.Automation.DebuggerStopEventArgs // Update binder version for newly added members. foreach (string memberName in newMembers) { PSGetMemberBinder.TypeTableMemberAdded(memberName); } }