الكائن الناتج [] إلى ملف: بوويرشيل
-
06-07-2019 - |
سؤال
وأود أن استرداد محتويات ملف وتصفية وتعديلها والكتابة النتيجة مرة أخرى إلى ملف. أفعل هذا:
PS C:\code> "test1" >> test.txt
PS C:\code> "test2" >> test.txt
PS C:\code> $testContents = Get-Content test.txt
PS C:\code> $newTestContents = $testContents | Select-Object {"abc -" + $_}
PS C:\code> $newTestContents >> output.txt
ويحتوي output.txt
"abc -" + $_
------------
abc -test1
abc -test2
ما يعطي مع ذلك السطر الأول؟ انها تقريبا مثل foreach يعطي مرة أخرى على IEnumerable - ولكن $ newTestContents.GetType () يكشف هو مجموعة الكائن. وذلك ما يعطي؟ كيف يمكنني الحصول على مجموعة لإخراج عادة دون رأس غريب.
وأيضا نقاط المكافأة إذا كان يمكنك أن تقول لي لماذا $ newTestContents [0] .ToString () هي سلسلة فارغة
المحلول
استخدم ForEach بدلا من الاختيار بين وجوه
نصائح أخرى
وأيضا نقاط المكافأة إذا كان يمكنك أن تقول لي لماذا $ newTestContents [0] .ToString () هي سلسلة فارغة
اقتباس فقرة> اقتباس فقرة>إذا نظرتم نوعه، بل هو PSCustomObject منها مثلا.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
إذا نظرتم ToString PSCustomObject () لimpl في العاكس ترى هذا:
public override string ToString()
{
return "";
}
وماذا يفعل هذا، وأنا لا أعرف. ومع ذلك، قد يكون من الأفضل استخدام سلسلة نوع الإكراه في بوويرشيل منها مثلا:
PS> [string]$newTestContents[0]
@{"abc -" + $_=abc -test1}
وربما كنت تبحث عن هذه النتيجة على الرغم من:
PS> $newTestContents | %{$_.{"abc -" + $_}}
abc -test1
abc -test2
وهذا يدل على أنه عند استخدام اختر-كائن مع scriptblock بسيطة محتويات هذا scriptblock تشكل اسم الخاصية الجديدة على PSCustomObject الذي تم إنشاؤه. بشكل عام، نهج نيستور هو الطريق للذهاب ولكن في المستقبل إذا كنت بحاجة إلى synthensize خصائص مثل هذا ثم استخدام جدول هاش مثل ذلك:
PS> $newTestContents = $testContents | Select @{n='MyName';e={"abc -" + $_}}
PS> $newTestContents
MyName
------
abc -test1
abc -test2
PS> $newTestContents[0].MyName
abc -test1