Вопрос

Я хотел бы получить содержимое файла, отфильтровать и изменить его и записать результат обратно в файл. Я делаю это:

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 - это путь, но в будущем, если вам понадобится обобщить свойства, подобные этим, используйте следующую хеш-таблицу:

<*>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top