Powershell: objet de sortie [] dans un fichier
-
06-07-2019 - |
Question
J'aimerais récupérer le contenu d'un fichier, les filtrer, les modifier et réécrire le résultat dans un fichier. Je fais ça:
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 -" + J'aimerais récupérer le contenu d'un fichier, les filtrer, les modifier et réécrire le résultat dans un fichier. Je fais ça:
"abc -" + J'aimerais récupérer le contenu d'un fichier, les filtrer, les modifier et réécrire le résultat dans un fichier. Je fais ça:
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 -" + J'aimerais récupérer le contenu d'un fichier, les filtrer, les modifier et réécrire le résultat dans un fichier. Je fais ça:
<*>
output.txt contient
<*>
Qu'est-ce qui donne avec cette première ligne? C'est presque comme si foreach rendait un IEnumerable - mais $ newTestContents.GetType () révèle qu'il s'agit d'un tableau d'objets. Alors qu'est-ce qui donne? Comment puis-je obtenir le tableau pour produire normalement sans l'en-tête étrange.
Aussi des points bonus si vous pouvez me dire pourquoi $ newTestContents [0] .ToString () est une chaîne vide
}
PS C:\code> $newTestContents >> output.txt
output.txt contient
<*>
Qu'est-ce qui donne avec cette première ligne? C'est presque comme si foreach rendait un IEnumerable - mais $ newTestContents.GetType () révèle qu'il s'agit d'un tableau d'objets. Alors qu'est-ce qui donne? Comment puis-je obtenir le tableau pour produire normalement sans l'en-tête étrange.
Aussi des points bonus si vous pouvez me dire pourquoi $ newTestContents [0] .ToString () est une chaîne vide
------------
abc -test1
abc -test2
output.txt contient
<*>
Qu'est-ce qui donne avec cette première ligne? C'est presque comme si foreach rendait un IEnumerable - mais $ newTestContents.GetType () révèle qu'il s'agit d'un tableau d'objets. Alors qu'est-ce qui donne? Comment puis-je obtenir le tableau pour produire normalement sans l'en-tête étrange.
Aussi des points bonus si vous pouvez me dire pourquoi $ newTestContents [0] .ToString () est une chaîne vide
}
PS C:\code> $newTestContents >> output.txt
output.txt contient
<*>Qu'est-ce qui donne avec cette première ligne? C'est presque comme si foreach rendait un IEnumerable - mais $ newTestContents.GetType () révèle qu'il s'agit d'un tableau d'objets. Alors qu'est-ce qui donne? Comment puis-je obtenir le tableau pour produire normalement sans l'en-tête étrange.
Aussi des points bonus si vous pouvez me dire pourquoi $ newTestContents [0] .ToString () est une chaîne vide
La solution
Utilisez ForEach au lieu de Select-Object
Autres conseils
Aussi des points bonus si vous pouvez me dire pourquoi $ newTestContents [0] .ToString () est une chaîne vide
Si vous regardez son type, il s'agit d'un PSCustomObject, par exemple.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Si vous examinez l'implémentation ToString () de PSCustomObject dans Reflector, vous voyez ceci:
public override string ToString()
{
return "";
}
Pourquoi ça fait ça, je ne sais pas. Cependant, il est probablement préférable d’utiliser la contrainte de type chaîne dans PowerShell, par exemple:
.PS> [string]$newTestContents[0]
@{"abc -" +
Aussi des points bonus si vous pouvez me dire pourquoi $ newTestContents [0] .ToString () est une chaîne vide
Si vous regardez son type, il s'agit d'un PSCustomObject, par exemple.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Si vous examinez l'implémentation ToString () de PSCustomObject dans Reflector, vous voyez ceci:
public override string ToString()
{
return "";
}
Pourquoi ça fait ça, je ne sais pas. Cependant, il est probablement préférable d’utiliser la contrainte de type chaîne dans PowerShell, par exemple:
.
PS> $newTestContents | %{
Aussi des points bonus si vous pouvez me dire pourquoi $ newTestContents [0] .ToString () est une chaîne vide
Si vous regardez son type, il s'agit d'un PSCustomObject, par exemple.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Si vous examinez l'implémentation ToString () de PSCustomObject dans Reflector, vous voyez ceci:
public override string ToString()
{
return "";
}
Pourquoi ça fait ça, je ne sais pas. Cependant, il est probablement préférable d’utiliser la contrainte de type chaîne dans PowerShell, par exemple:
.
PS> [string]$newTestContents[0]
@{"abc -" +
Aussi des points bonus si vous pouvez me dire pourquoi $ newTestContents [0] .ToString () est une chaîne vide
Si vous regardez son type, il s'agit d'un PSCustomObject, par exemple.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Si vous examinez l'implémentation ToString () de PSCustomObject dans Reflector, vous voyez ceci:
public override string ToString()
{
return "";
}
Pourquoi ça fait ça, je ne sais pas. Cependant, il est probablement préférable d’utiliser la contrainte de type chaîne dans PowerShell, par exemple:
.
PS> $newTestContents = $testContents | Select @{n='MyName';e={"abc -" +
Aussi des points bonus si vous pouvez me dire pourquoi $ newTestContents [0] .ToString () est une chaîne vide
Si vous regardez son type, il s'agit d'un PSCustomObject, par exemple.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Si vous examinez l'implémentation ToString () de PSCustomObject dans Reflector, vous voyez ceci:
public override string ToString()
{
return "";
}
Pourquoi ça fait ça, je ne sais pas. Cependant, il est probablement préférable d’utiliser la contrainte de type chaîne dans PowerShell, par exemple:
.
PS> [string]$newTestContents[0]
@{"abc -" +
Aussi des points bonus si vous pouvez me dire pourquoi $ newTestContents [0] .ToString () est une chaîne vide
Si vous regardez son type, il s'agit d'un PSCustomObject, par exemple.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Si vous examinez l'implémentation ToString () de PSCustomObject dans Reflector, vous voyez ceci:
public override string ToString()
{
return "";
}
Pourquoi ça fait ça, je ne sais pas. Cependant, il est probablement préférable d’utiliser la contrainte de type chaîne dans PowerShell, par exemple:
.
PS> $newTestContents | %{
Aussi des points bonus si vous pouvez me dire pourquoi $ newTestContents [0] .ToString () est une chaîne vide
Si vous regardez son type, il s'agit d'un PSCustomObject, par exemple.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Si vous examinez l'implémentation ToString () de PSCustomObject dans Reflector, vous voyez ceci:
public override string ToString()
{
return "";
}
Pourquoi ça fait ça, je ne sais pas. Cependant, il est probablement préférable d’utiliser la contrainte de type chaîne dans PowerShell, par exemple:
.
PS> [string]$newTestContents[0]
@{"abc -" +
Aussi des points bonus si vous pouvez me dire pourquoi $ newTestContents [0] .ToString () est une chaîne vide
Si vous regardez son type, il s'agit d'un PSCustomObject, par exemple.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Si vous examinez l'implémentation ToString () de PSCustomObject dans Reflector, vous voyez ceci:
public override string ToString()
{
return "";
}
Pourquoi ça fait ça, je ne sais pas. Cependant, il est probablement préférable d’utiliser la contrainte de type chaîne dans PowerShell, par exemple:
.
<*>
Vous recherchiez peut-être ce résultat:
<*>
Ceci montre que lorsque vous utilisez Select-Object avec un script simple, le contenu de ce scriptet forme le nouveau nom de la propriété sur l'objet PSCustomObject créé. En général, l'approche de Nestor est la voie à suivre, mais à l'avenir, si vous devez synthétiser des propriétés comme celle-ci, utilisez une table de hachage comme celle-ci:
<*>=abc -test1}
Vous recherchiez peut-être ce résultat:
<*>
Ceci montre que lorsque vous utilisez Select-Object avec un script simple, le contenu de ce scriptet forme le nouveau nom de la propriété sur l'objet PSCustomObject créé. En général, l'approche de Nestor est la voie à suivre, mais à l'avenir, si vous devez synthétiser des propriétés comme celle-ci, utilisez une table de hachage comme celle-ci:
<*>.{"abc -" +
Aussi des points bonus si vous pouvez me dire pourquoi $ newTestContents [0] .ToString () est une chaîne vide
Si vous regardez son type, il s'agit d'un PSCustomObject, par exemple.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Si vous examinez l'implémentation ToString () de PSCustomObject dans Reflector, vous voyez ceci:
public override string ToString()
{
return "";
}
Pourquoi ça fait ça, je ne sais pas. Cependant, il est probablement préférable d’utiliser la contrainte de type chaîne dans PowerShell, par exemple:
.
PS> [string]$newTestContents[0]
@{"abc -" +
Aussi des points bonus si vous pouvez me dire pourquoi $ newTestContents [0] .ToString () est une chaîne vide
Si vous regardez son type, il s'agit d'un PSCustomObject, par exemple.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Si vous examinez l'implémentation ToString () de PSCustomObject dans Reflector, vous voyez ceci:
public override string ToString()
{
return "";
}
Pourquoi ça fait ça, je ne sais pas. Cependant, il est probablement préférable d’utiliser la contrainte de type chaîne dans PowerShell, par exemple:
.
<*>
Vous recherchiez peut-être ce résultat:
<*>
Ceci montre que lorsque vous utilisez Select-Object avec un script simple, le contenu de ce scriptet forme le nouveau nom de la propriété sur l'objet PSCustomObject créé. En général, l'approche de Nestor est la voie à suivre, mais à l'avenir, si vous devez synthétiser des propriétés comme celle-ci, utilisez une table de hachage comme celle-ci:
<*>=abc -test1}
Vous recherchiez peut-être ce résultat:
<*>
Ceci montre que lorsque vous utilisez Select-Object avec un script simple, le contenu de ce scriptet forme le nouveau nom de la propriété sur l'objet PSCustomObject créé. En général, l'approche de Nestor est la voie à suivre, mais à l'avenir, si vous devez synthétiser des propriétés comme celle-ci, utilisez une table de hachage comme celle-ci:
<*>}}
abc -test1
abc -test2
Vous recherchiez peut-être ce résultat:
<*>
Ceci montre que lorsque vous utilisez Select-Object avec un script simple, le contenu de ce scriptet forme le nouveau nom de la propriété sur l'objet PSCustomObject créé. En général, l'approche de Nestor est la voie à suivre, mais à l'avenir, si vous devez synthétiser des propriétés comme celle-ci, utilisez une table de hachage comme celle-ci:
<*>=abc -test1}
Vous recherchiez peut-être ce résultat:
<*>
Ceci montre que lorsque vous utilisez Select-Object avec un script simple, le contenu de ce scriptet forme le nouveau nom de la propriété sur l'objet PSCustomObject créé. En général, l'approche de Nestor est la voie à suivre, mais à l'avenir, si vous devez synthétiser des propriétés comme celle-ci, utilisez une table de hachage comme celle-ci:
<*>}}
PS> $newTestContents
MyName
------
abc -test1
abc -test2
PS> $newTestContents[0].MyName
abc -test1
Vous recherchiez peut-être ce résultat:
<*>
Ceci montre que lorsque vous utilisez Select-Object avec un script simple, le contenu de ce scriptet forme le nouveau nom de la propriété sur l'objet PSCustomObject créé. En général, l'approche de Nestor est la voie à suivre, mais à l'avenir, si vous devez synthétiser des propriétés comme celle-ci, utilisez une table de hachage comme celle-ci:
<*>=abc -test1}
Vous recherchiez peut-être ce résultat:
<*>
Ceci montre que lorsque vous utilisez Select-Object avec un script simple, le contenu de ce scriptet forme le nouveau nom de la propriété sur l'objet PSCustomObject créé. En général, l'approche de Nestor est la voie à suivre, mais à l'avenir, si vous devez synthétiser des propriétés comme celle-ci, utilisez une table de hachage comme celle-ci:
<*>.{"abc -" +
Aussi des points bonus si vous pouvez me dire pourquoi $ newTestContents [0] .ToString () est une chaîne vide
Si vous regardez son type, il s'agit d'un PSCustomObject, par exemple.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Si vous examinez l'implémentation ToString () de PSCustomObject dans Reflector, vous voyez ceci:
public override string ToString()
{
return "";
}
Pourquoi ça fait ça, je ne sais pas. Cependant, il est probablement préférable d’utiliser la contrainte de type chaîne dans PowerShell, par exemple:
.
PS> [string]$newTestContents[0]
@{"abc -" +
Aussi des points bonus si vous pouvez me dire pourquoi $ newTestContents [0] .ToString () est une chaîne vide
Si vous regardez son type, il s'agit d'un PSCustomObject, par exemple.
PS> $newTestContents[0].GetType().FullName
System.Management.Automation.PSCustomObject
Si vous examinez l'implémentation ToString () de PSCustomObject dans Reflector, vous voyez ceci:
public override string ToString()
{
return "";
}
Pourquoi ça fait ça, je ne sais pas. Cependant, il est probablement préférable d’utiliser la contrainte de type chaîne dans PowerShell, par exemple:
.
<*>
Vous recherchiez peut-être ce résultat:
<*>
Ceci montre que lorsque vous utilisez Select-Object avec un script simple, le contenu de ce scriptet forme le nouveau nom de la propriété sur l'objet PSCustomObject créé. En général, l'approche de Nestor est la voie à suivre, mais à l'avenir, si vous devez synthétiser des propriétés comme celle-ci, utilisez une table de hachage comme celle-ci:
<*>=abc -test1}
Vous recherchiez peut-être ce résultat:
<*>
Ceci montre que lorsque vous utilisez Select-Object avec un script simple, le contenu de ce scriptet forme le nouveau nom de la propriété sur l'objet PSCustomObject créé. En général, l'approche de Nestor est la voie à suivre, mais à l'avenir, si vous devez synthétiser des propriétés comme celle-ci, utilisez une table de hachage comme celle-ci:
<*>}}
abc -test1
abc -test2
Vous recherchiez peut-être ce résultat:
<*>
Ceci montre que lorsque vous utilisez Select-Object avec un script simple, le contenu de ce scriptet forme le nouveau nom de la propriété sur l'objet PSCustomObject créé. En général, l'approche de Nestor est la voie à suivre, mais à l'avenir, si vous devez synthétiser des propriétés comme celle-ci, utilisez une table de hachage comme celle-ci:
<*>=abc -test1}
Vous recherchiez peut-être ce résultat:
<*>Ceci montre que lorsque vous utilisez Select-Object avec un script simple, le contenu de ce scriptet forme le nouveau nom de la propriété sur l'objet PSCustomObject créé. En général, l'approche de Nestor est la voie à suivre, mais à l'avenir, si vous devez synthétiser des propriétés comme celle-ci, utilisez une table de hachage comme celle-ci:
<*>