Powershell: вывод объекта [] в файл
-
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 -" + Я хотел бы получить содержимое файла, отфильтровать и изменить его и записать результат обратно в файл. Я делаю это:
"abc -" + Я хотел бы получить содержимое файла, отфильтровать и изменить его и записать результат обратно в файл. Я делаю это:
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 -" + Я хотел бы получить содержимое файла, отфильтровать и изменить его и записать результат обратно в файл. Я делаю это:
<*>
output.txt содержит
<*>
Что дает эта первая строка? Это почти как foreach возвращает IEnumerable - но $ newTestContents.GetType () показывает, что это массив объектов. Так что же дает? Как я могу получить массив для вывода нормально без странного заголовка.
Также бонусные баллы, если вы можете сказать, почему $ newTestContents [0] .ToString () - пустая строка
}
PS C:\code> $newTestContents >> output.txt
output.txt содержит
<*>
Что дает эта первая строка? Это почти как foreach возвращает IEnumerable - но $ newTestContents.GetType () показывает, что это массив объектов. Так что же дает? Как я могу получить массив для вывода нормально без странного заголовка.
Также бонусные баллы, если вы можете сказать, почему $ newTestContents [0] .ToString () - пустая строка
------------
abc -test1
abc -test2
output.txt содержит
<*>
Что дает эта первая строка? Это почти как foreach возвращает IEnumerable - но $ newTestContents.GetType () показывает, что это массив объектов. Так что же дает? Как я могу получить массив для вывода нормально без странного заголовка.
Также бонусные баллы, если вы можете сказать, почему $ newTestContents [0] .ToString () - пустая строка
}
PS C:\code> $newTestContents >> output.txt
output.txt содержит
<*>Что дает эта первая строка? Это почти как foreach возвращает IEnumerable - но $ newTestContents.GetType () показывает, что это массив объектов. Так что же дает? Как я могу получить массив для вывода нормально без странного заголовка.
Также бонусные баллы, если вы можете сказать, почему $ newTestContents [0] .ToString () - пустая строка
Решение
Используйте ForEach вместо Select-Object
Другие советы
Также бонусные баллы, если вы можете сказать, почему $ newTestContents [0] .ToString () - пустая строка
Если вы посмотрите на его тип, то это PSCustomObject, например.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Если вы посмотрите на ImpString () в PSCustomObject в Reflector, вы увидите следующее:
public override string ToString()
{
return "";
}
Почему это происходит, я не знаю. Однако, вероятно, лучше использовать приведение типа строки в PowerShell, например:
PS> [string]$newTestContents[0]
@{"abc -" +
Также бонусные баллы, если вы можете сказать, почему $ newTestContents [0] .ToString () - пустая строка
Если вы посмотрите на его тип, то это PSCustomObject, например.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Если вы посмотрите на ImpString () в PSCustomObject в Reflector, вы увидите следующее:
public override string ToString()
{
return "";
}
Почему это происходит, я не знаю. Однако, вероятно, лучше использовать приведение типа строки в PowerShell, например:
PS> $newTestContents | %{
Также бонусные баллы, если вы можете сказать, почему $ newTestContents [0] .ToString () - пустая строка
Если вы посмотрите на его тип, то это PSCustomObject, например.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Если вы посмотрите на ImpString () в PSCustomObject в Reflector, вы увидите следующее:
public override string ToString()
{
return "";
}
Почему это происходит, я не знаю. Однако, вероятно, лучше использовать приведение типа строки в PowerShell, например:
PS> [string]$newTestContents[0]
@{"abc -" +
Также бонусные баллы, если вы можете сказать, почему $ newTestContents [0] .ToString () - пустая строка
Если вы посмотрите на его тип, то это PSCustomObject, например.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Если вы посмотрите на ImpString () в PSCustomObject в Reflector, вы увидите следующее:
public override string ToString()
{
return "";
}
Почему это происходит, я не знаю. Однако, вероятно, лучше использовать приведение типа строки в PowerShell, например:
PS> $newTestContents = $testContents | Select @{n='MyName';e={"abc -" +
Также бонусные баллы, если вы можете сказать, почему $ newTestContents [0] .ToString () - пустая строка
Если вы посмотрите на его тип, то это PSCustomObject, например.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Если вы посмотрите на ImpString () в PSCustomObject в Reflector, вы увидите следующее:
public override string ToString()
{
return "";
}
Почему это происходит, я не знаю. Однако, вероятно, лучше использовать приведение типа строки в PowerShell, например:
PS> [string]$newTestContents[0]
@{"abc -" +
Также бонусные баллы, если вы можете сказать, почему $ newTestContents [0] .ToString () - пустая строка
Если вы посмотрите на его тип, то это PSCustomObject, например.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Если вы посмотрите на ImpString () в PSCustomObject в Reflector, вы увидите следующее:
public override string ToString()
{
return "";
}
Почему это происходит, я не знаю. Однако, вероятно, лучше использовать приведение типа строки в PowerShell, например:
PS> $newTestContents | %{
Также бонусные баллы, если вы можете сказать, почему $ newTestContents [0] .ToString () - пустая строка
Если вы посмотрите на его тип, то это PSCustomObject, например.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Если вы посмотрите на ImpString () в PSCustomObject в Reflector, вы увидите следующее:
public override string ToString()
{
return "";
}
Почему это происходит, я не знаю. Однако, вероятно, лучше использовать приведение типа строки в PowerShell, например:
PS> [string]$newTestContents[0]
@{"abc -" +
Также бонусные баллы, если вы можете сказать, почему $ newTestContents [0] .ToString () - пустая строка
Если вы посмотрите на его тип, то это PSCustomObject, например.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Если вы посмотрите на ImpString () в PSCustomObject в Reflector, вы увидите следующее:
public override string ToString()
{
return "";
}
Почему это происходит, я не знаю. Однако, вероятно, лучше использовать приведение типа строки в PowerShell, например:
<*>
Возможно, вы искали этот результат, хотя:
<*>
Это демонстрирует, что при использовании Select-Object с простым блоком сценариев содержимое этого блока сценария формирует новое имя свойства в созданном объекте PSCustomObject. В общем, подход Nestor - это путь, но в будущем, если вам понадобится обобщить свойства, подобные этим, используйте следующую хеш-таблицу:
<*>=abc -test1}
Возможно, вы искали этот результат, хотя:
<*>
Это демонстрирует, что при использовании Select-Object с простым блоком сценариев содержимое этого блока сценария формирует новое имя свойства в созданном объекте PSCustomObject. В общем, подход Nestor - это путь, но в будущем, если вам понадобится обобщить свойства, подобные этим, используйте следующую хеш-таблицу:
<*>.{"abc -" +
Также бонусные баллы, если вы можете сказать, почему $ newTestContents [0] .ToString () - пустая строка
Если вы посмотрите на его тип, то это PSCustomObject, например.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Если вы посмотрите на ImpString () в PSCustomObject в Reflector, вы увидите следующее:
public override string ToString()
{
return "";
}
Почему это происходит, я не знаю. Однако, вероятно, лучше использовать приведение типа строки в PowerShell, например:
PS> [string]$newTestContents[0]
@{"abc -" +
Также бонусные баллы, если вы можете сказать, почему $ newTestContents [0] .ToString () - пустая строка
Если вы посмотрите на его тип, то это PSCustomObject, например.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Если вы посмотрите на ImpString () в PSCustomObject в Reflector, вы увидите следующее:
public override string ToString()
{
return "";
}
Почему это происходит, я не знаю. Однако, вероятно, лучше использовать приведение типа строки в PowerShell, например:
<*>
Возможно, вы искали этот результат, хотя:
<*>
Это демонстрирует, что при использовании Select-Object с простым блоком сценариев содержимое этого блока сценария формирует новое имя свойства в созданном объекте PSCustomObject. В общем, подход Nestor - это путь, но в будущем, если вам понадобится обобщить свойства, подобные этим, используйте следующую хеш-таблицу:
<*>=abc -test1}
Возможно, вы искали этот результат, хотя:
<*>
Это демонстрирует, что при использовании Select-Object с простым блоком сценариев содержимое этого блока сценария формирует новое имя свойства в созданном объекте PSCustomObject. В общем, подход Nestor - это путь, но в будущем, если вам понадобится обобщить свойства, подобные этим, используйте следующую хеш-таблицу:
<*>}}
abc -test1
abc -test2
Возможно, вы искали этот результат, хотя:
<*>
Это демонстрирует, что при использовании Select-Object с простым блоком сценариев содержимое этого блока сценария формирует новое имя свойства в созданном объекте PSCustomObject. В общем, подход Nestor - это путь, но в будущем, если вам понадобится обобщить свойства, подобные этим, используйте следующую хеш-таблицу:
<*>=abc -test1}
Возможно, вы искали этот результат, хотя:
<*>
Это демонстрирует, что при использовании Select-Object с простым блоком сценариев содержимое этого блока сценария формирует новое имя свойства в созданном объекте PSCustomObject. В общем, подход Nestor - это путь, но в будущем, если вам понадобится обобщить свойства, подобные этим, используйте следующую хеш-таблицу:
<*>}}
PS> $newTestContents
MyName
------
abc -test1
abc -test2
PS> $newTestContents[0].MyName
abc -test1
Возможно, вы искали этот результат, хотя:
<*>
Это демонстрирует, что при использовании Select-Object с простым блоком сценариев содержимое этого блока сценария формирует новое имя свойства в созданном объекте PSCustomObject. В общем, подход Nestor - это путь, но в будущем, если вам понадобится обобщить свойства, подобные этим, используйте следующую хеш-таблицу:
<*>=abc -test1}
Возможно, вы искали этот результат, хотя:
<*>
Это демонстрирует, что при использовании Select-Object с простым блоком сценариев содержимое этого блока сценария формирует новое имя свойства в созданном объекте PSCustomObject. В общем, подход Nestor - это путь, но в будущем, если вам понадобится обобщить свойства, подобные этим, используйте следующую хеш-таблицу:
<*>.{"abc -" +
Также бонусные баллы, если вы можете сказать, почему $ newTestContents [0] .ToString () - пустая строка
Если вы посмотрите на его тип, то это PSCustomObject, например.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Если вы посмотрите на ImpString () в PSCustomObject в Reflector, вы увидите следующее:
public override string ToString()
{
return "";
}
Почему это происходит, я не знаю. Однако, вероятно, лучше использовать приведение типа строки в PowerShell, например:
PS> [string]$newTestContents[0]
@{"abc -" +
Также бонусные баллы, если вы можете сказать, почему $ newTestContents [0] .ToString () - пустая строка
Если вы посмотрите на его тип, то это PSCustomObject, например.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Если вы посмотрите на ImpString () в PSCustomObject в Reflector, вы увидите следующее:
public override string ToString()
{
return "";
}
Почему это происходит, я не знаю. Однако, вероятно, лучше использовать приведение типа строки в PowerShell, например:
<*>
Возможно, вы искали этот результат, хотя:
<*>
Это демонстрирует, что при использовании Select-Object с простым блоком сценариев содержимое этого блока сценария формирует новое имя свойства в созданном объекте PSCustomObject. В общем, подход Nestor - это путь, но в будущем, если вам понадобится обобщить свойства, подобные этим, используйте следующую хеш-таблицу:
<*>=abc -test1}
Возможно, вы искали этот результат, хотя:
<*>
Это демонстрирует, что при использовании Select-Object с простым блоком сценариев содержимое этого блока сценария формирует новое имя свойства в созданном объекте PSCustomObject. В общем, подход Nestor - это путь, но в будущем, если вам понадобится обобщить свойства, подобные этим, используйте следующую хеш-таблицу:
<*>}}
abc -test1
abc -test2
Возможно, вы искали этот результат, хотя:
<*>
Это демонстрирует, что при использовании Select-Object с простым блоком сценариев содержимое этого блока сценария формирует новое имя свойства в созданном объекте PSCustomObject. В общем, подход Nestor - это путь, но в будущем, если вам понадобится обобщить свойства, подобные этим, используйте следующую хеш-таблицу:
<*>=abc -test1}
Возможно, вы искали этот результат, хотя:
<*>Это демонстрирует, что при использовании Select-Object с простым блоком сценариев содержимое этого блока сценария формирует новое имя свойства в созданном объекте PSCustomObject. В общем, подход Nestor - это путь, но в будущем, если вам понадобится обобщить свойства, подобные этим, используйте следующую хеш-таблицу:
<*>