سؤال

أنا في عداد المفقودين شيء هنا:

$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]}

إذا كان "اسم" كانت سلسلة هذا يجب أن تعود أول حرف ، ولكن لأنها مجموعة ترجع السلسلة الأولى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top