Также бонусные баллы, если вы можете сказать, почему $ newTestContents [0] .ToString () является пустой строкой
Если вы посмотрите на его тип, то это PSCustomObject, например.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Если вы посмотрите на impl ToString () объекта PSCustomObject в Reflector, вы увидите следующее:
public override string ToString()
{
return "";
}
Почему это происходит, я не знаю. Однако, вероятно, лучше использовать приведение типа строки в PowerShell, например ::1013*
PS> [string]$newTestContents[0]
@{"abc -" + $_=abc -test1}
Возможно, вы искали этот результат, хотя:
PS> $newTestContents | %{$_.{"abc -" + $_}}
abc -test1
abc -test2
Это демонстрирует, что при использовании Select-Object с простым блоком скрипта содержимое этого блока скрипта формирует новое имя свойства в созданном объекте PSCustomObject. В общем, подход Nestor - это путь, но в будущем, если вам понадобится обобщить свойства, подобные этим, используйте такую хеш-таблицу:
PS> $newTestContents = $testContents | Select @{n='MyName';e={"abc -" + $_}}
PS> $newTestContents
MyName
------
abc -test1
abc -test2
PS> $newTestContents[0].MyName
abc -test1