Как вывести текст без перевода строки в PowerShell? - PullRequest
127 голосов
/ 09 октября 2010

Я хочу, чтобы мой скрипт PowerShell печатал что-то вроде этого:

Enabling feature XYZ......Done

Сценарий выглядит примерно так:

Write-Output "Enabling feature XYZ......."
Enable-SPFeature...
Write-Output "Done"

Но Write-Output всегда печатает новую строку в конце, поэтому мой вывод не находится на одной строке. Есть ли способ сделать это?

Ответы [ 15 ]

1 голос
/ 10 августа 2012

Вы просто не можете заставить PowerShell пропустить эти надоедливые переводы строк ... Нет сценария или командлета, который это делает. Конечно, Write-Host - абсолютная ерунда, потому что вы не можете перенаправить / передать с нее!

Тем не менее, вы можете написать собственный EXE-файл, что я и объяснил, как это сделать в вопросе переполнения стека Как вывести что-то в PowerShell .

0 голосов
/ 12 апреля 2019

Я обманул, но я считаю, что это единственный ответ, который отвечает всем требованиям. А именно, это позволяет избежать конечного CRLF, предоставляет место для выполнения другой операции за это время и надлежащим образом перенаправляет на стандартный вывод при необходимости.

$c_sharp_source = @"
using System;
namespace StackOverflow
{
   public class ConsoleOut
   {
      public static void Main(string[] args)
      {
         Console.Write(args[0]);
      }
   }
}
"@
$compiler_parameters = New-Object System.CodeDom.Compiler.CompilerParameters
$compiler_parameters.GenerateExecutable = $true
$compiler_parameters.OutputAssembly = "consoleout.exe"
Add-Type -TypeDefinition $c_sharp_source -Language CSharp -CompilerParameters $compiler_parameters

.\consoleout.exe "Enabling feature XYZ......."
Write-Output 'Done.'
0 голосов
/ 13 октября 2016

Вы можете сделать это абсолютно.Write-Output имеет флаг под названием " NoEnumerate ", который по сути является тем же.

0 голосов
/ 04 марта 2016

Это может быть не очень элегантно, но делает именно то, что запрашивал OP.Обратите внимание, что ISE портится со StdOut, поэтому выходных данных не будет.Чтобы видеть, что этот скрипт работает, он не может быть запущен в ISE.

$stdout=[System.Console]::OpenStandardOutput()
$strOutput="Enabling feature XYZ... "
$stdout.Write(([System.Text.Encoding]::ASCII.GetBytes($strOutput)),0,$strOutput.Length)
Enable-SPFeature...
$strOutput="Done"
$stdout.Write(([System.Text.Encoding]::ASCII.GetBytes($strOutput)),0,$strOutput.Length)
$stdout.Close()
0 голосов
/ 14 июля 2015

Следующее поместит курсор назад в начало предыдущей строки.Вы должны поместить его в правильное горизонтальное положение (используя $ pos.X, чтобы переместить его вбок):

$pos = $host.ui.RawUI.get_cursorPosition()
$pos.Y -= 1
$host.UI.RawUI.set_cursorPosition($Pos)

Ваш текущий вывод составляет 27 пробелов, поэтому $ pos.X =27 может работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...