Powershell: oggetto di output [] in un file
-
06-07-2019 - |
Domanda
Vorrei recuperare i contenuti di un file, filtrarli e modificarli e riscrivere il risultato in un file. Faccio questo:
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 -" + Vorrei recuperare i contenuti di un file, filtrarli e modificarli e riscrivere il risultato in un file. Faccio questo:
"abc -" + Vorrei recuperare i contenuti di un file, filtrarli e modificarli e riscrivere il risultato in un file. Faccio questo:
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 -" + Vorrei recuperare i contenuti di un file, filtrarli e modificarli e riscrivere il risultato in un file. Faccio questo:
<*>
output.txt contiene
<*>
Cosa dà con quella prima riga? È quasi come foreach restituisce un IEnumerable - ma $ newTestContents.GetType () rivela che è un array di oggetti. Quindi cosa dà? Come posso ottenere un output normale dell'array senza la strana intestazione.
Anche punti bonus se puoi dirmi perché $ newTestContents [0] .ToString () è una stringa vuota
}
PS C:\code> $newTestContents >> output.txt
output.txt contiene
<*>
Cosa dà con quella prima riga? È quasi come foreach restituisce un IEnumerable - ma $ newTestContents.GetType () rivela che è un array di oggetti. Quindi cosa dà? Come posso ottenere un output normale dell'array senza la strana intestazione.
Anche punti bonus se puoi dirmi perché $ newTestContents [0] .ToString () è una stringa vuota
------------
abc -test1
abc -test2
output.txt contiene
<*>
Cosa dà con quella prima riga? È quasi come foreach restituisce un IEnumerable - ma $ newTestContents.GetType () rivela che è un array di oggetti. Quindi cosa dà? Come posso ottenere un output normale dell'array senza la strana intestazione.
Anche punti bonus se puoi dirmi perché $ newTestContents [0] .ToString () è una stringa vuota
}
PS C:\code> $newTestContents >> output.txt
output.txt contiene
<*>Cosa dà con quella prima riga? È quasi come foreach restituisce un IEnumerable - ma $ newTestContents.GetType () rivela che è un array di oggetti. Quindi cosa dà? Come posso ottenere un output normale dell'array senza la strana intestazione.
Anche punti bonus se puoi dirmi perché $ newTestContents [0] .ToString () è una stringa vuota
Soluzione
Usa ForEach invece di Select-Object
Altri suggerimenti
Anche punti bonus se puoi dirmi perché $ newTestContents [0] .ToString () è una stringa vuota
Se guardi il suo tipo, è un oggetto PSCustomOb ad esempio
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Se guardi impl ToString () di PSCustomObject in Reflector vedi questo:
public override string ToString()
{
return "";
}
Perché lo fa, non lo so. Tuttavia, è probabilmente meglio usare la coercizione del tipo di stringa in PowerShell, ad esempio:
PS> [string]$newTestContents[0]
@{"abc -" +
Anche punti bonus se puoi dirmi perché $ newTestContents [0] .ToString () è una stringa vuota
Se guardi il suo tipo, è un oggetto PSCustomOb ad esempio
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Se guardi impl ToString () di PSCustomObject in Reflector vedi questo:
public override string ToString()
{
return "";
}
Perché lo fa, non lo so. Tuttavia, è probabilmente meglio usare la coercizione del tipo di stringa in PowerShell, ad esempio:
PS> $newTestContents | %{
Anche punti bonus se puoi dirmi perché $ newTestContents [0] .ToString () è una stringa vuota
Se guardi il suo tipo, è un oggetto PSCustomOb ad esempio
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Se guardi impl ToString () di PSCustomObject in Reflector vedi questo:
public override string ToString()
{
return "";
}
Perché lo fa, non lo so. Tuttavia, è probabilmente meglio usare la coercizione del tipo di stringa in PowerShell, ad esempio:
PS> [string]$newTestContents[0]
@{"abc -" +
Anche punti bonus se puoi dirmi perché $ newTestContents [0] .ToString () è una stringa vuota
Se guardi il suo tipo, è un oggetto PSCustomOb ad esempio
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Se guardi impl ToString () di PSCustomObject in Reflector vedi questo:
public override string ToString()
{
return "";
}
Perché lo fa, non lo so. Tuttavia, è probabilmente meglio usare la coercizione del tipo di stringa in PowerShell, ad esempio:
PS> $newTestContents = $testContents | Select @{n='MyName';e={"abc -" +
Anche punti bonus se puoi dirmi perché $ newTestContents [0] .ToString () è una stringa vuota
Se guardi il suo tipo, è un oggetto PSCustomOb ad esempio
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Se guardi impl ToString () di PSCustomObject in Reflector vedi questo:
public override string ToString()
{
return "";
}
Perché lo fa, non lo so. Tuttavia, è probabilmente meglio usare la coercizione del tipo di stringa in PowerShell, ad esempio:
PS> [string]$newTestContents[0]
@{"abc -" +
Anche punti bonus se puoi dirmi perché $ newTestContents [0] .ToString () è una stringa vuota
Se guardi il suo tipo, è un oggetto PSCustomOb ad esempio
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Se guardi impl ToString () di PSCustomObject in Reflector vedi questo:
public override string ToString()
{
return "";
}
Perché lo fa, non lo so. Tuttavia, è probabilmente meglio usare la coercizione del tipo di stringa in PowerShell, ad esempio:
PS> $newTestContents | %{
Anche punti bonus se puoi dirmi perché $ newTestContents [0] .ToString () è una stringa vuota
Se guardi il suo tipo, è un oggetto PSCustomOb ad esempio
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Se guardi impl ToString () di PSCustomObject in Reflector vedi questo:
public override string ToString()
{
return "";
}
Perché lo fa, non lo so. Tuttavia, è probabilmente meglio usare la coercizione del tipo di stringa in PowerShell, ad esempio:
PS> [string]$newTestContents[0]
@{"abc -" +
Anche punti bonus se puoi dirmi perché $ newTestContents [0] .ToString () è una stringa vuota
Se guardi il suo tipo, è un oggetto PSCustomOb ad esempio
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Se guardi impl ToString () di PSCustomObject in Reflector vedi questo:
public override string ToString()
{
return "";
}
Perché lo fa, non lo so. Tuttavia, è probabilmente meglio usare la coercizione del tipo di stringa in PowerShell, ad esempio:
<*>
Forse cercavi questo risultato però:
<*>
Ciò dimostra che quando si utilizza Select-Object con un semplice scriptblock, i contenuti di tale scriptblock formano il nome della nuova proprietà sul PSCustomObject che viene creato. In generale, l'approccio di Nestor è la strada da percorrere, ma in futuro se hai bisogno di sintetizzare proprietà come questa, usa una tabella hash in questo modo:
<*>=abc -test1}
Forse cercavi questo risultato però:
<*>
Ciò dimostra che quando si utilizza Select-Object con un semplice scriptblock, i contenuti di tale scriptblock formano il nome della nuova proprietà sul PSCustomObject che viene creato. In generale, l'approccio di Nestor è la strada da percorrere, ma in futuro se hai bisogno di sintetizzare proprietà come questa, usa una tabella hash in questo modo:
<*>.{"abc -" +
Anche punti bonus se puoi dirmi perché $ newTestContents [0] .ToString () è una stringa vuota
Se guardi il suo tipo, è un oggetto PSCustomOb ad esempio
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Se guardi impl ToString () di PSCustomObject in Reflector vedi questo:
public override string ToString()
{
return "";
}
Perché lo fa, non lo so. Tuttavia, è probabilmente meglio usare la coercizione del tipo di stringa in PowerShell, ad esempio:
PS> [string]$newTestContents[0]
@{"abc -" +
Anche punti bonus se puoi dirmi perché $ newTestContents [0] .ToString () è una stringa vuota
Se guardi il suo tipo, è un oggetto PSCustomOb ad esempio
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Se guardi impl ToString () di PSCustomObject in Reflector vedi questo:
public override string ToString()
{
return "";
}
Perché lo fa, non lo so. Tuttavia, è probabilmente meglio usare la coercizione del tipo di stringa in PowerShell, ad esempio:
<*>
Forse cercavi questo risultato però:
<*>
Ciò dimostra che quando si utilizza Select-Object con un semplice scriptblock, i contenuti di tale scriptblock formano il nome della nuova proprietà sul PSCustomObject che viene creato. In generale, l'approccio di Nestor è la strada da percorrere, ma in futuro se hai bisogno di sintetizzare proprietà come questa, usa una tabella hash in questo modo:
<*>=abc -test1}
Forse cercavi questo risultato però:
<*>
Ciò dimostra che quando si utilizza Select-Object con un semplice scriptblock, i contenuti di tale scriptblock formano il nome della nuova proprietà sul PSCustomObject che viene creato. In generale, l'approccio di Nestor è la strada da percorrere, ma in futuro se hai bisogno di sintetizzare proprietà come questa, usa una tabella hash in questo modo:
<*>}}
abc -test1
abc -test2
Forse cercavi questo risultato però:
<*>
Ciò dimostra che quando si utilizza Select-Object con un semplice scriptblock, i contenuti di tale scriptblock formano il nome della nuova proprietà sul PSCustomObject che viene creato. In generale, l'approccio di Nestor è la strada da percorrere, ma in futuro se hai bisogno di sintetizzare proprietà come questa, usa una tabella hash in questo modo:
<*>=abc -test1}
Forse cercavi questo risultato però:
<*>
Ciò dimostra che quando si utilizza Select-Object con un semplice scriptblock, i contenuti di tale scriptblock formano il nome della nuova proprietà sul PSCustomObject che viene creato. In generale, l'approccio di Nestor è la strada da percorrere, ma in futuro se hai bisogno di sintetizzare proprietà come questa, usa una tabella hash in questo modo:
<*>}}
PS> $newTestContents
MyName
------
abc -test1
abc -test2
PS> $newTestContents[0].MyName
abc -test1
Forse cercavi questo risultato però:
<*>
Ciò dimostra che quando si utilizza Select-Object con un semplice scriptblock, i contenuti di tale scriptblock formano il nome della nuova proprietà sul PSCustomObject che viene creato. In generale, l'approccio di Nestor è la strada da percorrere, ma in futuro se hai bisogno di sintetizzare proprietà come questa, usa una tabella hash in questo modo:
<*>=abc -test1}
Forse cercavi questo risultato però:
<*>
Ciò dimostra che quando si utilizza Select-Object con un semplice scriptblock, i contenuti di tale scriptblock formano il nome della nuova proprietà sul PSCustomObject che viene creato. In generale, l'approccio di Nestor è la strada da percorrere, ma in futuro se hai bisogno di sintetizzare proprietà come questa, usa una tabella hash in questo modo:
<*>.{"abc -" +
Anche punti bonus se puoi dirmi perché $ newTestContents [0] .ToString () è una stringa vuota
Se guardi il suo tipo, è un oggetto PSCustomOb ad esempio
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Se guardi impl ToString () di PSCustomObject in Reflector vedi questo:
public override string ToString()
{
return "";
}
Perché lo fa, non lo so. Tuttavia, è probabilmente meglio usare la coercizione del tipo di stringa in PowerShell, ad esempio:
PS> [string]$newTestContents[0]
@{"abc -" +
Anche punti bonus se puoi dirmi perché $ newTestContents [0] .ToString () è una stringa vuota
Se guardi il suo tipo, è un oggetto PSCustomOb ad esempio
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Se guardi impl ToString () di PSCustomObject in Reflector vedi questo:
public override string ToString()
{
return "";
}
Perché lo fa, non lo so. Tuttavia, è probabilmente meglio usare la coercizione del tipo di stringa in PowerShell, ad esempio:
<*>
Forse cercavi questo risultato però:
<*>
Ciò dimostra che quando si utilizza Select-Object con un semplice scriptblock, i contenuti di tale scriptblock formano il nome della nuova proprietà sul PSCustomObject che viene creato. In generale, l'approccio di Nestor è la strada da percorrere, ma in futuro se hai bisogno di sintetizzare proprietà come questa, usa una tabella hash in questo modo:
<*>=abc -test1}
Forse cercavi questo risultato però:
<*>
Ciò dimostra che quando si utilizza Select-Object con un semplice scriptblock, i contenuti di tale scriptblock formano il nome della nuova proprietà sul PSCustomObject che viene creato. In generale, l'approccio di Nestor è la strada da percorrere, ma in futuro se hai bisogno di sintetizzare proprietà come questa, usa una tabella hash in questo modo:
<*>}}
abc -test1
abc -test2
Forse cercavi questo risultato però:
<*>
Ciò dimostra che quando si utilizza Select-Object con un semplice scriptblock, i contenuti di tale scriptblock formano il nome della nuova proprietà sul PSCustomObject che viene creato. In generale, l'approccio di Nestor è la strada da percorrere, ma in futuro se hai bisogno di sintetizzare proprietà come questa, usa una tabella hash in questo modo:
<*>=abc -test1}
Forse cercavi questo risultato però:
<*>Ciò dimostra che quando si utilizza Select-Object con un semplice scriptblock, i contenuti di tale scriptblock formano il nome della nuova proprietà sul PSCustomObject che viene creato. In generale, l'approccio di Nestor è la strada da percorrere, ma in futuro se hai bisogno di sintetizzare proprietà come questa, usa una tabella hash in questo modo:
<*>