将数组对象从主脚本传递到RunSpace代码块时,我会遇到奇怪的行为。
我试图在RunSpace代码块中使用Where-Object
语句检索值。
但是会产生与null方法有关的错误。
如果我在传递给runspace之前对数组执行相同的Where-Object
语句,那么它是否有效?
例如,如果我在数组上传递给RunSpace之前执行以下操作,它可以正常工作:
$ARRAY | Where-Object {$_.object -eq $Variable}).PropertyofwhatIWant.ToString()
如果我将此数组传递给了运行空间并执行相同的操作,那么它将失败:
You cannot call a method on a null-valued expression. At line:25 char:13 + $strSourceGivenName = ($arr_Src_Users1 | Where-Object {$_.objectsid ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull
我比较了两个数组对象并且它们具有完全相同的属性?
检查Get-Member
时,ARRAY和ARRAY1没有区别?
发生了什么事?
Module : CommonLanguageRuntimeLibrary Assembly : mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 TypeHandle : System.RuntimeTypeHandle DeclaringMethod : BaseType : System.Array UnderlyingSystemType : System.Object[] FullName : System.Object[] AssemblyQualifiedName : System.Object[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Namespace : System GUID : 00000000-0000-0000-0000-000000000000 IsEnum : False GenericParameterAttributes : IsSecurityCritical : False IsSecuritySafeCritical : False IsSecurityTransparent : True IsGenericTypeDefinition : False IsGenericParameter : False GenericParameterPosition : IsGenericType : False IsConstructedGenericType : False ContainsGenericParameters : False StructLayoutAttribute : Name : Object[] MemberType : TypeInfo DeclaringType : ReflectedType : MetadataToken : 33554432 GenericTypeParameters : {} DeclaredConstructors : {Void .ctor(Int32)} DeclaredEvents : {} DeclaredFields : {} DeclaredMembers : {Void Set(Int32, System.Object), System.Object& Address(Int32), System.Object Get(Int32), Void .ctor(Int32)} DeclaredMethods : {Void Set(Int32, System.Object), System.Object& Address(Int32), System.Object Get(Int32)} DeclaredNestedTypes : {} DeclaredProperties : {} ImplementedInterfaces : {System.ICloneable, System.Collections.IList, System.Collections.ICollection, System.Collections.IEnumerable...} TypeInitializer : IsNested : False Attributes : AutoLayout, AnsiClass, Class, Public, Sealed, Serializable IsVisible : True IsNotPublic : False IsPublic : True IsNestedPublic : False IsNestedPrivate : False IsNestedFamily : False IsNestedAssembly : False IsNestedFamANDAssem : False IsNestedFamORAssem : False IsAutoLayout : True IsLayoutSequential : False IsExplicitLayout : False IsClass : True IsInterface : False IsValueType : False IsAbstract : False IsSealed : True IsSpecialName : False IsImport : False IsSerializable : True IsAnsiClass : True IsUnicodeClass : False IsAutoClass : False IsArray : True IsByRef : False IsPointer : False IsPrimitive : False IsCOMObject : False HasElementType : True IsContextful : False IsMarshalByRef : False GenericTypeArguments : {} CustomAttributes : {[System.SerializableAttribute()]}
答案 0 :(得分:0)
我解决了我的问题: 与Runspace无关。 它与PS处理的方式有关:TypeName:Microsoft.ActiveDirectory.Management.ADUser
所以我过滤掉了我需要的属性并创建了一个自定义对象并将其传递给我的函数: - )
答案 1 :(得分:0)
只要将Microsoft.ActiveDirectory.Management.ADUser对象传递给另一个函数,即使管道输出数组,您也可以看到所有属性,就像在主调用中一样,属性不再可用。我会更多地挖掘为什么会这样,但是现在我的解决方法效果很好