Синтаксис командной строки для предотвращения переноса в выходной файл PowerShell?

Следующая команда завершает вывод в ширину окна, из которого был вызван script. То есть выходной файл "word" -wrapped. Как я могу предотвратить эту упаковку в выходном файле без изменения script?

PS C:\Users\User1> & '\\fileServer\c$\PowerShell Scripts\herScript.ps1' > output.txt

Ответ 1

Попробуйте (я не могу проверить его)

& '\\fileServer\c$\PowerShell Scripts\herScript.ps1' | out-string -width 4096 | out-file c:\output.txt

Ответ 2

Вместо >, который out-file, вы можете использовать set-content

Ответ 3

Используйте командлет Write-Host в качестве последнего оператора вашего конвейера. Нормальный неуправляемый вывод PowerShell, похоже, смотрит на размеры окна родительской консоли и выравнивает/обтекает выходные линии до ширины-1. Командлет Write-Host обходит этот шаг и записывает непосредственно в stdout без каких-либо дополнительных изменений.

Вот пример, который читает JSON файл и записывает вывод javascript, который добавляет JSON к большой строке (сохраняя комментарии):

powershell -Command "$input | ForEach-Object { \"manifestBlob += \"\"\" + ($_ -replace \"\"\"\", \"\\\"\"\") + \"\n\"\";\" } | Write-Host" < manifest.json > buildmanifest.js

Вот пример входного файла:

//  File: manifest.json
//
//  Description:
//      manifest for chrome plug-in

{
    "manifest_version": 2,

    "version": "0.0.0",

    // the ID is: sdfjkghsdfjkghjksdfghjkfhjkdfjff
    "key": "sdfjkhsdfjkghjksdfghkjsdhgsdjkgfhjklsdfhgjklsdfhgjklsdhfgkljsdfhgkljsdhklgjsdhfjklghsdfjklghsdjklfghjksdfhgjksdhfgjklhsdfjkl",

    "content_scripts": [ { "matches": ["http://*/*", "https://*/*"], "js": ["content.js"], "run_at": "document_start" } ],

    // this is the standard LOCAL install location - but if this extension is published to the app-store, this value gets overridden (that is okay and even good)
    "update_url": "file:///C:/Program%20Files/MyProduct/Update.xml",
}

И вывод при использовании Write-Host:

manifestBlob += "\n";
manifestBlob += "//  File: manifest.json\n";
manifestBlob += "//\n";
manifestBlob += "//  Description:\n";
manifestBlob += "//      manifest for chrome plug-in\n";
manifestBlob += "\n";
manifestBlob += "{\n";
manifestBlob += "    \"manifest_version\": 2,\n";
manifestBlob += "\n";
manifestBlob += "    \"version\": \"0.0.0\",\n";
manifestBlob += "\n";
manifestBlob += "    // the ID is: sdfjkghsdfjkghjksdfghjkfhjkdfjff\n";
manifestBlob += "    \"key\": \"sdfjkhsdfjkghjksdfghkjsdhgsdjkgfhjklsdfhgjklsdfhgjklsdhfgkljsdfhgkljsdhklgjsdhfjklghsdfjklghsdjklfghjksdfhgjksdhfgjklhsdfjkl\",\n";
manifestBlob += "\n";
manifestBlob += "    \"content_scripts\": [ { \"matches\": [\"http://*/*\", \"https://*/*\"], \"js\": [\"content.js\"], \"run_at\": \"document_start\" } ],\n";
manifestBlob += "\n";
manifestBlob += "    // this is the standard LOCAL install location - but if this extension is published to the app-store, this value gets overridden (that is okay and even good)\n";
manifestBlob += "    \"update_url\": \"file:///C:/Program%20Files/MyProduct/Update.xml\",\n";
manifestBlob += "}\n";

И, наконец, пример ужасных вещей, которые случаются, если вы не укажете командлет Write-Host (при условии, что ширина консоли равна 60):

manifestBlob += "\n";
manifestBlob += "//  File: manifest.json\n";
manifestBlob += "//\n";
manifestBlob += "//  Description:\n";
manifestBlob += "//      manifest for chrome plug-in\n";
manifestBlob += "\n";
manifestBlob += "{\n";
manifestBlob += "    \"manifest_version\": 2,\n";
manifestBlob += "\n";
manifestBlob += "    \"version\": \"0.0.0\",\n";
manifestBlob += "\n";
manifestBlob += "    // the ID is: sdfjkghsdfjkghjksdfghjkf
hjkdfjff\n";
manifestBlob += "    \"key\": \"sdfjkhsdfjkghjksdfghkjsdhgs
djkgfhjklsdfhgjklsdfhgjklsdhfgkljsdfhgkljsdhklgjsdhfjklghsd
fjklghsdjklfghjksdfhgjksdhfgjklhsdfjkl\",\n";
manifestBlob += "\n";
manifestBlob += "    \"content_scripts\": [ { \"matches\": 
[\"http://*/*\", \"https://*/*\"], \"js\": [\"content.js\"]
, \"run_at\": \"document_start\" } ],\n";
manifestBlob += "\n";
manifestBlob += "    // this is the standard LOCAL install 
location - but if this extension is published to the app-st
ore, this value gets overridden (that is okay and even good
)\n";
manifestBlob += "    \"update_url\": \"file:///C:/Program%2
0Files/MyProduct/Update.xml\",\n";
manifestBlob += "}\n";