نقلا عن النظام.DirectoryServices.ResultPropertyCollection
-
08-06-2019 - |
سؤال
أنا في عداد المفقودين شيء هنا:
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = New-Object System.DirectoryServices.DirectoryEntry
$objSearcher.Filter = ("(objectclass=computer)")
$computers = $objSearcher.findall()
لذا فإن السؤال هو لماذا اثنين من النواتج التالية تختلف ؟
$computers | %{
"Server name in quotes $_.properties.name"
"Server name not in quotes " + $_.properties.name
}
PS> $computers[0] | %{"$_.properties.name"; $_.properties.name}
System.DirectoryServices.SearchResult.properties.name
GORILLA
المحلول
عند إدراج $_.خصائص.اسم السلسلة ، كان عائدا على اسم نوع من الممتلكات.عندما متغير يتم تضمينها في سلسلة سلسلة تقييم ويدعو ToString الطريقة على هذا الكائن المشار إليه من قبل المتغير (وليس بما في ذلك أعضاء المحدد بعد).
في هذه الحالة ، ToString طريقة العودة اكتب اسم.يمكنك القوة تقييم متغير أعضاء غرار ما EBGreen المقترحة ، ولكن باستخدام
"Server name in quotes $($_.properties.name)"
في سيناريو آخر PowerShell هو تقييم متغير أعضاء المحدد أولا ثم تضاف إلى السابقة من السلسلة.
أنت على حق أن تحصل على العودة مجموعة من الخصائص.إذا كنت الأنابيب $الكمبيوتر[0].خصائص للحصول على الأعضاء ، يمكنك استكشاف نموذج كائن من سطر الأوامر.
الجزء المهم هو أدناه.
TypeName:النظام.DirectoryServices.ResultPropertyCollection
اسم نوع العضوية التعريف
القيم نظام الملكية.مجموعات.ICollection القيم {get;}
نصائح أخرى
وأعتقد أنه له علاقة مع الطريقة التي PS يحرف المعلومات في "".جرب هذا:
"اسم الملقم في الاقتباس $($_.خصائص).اسم"
أو حتى قد تحتاج إلى واحد أكثر من $().أنا لست في مكان ما أن أختبره الآن.
قريبة-أدناه يعمل بشكل صحيح, ولكن سأكون مهتما إذا كان أي شخص لديه أعمق تفسير.
PS C:\> $computers[0] | %{ "$_.properties.name"; "$($_.properties.name)" }
System.DirectoryServices.SearchResult.properties.name
GORILLA
لذلك يبدو أن $_.خصائص.اسم لا احتراما مثل كنت أتوقع أن.إذا أنا تصور بشكل صحيح ، فإن حقيقة أن الاسم هو خاصية متعددة القيم يؤدي إلى عودة صفيف.والتي (على ما أظن) من شأنه أن يفسر لماذا الأعمال التالية:
$computers[0] | %{ $_.properties.name[0]}
إذا كان "اسم" كانت سلسلة هذا يجب أن تعود أول حرف ، ولكن لأنها مجموعة ترجع السلسلة الأولى.