Я обнаружил странное поведение с использованием powershell.
Вывод одного объекта в кавычках отличается от вывода метода ToString (), вызванного для того же объекта.
метод или свойство, вызванное в
Write-Output "$a"
Это каталог, который я запускаю, пример
> PS C:\temp\testps> DIR
Directory: C:\temp\testps
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 03/12/2010 11.21 8 1.txt
-a--- 03/12/2010 11.21 8 2.txt
-a--- 03/12/2010 11.21 8 3.txt
Здесь я назначаю коллекцию файлов для объекта $ q
PS C:\temp\testps> $q = Get-ChildItem . "*.txt"
Теперь я хочу напечатать имена файлов, но получаю неожиданный вывод
PS C:\temp\testps> foreach ($a in $q) {Write-Output $a}
Directory: C:\temp\testps
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 03/12/2010 11.21 8 1.txt
-a--- 03/12/2010 11.21 8 2.txt
-a--- 03/12/2010 11.21 8 3.txt
Размещение кавычек вокруг имени объекта показывает правильное поведение
PS C:\temp\testps> foreach ($a in $q) {Write-Output "$a"}
1.txt
2.txt
3.txt
Этовывод только для первого объекта.Похоже, весь вывод команды DIR до первого имени файла.Unparsed.
PS C:\temp\testps> foreach ($a in $q) {Write-Output $a;break}
Directory: C:\temp\testps
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 03/12/2010 11.21 8 1.txt
Метод ToString () ведет себя как объект в кавычках.
PS C:\temp\testps> foreach ($a in $q) {Write-Output $a.ToString()}
1.txt
2.txt
3.txt