0

Main スクリプトから RunSpace コード ブロックに配列オブジェクトを渡すと、奇妙な動作が発生します。Where-ObjectRunSpace コード ブロック内のステートメントを使用して値を取得しようとしています。ただし、null メソッドに関連するエラーが発生します。

Where-Object実行空間に渡す前に配列に対して同じステートメントを実行すると、機能しますか?

たとえば、配列が RunSpace に渡される前に次の操作を実行すると、正常に動作します。

$ARRAY | Where-Object {$_.object -eq $Variable}).PropertyofwhatIWant.ToString()

この配列を実行空間に渡して同じことを実行すると、次のように失敗します。

null 値の式でメソッドを呼び出すことはできません。
行:25 文字:13
+ $strSourceGivenName = ($arr_Src_Users1 | Where-Object {$_.objectsid ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (:) []、RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

両方の配列オブジェクトを比較しましたが、まったく同じプロパティを持っていますか? Get-Member?をチェックすると、ARRAY と ARRAY1 の違いはありません。何が起こっている?

モジュール : CommonLanguageRuntimeLibrary
アセンブリ: mscorlib、バージョン = 4.0.0.0、カルチャ = ニュートラル、PublicKeyToken = b77a5c561934e089
TypeHandle : System.RuntimeTypeHandle
DeclaringMethod :
BaseType : System.Array
UnderlyingSystemType : System.Object[]
フルネーム: System.Object[]
AssemblyQualifiedName : System.Object[]、mscorlib、バージョン = 4.0.0.0、カルチャ = ニュートラル、PublicKeyToken = b77a5c561934e089
名前空間 : システム
GUID : 00000000-0000-0000-0000-000000000000
IsEnum : 偽
GenericParameterAttributes :
IsSecurityCritical : False
IsSecuritySafeCritical : False
IsSecurityTransparent : True
IsGenericTypeDefinition : False
IsGenericParameter : False
GenericParameterPosition :
IsGenericType : False
IsConstructedGenericType : False
ContainsGenericParameters : False
StructLayoutAttribute :
名前 : オブジェクト[]
MemberType : TypeInfo
DeclaringType :
反射タイプ:
メタデータトークン: 33554432
GenericTypeParameters: {}
DeclaredConstructors : {Void .ctor(Int32)}
宣言されたイベント: {}
宣言されたフィールド: {}
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: {}
宣言されたプロパティ: {}
ImplementedInterfaces : {System.ICloneable、System.Collections.IList、System.Collections.ICollection、System.Collections.IEnumerable...}
TypeInitializer :
IsNested : False
属性: AutoLayout、AnsiClass、Class、Public、Sealed、Serializable
IsVisible : 真
IsNotPublic : False
IsPublic : 真
IsNestedPublic : False
IsNestedPrivate : False
IsNestedFamily : False
IsNestedAssembly : False
IsNestedFamANDAssem : False
IsNestedFamORAssem : False
IsAutoLayout : 真
IsLayoutSequential : False
IsExplicitLayout : False
IsClass : 真
IsInterface : 偽
IsValueType : 偽
IsAbstract : False
IsSealed : True
IsSpecialName : False
IsImport : 偽
IsSerializable : 真
IsAnsiClass : 真
IsUnicodeClass : False
IsAutoClass : 偽
IsArray : 真
IsByRef : 偽
IsPointer : 偽
IsPrimitive : False
IsCOMObject : False
HasElementType : 真
IsContextful : False
IsMarshalByRef : False
GenericTypeArguments : {}
CustomAttributes : {[System.SerializableAttribute()]}
4

2 に答える 2

0

問題を解決しました: Runspace とは関係ありません。これは、PS の処理方法に関係していました: TypeName: Microsoft.ActiveDirectory.Management.ADUser

そこで、必要なプロパティを除外してカスタム オブジェクトを作成し、これを関数に渡しました :-)

于 2016-10-23T19:44:03.503 に答える