Powershell: Objeto de salida [] a un archivo
-
06-07-2019 - |
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
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:
<*>