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

È stato utile?

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:

<*>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top