web-dev-qa-db-fra.com

Comment utiliser Format-Table sans troncature de valeurs?

J'ai actuellement un script qui envoie un ping aux serveurs et vérifie l'état des services en cours d'exécution sur chaque serveur.

J'enregistre la sortie avec Out-File mais PowerShell place des ellipses ou "..." après de longues chaînes. Je ne veux pas que ça fasse ça. Par exemple:

MachineName  ServiceName             Status StartType
-----------  -----------             ------ ---------
SrvGtw01     Test.MyService....       Running  

Je veux qu'il affiche le nom complet comme:

MachineName  ServiceName              Status StartType
-----------  -----------              ------ ---------
SrvGtw01     Test.MyServiceName.Here  Stopped  Disabled

J'ai lu que vous pouvez définir le $FormatEnumerationLimit variable de préférence à -1 et j'ai essayé mais ça ne marche pas. Je ne sais pas comment je devrais le placer dans mon script.

9
Kade Williams

La variable de préférence $FormatEnumerationLimit Ne s'applique pas ici, car son but est de déterminer combien d'éléments d'une valeur de collection propriété à afficher (par exemple, $FormatEnumerationLimit = 2; [pscustomobject] @{ prop = 1, 2, 3 } imprime (au plus) 2 éléments à partir de la valeur de .prop et indique l'existence de plus avec ...; par exemple, {1, 2...}).

Au lieu de cela, vous devez:

  • (a) assurez-vous que les colonnes individuelles ne tronquent pas leurs valeurs à l'écran:

    • Dirigez-vous vers Format-Table -Autosize en premier.
  • et (b) assurez-vous que la largeur de sortie globale peut s'adapter à toutes les colonnes:

    • Dirigez vers Out-File -Width Avec une valeur suffisamment grande (n'utilisez pas [int]::MaxValue, Cependant, car chaque ligne de sortie tabulaire est complétée à cette même largeur[1]).

    • Avertissement:Si vous ne définissez pas -Width explicitement - comme cela se produirait si vous venez d'utiliser >, Par exemple - la fenêtre actuelle de la console la largeur de la console est utilisée - quoi que ce soit.

Par exemple:

# Assumes that the objects in $results only contain the properties
# of interest (MachineName, ServiceName, Status, StartType); you 
# can also pass an explicit list of output properties to Format-Table, however.
$results | Format-Table -AutoSize | Out-File -Width 512 C:\log.txt -Append

Remarque: Pour prévisualiser la sortie dans la console - ce qui peut impliquer un retour à la ligne - utilisez
Out-String -Width 512 À la place.


[1] Dans PowerShell Core , ce remplissage de dernière colonne indésirable a été supprimé, à partir d'au moins la version 6.1.0.

6
mklement0