Pregunta

Me gustaría recuperar el contenido de un archivo, filtrarlo y modificarlo y escribir el resultado en un archivo. Hago esto:

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 -" + 

Me gustaría recuperar el contenido de un archivo, filtrarlo y modificarlo y escribir el resultado en un archivo. Hago esto:

"abc -" + 

Me gustaría recuperar el contenido de un archivo, filtrarlo y modificarlo y escribir el resultado en un archivo. Hago esto:

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 -" + 

Me gustaría recuperar el contenido de un archivo, filtrarlo y modificarlo y escribir el resultado en un archivo. Hago esto:

<*>

output.txt contiene

<*>

¿Qué da con esa primera línea? Es casi como foreach devuelve un IEnumerable, pero $ newTestContents.GetType () revela que es una matriz de objetos. Entonces, ¿qué da? ¿Cómo puedo hacer que la matriz salga normalmente sin el encabezado extraño?

También puntos de bonificación si me puede decir por qué $ newTestContents [0] .ToString () es una cadena en blanco

} PS C:\code> $newTestContents >> output.txt

output.txt contiene

<*>

¿Qué da con esa primera línea? Es casi como foreach devuelve un IEnumerable, pero $ newTestContents.GetType () revela que es una matriz de objetos. Entonces, ¿qué da? ¿Cómo puedo hacer que la matriz salga normalmente sin el encabezado extraño?

También puntos de bonificación si me puede decir por qué $ newTestContents [0] .ToString () es una cadena en blanco

------------ abc -test1 abc -test2

output.txt contiene

<*>

¿Qué da con esa primera línea? Es casi como foreach devuelve un IEnumerable, pero $ newTestContents.GetType () revela que es una matriz de objetos. Entonces, ¿qué da? ¿Cómo puedo hacer que la matriz salga normalmente sin el encabezado extraño?

También puntos de bonificación si me puede decir por qué $ newTestContents [0] .ToString () es una cadena en blanco

} PS C:\code> $newTestContents >> output.txt

output.txt contiene

<*>

¿Qué da con esa primera línea? Es casi como foreach devuelve un IEnumerable, pero $ newTestContents.GetType () revela que es una matriz de objetos. Entonces, ¿qué da? ¿Cómo puedo hacer que la matriz salga normalmente sin el encabezado extraño?

También puntos de bonificación si me puede decir por qué $ newTestContents [0] .ToString () es una cadena en blanco

¿Fue útil?

Solución

Use ForEach en lugar del Select-Object

Otros consejos

  
    

También puntos de bonificación si me puede decir por qué $ newTestContents [0] .ToString () es una cadena en blanco

  

Si observa su tipo, es un PSCustomObject, por ejemplo,

PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject

Si observas el implícito ToString () de PSCustomObject en Reflector, verás esto:

public override string ToString()
{
    return "";
}

Por qué hace esto, no lo sé. Sin embargo, probablemente sea mejor usar la coerción de tipo cadena en PowerShell, por ejemplo:

PS> [string]$newTestContents[0]
@{"abc -" + 
  
    

También puntos de bonificación si me puede decir por qué $ newTestContents [0] .ToString () es una cadena en blanco

  

Si observa su tipo, es un PSCustomObject, por ejemplo,

PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject

Si observas el implícito ToString () de PSCustomObject en Reflector, verás esto:

public override string ToString()
{
    return "";
}

Por qué hace esto, no lo sé. Sin embargo, probablemente sea mejor usar la coerción de tipo cadena en PowerShell, por ejemplo:

PS> $newTestContents | %{
  
    

También puntos de bonificación si me puede decir por qué $ newTestContents [0] .ToString () es una cadena en blanco

  

Si observa su tipo, es un PSCustomObject, por ejemplo,

PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject

Si observas el implícito ToString () de PSCustomObject en Reflector, verás esto:

public override string ToString()
{
    return "";
}

Por qué hace esto, no lo sé. Sin embargo, probablemente sea mejor usar la coerción de tipo cadena en PowerShell, por ejemplo:

PS> [string]$newTestContents[0]
@{"abc -" + 
  
    

También puntos de bonificación si me puede decir por qué $ newTestContents [0] .ToString () es una cadena en blanco

  

Si observa su tipo, es un PSCustomObject, por ejemplo,

PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject

Si observas el implícito ToString () de PSCustomObject en Reflector, verás esto:

public override string ToString()
{
    return "";
}

Por qué hace esto, no lo sé. Sin embargo, probablemente sea mejor usar la coerción de tipo cadena en PowerShell, por ejemplo:

PS> $newTestContents = $testContents | Select @{n='MyName';e={"abc -" + 
  
    

También puntos de bonificación si me puede decir por qué $ newTestContents [0] .ToString () es una cadena en blanco

  

Si observa su tipo, es un PSCustomObject, por ejemplo,

PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject

Si observas el implícito ToString () de PSCustomObject en Reflector, verás esto:

public override string ToString()
{
    return "";
}

Por qué hace esto, no lo sé. Sin embargo, probablemente sea mejor usar la coerción de tipo cadena en PowerShell, por ejemplo:

PS> [string]$newTestContents[0]
@{"abc -" + 
  
    

También puntos de bonificación si me puede decir por qué $ newTestContents [0] .ToString () es una cadena en blanco

  

Si observa su tipo, es un PSCustomObject, por ejemplo,

PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject

Si observas el implícito ToString () de PSCustomObject en Reflector, verás esto:

public override string ToString()
{
    return "";
}

Por qué hace esto, no lo sé. Sin embargo, probablemente sea mejor usar la coerción de tipo cadena en PowerShell, por ejemplo:

PS> $newTestContents | %{
  
    

También puntos de bonificación si me puede decir por qué $ newTestContents [0] .ToString () es una cadena en blanco

  

Si observa su tipo, es un PSCustomObject, por ejemplo,

PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject

Si observas el implícito ToString () de PSCustomObject en Reflector, verás esto:

public override string ToString()
{
    return "";
}

Por qué hace esto, no lo sé. Sin embargo, probablemente sea mejor usar la coerción de tipo cadena en PowerShell, por ejemplo:

PS> [string]$newTestContents[0]
@{"abc -" + 
  
    

También puntos de bonificación si me puede decir por qué $ newTestContents [0] .ToString () es una cadena en blanco

  

Si observa su tipo, es un PSCustomObject, por ejemplo,

PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject

Si observas el implícito ToString () de PSCustomObject en Reflector, verás esto:

public override string ToString()
{
    return "";
}

Por qué hace esto, no lo sé. Sin embargo, probablemente sea mejor usar la coerción de tipo cadena en PowerShell, por ejemplo:

<*>

Quizás estabas buscando este resultado:

<*>

Esto demuestra que cuando usa Select-Object con un simple scriptblock, el contenido de ese scriptblock forma el nuevo nombre de propiedad en el PSCustomObject que se crea. En general, el enfoque de Nestor es el camino a seguir, pero en el futuro si necesita sintetizar propiedades como esta, use una tabla hash como esta:

<*>=abc -test1}

Quizás estabas buscando este resultado:

<*>

Esto demuestra que cuando usa Select-Object con un simple scriptblock, el contenido de ese scriptblock forma el nuevo nombre de propiedad en el PSCustomObject que se crea. En general, el enfoque de Nestor es el camino a seguir, pero en el futuro si necesita sintetizar propiedades como esta, use una tabla hash como esta:

<*>.{"abc -" +
  
    

También puntos de bonificación si me puede decir por qué $ newTestContents [0] .ToString () es una cadena en blanco

  

Si observa su tipo, es un PSCustomObject, por ejemplo,

PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject

Si observas el implícito ToString () de PSCustomObject en Reflector, verás esto:

public override string ToString()
{
    return "";
}

Por qué hace esto, no lo sé. Sin embargo, probablemente sea mejor usar la coerción de tipo cadena en PowerShell, por ejemplo:

PS> [string]$newTestContents[0]
@{"abc -" + 
  
    

También puntos de bonificación si me puede decir por qué $ newTestContents [0] .ToString () es una cadena en blanco

  

Si observa su tipo, es un PSCustomObject, por ejemplo,

PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject

Si observas el implícito ToString () de PSCustomObject en Reflector, verás esto:

public override string ToString()
{
    return "";
}

Por qué hace esto, no lo sé. Sin embargo, probablemente sea mejor usar la coerción de tipo cadena en PowerShell, por ejemplo:

<*>

Quizás estabas buscando este resultado:

<*>

Esto demuestra que cuando usa Select-Object con un simple scriptblock, el contenido de ese scriptblock forma el nuevo nombre de propiedad en el PSCustomObject que se crea. En general, el enfoque de Nestor es el camino a seguir, pero en el futuro si necesita sintetizar propiedades como esta, use una tabla hash como esta:

<*>=abc -test1}

Quizás estabas buscando este resultado:

<*>

Esto demuestra que cuando usa Select-Object con un simple scriptblock, el contenido de ese scriptblock forma el nuevo nombre de propiedad en el PSCustomObject que se crea. En general, el enfoque de Nestor es el camino a seguir, pero en el futuro si necesita sintetizar propiedades como esta, use una tabla hash como esta:

<*>}} abc -test1 abc -test2

Quizás estabas buscando este resultado:

<*>

Esto demuestra que cuando usa Select-Object con un simple scriptblock, el contenido de ese scriptblock forma el nuevo nombre de propiedad en el PSCustomObject que se crea. En general, el enfoque de Nestor es el camino a seguir, pero en el futuro si necesita sintetizar propiedades como esta, use una tabla hash como esta:

<*>=abc -test1}

Quizás estabas buscando este resultado:

<*>

Esto demuestra que cuando usa Select-Object con un simple scriptblock, el contenido de ese scriptblock forma el nuevo nombre de propiedad en el PSCustomObject que se crea. En general, el enfoque de Nestor es el camino a seguir, pero en el futuro si necesita sintetizar propiedades como esta, use una tabla hash como esta:

<*>}} PS> $newTestContents MyName ------ abc -test1 abc -test2 PS> $newTestContents[0].MyName abc -test1

Quizás estabas buscando este resultado:

<*>

Esto demuestra que cuando usa Select-Object con un simple scriptblock, el contenido de ese scriptblock forma el nuevo nombre de propiedad en el PSCustomObject que se crea. En general, el enfoque de Nestor es el camino a seguir, pero en el futuro si necesita sintetizar propiedades como esta, use una tabla hash como esta:

<*>=abc -test1}

Quizás estabas buscando este resultado:

<*>

Esto demuestra que cuando usa Select-Object con un simple scriptblock, el contenido de ese scriptblock forma el nuevo nombre de propiedad en el PSCustomObject que se crea. En general, el enfoque de Nestor es el camino a seguir, pero en el futuro si necesita sintetizar propiedades como esta, use una tabla hash como esta:

<*>.{"abc -" +
  
    

También puntos de bonificación si me puede decir por qué $ newTestContents [0] .ToString () es una cadena en blanco

  

Si observa su tipo, es un PSCustomObject, por ejemplo,

PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject

Si observas el implícito ToString () de PSCustomObject en Reflector, verás esto:

public override string ToString()
{
    return "";
}

Por qué hace esto, no lo sé. Sin embargo, probablemente sea mejor usar la coerción de tipo cadena en PowerShell, por ejemplo:

PS> [string]$newTestContents[0]
@{"abc -" + 
  
    

También puntos de bonificación si me puede decir por qué $ newTestContents [0] .ToString () es una cadena en blanco

  

Si observa su tipo, es un PSCustomObject, por ejemplo,

PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject

Si observas el implícito ToString () de PSCustomObject en Reflector, verás esto:

public override string ToString()
{
    return "";
}

Por qué hace esto, no lo sé. Sin embargo, probablemente sea mejor usar la coerción de tipo cadena en PowerShell, por ejemplo:

<*>

Quizás estabas buscando este resultado:

<*>

Esto demuestra que cuando usa Select-Object con un simple scriptblock, el contenido de ese scriptblock forma el nuevo nombre de propiedad en el PSCustomObject que se crea. En general, el enfoque de Nestor es el camino a seguir, pero en el futuro si necesita sintetizar propiedades como esta, use una tabla hash como esta:

<*>=abc -test1}

Quizás estabas buscando este resultado:

<*>

Esto demuestra que cuando usa Select-Object con un simple scriptblock, el contenido de ese scriptblock forma el nuevo nombre de propiedad en el PSCustomObject que se crea. En general, el enfoque de Nestor es el camino a seguir, pero en el futuro si necesita sintetizar propiedades como esta, use una tabla hash como esta:

<*>}} abc -test1 abc -test2

Quizás estabas buscando este resultado:

<*>

Esto demuestra que cuando usa Select-Object con un simple scriptblock, el contenido de ese scriptblock forma el nuevo nombre de propiedad en el PSCustomObject que se crea. En general, el enfoque de Nestor es el camino a seguir, pero en el futuro si necesita sintetizar propiedades como esta, use una tabla hash como esta:

<*>=abc -test1}

Quizás estabas buscando este resultado:

<*>

Esto demuestra que cuando usa Select-Object con un simple scriptblock, el contenido de ese scriptblock forma el nuevo nombre de propiedad en el PSCustomObject que se crea. En general, el enfoque de Nestor es el camino a seguir, pero en el futuro si necesita sintetizar propiedades como esta, use una tabla hash como esta:

<*>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top