read raw content powershell

raw - powershell read file



Powershell set-content y out-file ¿cuál es la diferencia? (4)

Aquí hay un resumen de lo que he deducido, después de unos meses de experiencia con Powershell, y algunos experimentos científicos. Nunca encontré nada de esto en la documentación :(

[ Actualización: gran parte de esto ahora parece estar mejor documentado.]

Bloqueo de lectura y escritura

Mientras Out-File está ejecutando, otra aplicación puede leer el archivo de registro.

Mientras Set-Content está ejecutando, otras aplicaciones no pueden leer el archivo de registro. Por lo tanto, nunca use Set-Content para registrar comandos de ejecución larga.

Codificación

Out-File guarda en la Unicode ( UTF-16LE ) de manera predeterminada (aunque esto se puede especificar), mientras que Set-Content predeterminado ASCII ( US-ASCII ) en PowerShell 3+ (esto también se puede especificar). En PowerShells anteriores, Set-Content escribió contenido en la codificación Default (ANSI).

Nota del editor : PowerShell a partir de la versión 5.1 aún se establece de manera predeterminada en la codificación predeterminada cultural ("ANSI"), a pesar de lo que afirma la documentación. Si ASCII fuera el predeterminado, los caracteres que no son ASCII como ü se convertirían a literal ? , pero ese no es el caso: ''ü'' | Set-Content tmp.txt; (Get-Content tmp.txt) -eq ''?'' ''ü'' | Set-Content tmp.txt; (Get-Content tmp.txt) -eq ''?'' cede $False

PS > $null | out-file outed.txt PS > $null | set-content set.txt PS > md5sum * f3b25701fe362ec84616a93a45ce9998 *outed.txt d41d8cd98f00b204e9800998ecf8427e *set.txt

Esto significa que los valores predeterminados de dos comandos son incompatibles, y al mezclarlos se dañará el texto, así que siempre especifique una codificación.

Formateo

Como explicó Bartek, Out-File guarda el elegante formato de la salida, como se ve en la terminal. Entonces en una carpeta con dos archivos, el comando dir | out-file out.txt dir | out-file out.txt crea un archivo con 11 líneas.

Donde como Set-Content guarda una representación más simple. En esa carpeta con dos archivos, el comando dir | set-content sc.txt dir | set-content sc.txt crea un archivo con dos líneas. Para emular la salida en la terminal:

PS > dir | ForEach-Object {$_.ToString()} out.txt sc.txt

Creo que este formato tiene una consecuencia para los saltos de línea, pero no puedo describirlo todavía.

Creación de archivo

Set-Content no crea confiablemente un archivo vacío cuando Out-File :

En una carpeta vacía, el comando dir | out-file out.txt dir | out-file out.txt crea un archivo, mientras que dir | set-content sc.txt dir | set-content sc.txt no lo hace.

Variable de tubería

Set-Content toma el nombre de archivo de la tubería; permitiéndole configurar un número de contenido de archivos a un valor fijo.

Out-File toma los datos a partir de la canalización; actualizar el contenido de un solo archivo.

Parámetros

Set-Content incluye los siguientes parámetros adicionales:

  • Excluir
  • Filtrar
  • Incluir
  • Pasar a través de
  • Corriente
  • UseTransaction

Out-File incluye los siguientes parámetros adicionales:

  • Adjuntar
  • NoClobber
  • Anchura

Para obtener más información sobre cuáles son esos parámetros, consulte la ayuda; por ejemplo, get-help out-file -parameter append .

En Powershell, ¿cuál es la diferencia entre out-file y set-content ? Editar: ¿O add-content y out-file -append ? ¿ out-file -append ?

He encontrado que si utilizo ambas contra el mismo archivo, el texto está mal mojibaked.

(Una segunda pregunta menor, > es un alias para out-file , ¿no?)


Bueno, no estaría de acuerdo ... :)

  1. Out-File tiene -Append ("NoClober está ahí para evitar sobrescribir") que agregará contenido. Pero esta no es la misma bestia.
  2. comando | Add-Content usará el método .ToString () en la entrada. Out-File usará el formateo predeterminado.

asi que:

ls | Add-Content test.txt

y

ls | Out-File test.txt

le dará resultados totalmente diferentes.

Y no, ''>'' no es un alias, es un operador de redirección (lo mismo que en otros shells). Y tiene una limitación muy seria ... Cortará las líneas de la misma forma en que se muestran. Out-File tiene un parámetro de ancho que le ayuda a evitar esto. Además, con los operadores de redirección no puede decidir qué codificación usar.

HTH Bartek


Out-File tiene el comportamiento de sobrescribir la ruta de salida a menos que se establezca el -NoClobber y / o -Append . Add-Content agregará contenido si la ruta de salida ya existe de manera predeterminada (si es que puede). Ambos crearán el archivo si aún no existe uno.

Otra diferencia interesante es que Add-Content creará un archivo codificado en ASCII de manera predeterminada y Out-File creará un pequeño archivo endian codificado en Unicode por defecto.

> es un azúcar sintáctico alias para Out-File . Es Out-File con algunos ajustes de parámetros predefinidos.


Set-Content admite -Encoding Byte , mientras que Out-File no.

Entonces, cuando desee escribir datos binarios o un resultado de Text.Encoding#GetBytes() en un archivo, debe usar Set-Content .