Voici un résumé de ce que j'ai déduit, après quelques mois d'expérience avec PowerShell, et quelques expériences scientifiques. Je n'ai jamais rien trouvé de cela dans la documentation :(
[ Mise à jour: une grande partie de cela semble maintenant être mieux documentée.]
Verrouillage en lecture et en écriture
Pendant l' Out-Fileexécution, une autre application peut lire le fichier journal.
Pendant l' Set-Contentexécution, les autres applications ne peuvent pas lire le fichier journal. N'utilisez donc jamaisSet-Content pour enregistrer des commandes de longue durée.
Codage
Out-Fileenregistre dans le codage Unicode( UTF-16LE) par défaut (bien que cela puisse être spécifié), alors que la valeur par Set-Contentdéfaut est ASCII( US-ASCII) dans PowerShell 3+ (cela peut également être spécifié). Dans les versions antérieures de PowerShell, Set-Contentrédigeait le contenu dans le Defaultcodage (ANSI).
Note de l'éditeur : PowerShell à partir de la version 5.1 utilise toujours le Defaultcodage spécifique à la culture ("ANSI"), malgré ce que la documentation affirme. Si ASCII était la valeur par défaut, les caractères non ASCII tels que üseraient convertis en littéral ? , mais ce n'est pas le cas: 'ü' | Set-Content tmp.txt; (Get-Content tmp.txt) -eq '?'renvoie $False.
PS > $null | out-file outed.txt
PS > $null | set-content set.txt
PS > md5sum *
f3b25701fe362ec84616a93a45ce9998 *outed.txt
d41d8cd98f00b204e9800998ecf8427e *set.txt
Cela signifie que les valeurs par défaut de deux commandes sont incompatibles et que les mélanger endommagera le texte, alors spécifiez toujours un encodage.
Mise en page
Comme Bartek l'a expliqué, Out-Fileenregistre le formatage sophistiqué de la sortie, comme on le voit dans le terminal. Ainsi, dans un dossier avec deux fichiers, la commande dir | out-file out.txtcrée un fichier avec 11 lignes.
Alors que Set-Contentenregistre une représentation plus simple. Dans ce dossier avec deux fichiers, la commande dir | set-content sc.txtcrée un fichier avec deux lignes. Pour émuler la sortie dans le terminal:
PS > dir | ForEach-Object {$_.ToString()}
out.txt
sc.txt
Je pense que ce formatage a une conséquence sur les sauts de ligne, mais je ne peux pas encore le décrire.
Création de fichier
Set-Contentne crée pas de manière fiable un fichier vide quand Out-File:
Dans un dossier vide, la commande dir | out-file out.txtcrée un fichier, mais dir | set-content sc.txtpas.
Variable de pipeline
Set-Contentprend le nom de fichier du pipeline; vous permettant de définir le contenu d'un certain nombre de fichiers sur une valeur fixe.
Out-Fileprend les données à partir du pipeline; mettre à jour le contenu d'un seul fichier.
Paramètres
Set-Content comprend les paramètres supplémentaires suivants:
- Exclure
- Filtre
- Comprendre
- Passer à travers
- Courant
- UtiliserTransaction
Out-File comprend les paramètres supplémentaires suivants:
- Ajouter
- NoClobber
- Largeur
Pour plus d'informations sur ces paramètres, reportez-vous à l'aide; par exemple get-help out-file -parameter append.
Set-Contentencodage par défaut: traduit en(Get-Culture).Textinfo.ANSICodePage(Windows 8.1, Powershell 4.0, CurrentCulturecs-CZ, CurrentUICultureen-GB, ANSICodePage1250, OEMCodePage852, testé en utilisant une'řž'chaîne avec différents codes dans les pages de codes ci-dessus).