PowerShell에서 줄 바꿈 없이 텍스트를 출력하려면 어떻게 해야 합니까?
PowerShell 스크립트를 다음과 같이 인쇄하고 싶습니다.
Enabling feature XYZ......Done
스크립트는 다음과 같습니다.
Write-Output "Enabling feature XYZ......."
Enable-SPFeature...
Write-Output "Done"
★★★★★★★★★★★★★★★★★.Write-Output
항상 끝에 새 줄을 인쇄하기 때문에 출력은 한 줄에 있지 않습니다.법이있??? ??
쓰기 호스트 - No Newline "XYZ 기능 활성화..."
몇알 수 행히,, 、 unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun unfortun 。Write-Host
수 .Write-Output
does 。-NoNewline
진행 상황을 이며, ""*nix" 방식인 것으로 .Write-Progress
: PowerShell 창 상단에 진행 상황 정보가 표시된 바가 표시됩니다. 자세한 내용은 매뉴얼을 참조하십시오.
# Total time to sleep
$start_sleep = 120
# Time to sleep between each notification
$sleep_iteration = 30
Write-Output ( "Sleeping {0} seconds ... " -f ($start_sleep) )
for ($i=1 ; $i -le ([int]$start_sleep/$sleep_iteration) ; $i++) {
Start-Sleep -Seconds $sleep_iteration
Write-Progress -CurrentOperation ("Sleep {0}s" -f ($start_sleep)) ( " {0}s ..." -f ($i*$sleep_iteration) )
}
Write-Progress -CurrentOperation ("Sleep {0}s" -f ($start_sleep)) -Completed "Done waiting for X to finish"
OP의 예를 들어 보겠습니다.
# For the file log
Write-Output "Enabling feature XYZ"
# For the operator
Write-Progress -CurrentOperation "EnablingFeatureXYZ" ( "Enabling feature XYZ ... " )
Enable-SPFeature...
# For the operator
Write-Progress -CurrentOperation "EnablingFeatureXYZ" ( "Enabling feature XYZ ... Done" )
# For the log file
Write-Output "Feature XYZ enabled"
(사용자에게 유익한 출력을 제공하기 때문에) 사용자의 경우 작동하지 않을 수 있지만 출력을 추가하는 데 사용할 수 있는 문자열을 만듭니다.출력할 시간이 되면 문자열만 출력합니다.
물론 이 예는 당신의 경우 어리석지만 개념상 유용하다는 것을 무시하십시오.
$output = "Enabling feature XYZ......."
Enable-SPFeature...
$output += "Done"
Write-Output $output
디스플레이:
Enabling feature XYZ.......Done
파일에 쓰려면 바이트 배열을 사용할 수 있습니다.다음 예제에서는 파일을 추가할 수 있는 빈 ZIP 파일을 만듭니다.
[Byte[]] $zipHeader = 80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
[System.IO.File]::WriteAllBytes("C:\My.zip", $zipHeader)
또는 사용방법:
[Byte[]] $text = [System.Text.Encoding]::UTF8.getBytes("Enabling feature XYZ.......")
[System.IO.File]::WriteAllBytes("C:\My.zip", $text)
네, 다른 답변에는 상태가 있기 때문에 Write-Output으로는 할 수 없습니다.PowerShell이 실패할 경우 로 이동합니다.NET, 심지어 몇 개 있습니다.NET은 여기에 답변합니다만, 필요 이상으로 복잡합니다.
사용방법:
[Console]::Write("Enabling feature XYZ.......")
Enable-SPFeature...
Write-Output "Done"
가장 순수한 PowerShell은 아니지만 동작합니다.
PowerShell power power power power power power power 。틀렸습니다.,하지 않기 때문입니다.그렇게 동작하지 않기 때문입니다.Write-Output
는 하지만, 는 할 수 없습니다.Write-Host
이치노
에서는 「」를 사용하고 것 .Write-Host
-NoNewLine
파라미터를 지정합니다.일반적으로 문제가 되는 파이핑은 할 수 없지만 Write-Host = > Export to file에서 설명한 바와 같이 이 기능을 덮어쓰는 방법이 있으므로 출력 파일의 파라미터를 쉽게 받아들일 수 있습니다.이것은 아직 좋은 해결책과는 거리가 멀다.와 함께Start-Transcript
이 방법이 더 유용하지만 해당 cmdlet에 네이티브 애플리케이션에 문제가 있습니다.
Write-Output
일반적인 맥락에서 필요한 것을 할 수 없습니다.
문제는 PowerShell v2를 사용할 때 Write-Output이 적어도 stdout을 위해 라인브레이크를 발생시킨다는 것입니다.XML 텍스트를 stdout에 쓰려고 했지만 성공하지 못했습니다. 왜냐하면 이 텍스트는 80자로 하드랩 되어 있기 때문입니다.
이 문제를 해결하려면
[Console]::Out.Write($myVeryLongXMLTextBlobLine)
PowerShell v3에서는 이 문제가 발생하지 않았습니다.Write-Output은 정상적으로 동작하고 있는 것 같습니다.
PowerShell 스크립트의 호출 방법에 따라서는
[Console]::BufferWidth =< length of string, e.g. 10000)
스투우트에게 편지를 쓰기 전에 말이야
슈플러의 답은 정확하다.다른 방법으로 설명:ARRAY FORM을 사용하여 값을 Write-Output에 전달하는 대신
Write-Output "Parameters are:" $Year $Month $Day
또는 Write-Output에 대한 여러 호출에 의해 동등하게 처리됩니다.
Write-Output "Parameters are:"
Write-Output $Year
Write-Output $Month
Write-Output $Day
Write-Output "Done."
먼저 구성 요소를 STRING VARILE에 연결합니다.
$msg="Parameters are: $Year $Month $Day"
Write-Output $msg
이것에 의해, Write-Output 커맨드 렛의 복수의 콜(ARRE FORM)에 의해서 발생하는 중간 CRLF는 회피됩니다만, 물론 Write-Output 커맨드렛의 최종 CRLF는 억제되지 않습니다.중하거나, 가 이 합니다.-NoNewline
옵션을 선택합니다.
로그 파일에 쓰는 것이 아니라 콘솔에 텍스트 진행률 미터(즉, "....")를 제공하려는 경우에도 Write-Host를 사용하여 만족해야 합니다.로그 쓰기용 변수로 msg 텍스트를 수집하고 Write-Host를 사용하여 콘솔에 진행 상황을 제공하면 둘 다 수행할 수 있습니다.이 기능을 독자적인 커맨드렛에 조합하여 코드를 최대한 재사용할 수 있습니다.
저는 사기를 쳤지만, 이것이 모든 요구사항을 충족하는 유일한 답변이라고 생각합니다.즉, 이것에 의해 CRLF의 후행은 회피되고, 그 사이에 다른 조작을 완료할 장소가 제공되어 필요에 따라서 stdout으로 적절히 리다이렉트 됩니다.
$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.'
Frink The Brave의 응답은 다음과 같습니다.
[System.IO.File]::WriteAllText("c:\temp\myFile.txt", $myContent)
PowerShell이 그 성가신 줄거리를 생략하도록 할 수는 없습니다.이 기능을 수행하는 스크립트나 cmdlet은 없습니다.물론, Write-Host는 리다이렉트/파이프를 할 수 없기 때문에 전혀 말도 안 됩니다.
다만, 독자적인 EXE 파일을 작성할 수 있습니다.스택 오버플로우 질문 PowerShell에서 출력하는 방법에서 설명한 대로입니다.
Write-Host
끔찍해, 세계의 파괴자이지만, 사용 중 사용자에게 진행 상황을 표시하기 위해서만 사용할 수 있습니다.Write-Output
(OP가 로깅을 요구한 것은 아닙니다)
Write-Output "Enabling feature XYZ" | Out-File "log.txt" # Pipe to log file
Write-Host -NoNewLine "Enabling feature XYZ......."
$result = Enable-SPFeature
$result | Out-File "log.txt"
# You could try{}catch{} an exception on Enable-SPFeature depending on what it's doing
if ($result -ne $null) {
Write-Host "complete"
} else {
Write-Host "failed"
}
$host.UI.Write('Enabling feature XYZ.......')
Enable-SPFeature...
$host.UI.WriteLine('Done')
난 전문가는 아니지만, 이건 왜 안 되지?
Write-Output "hello" | ForEach-Object { $PSItem.Trim() } | Do-Whatever
이렇게 하면 파이프라인의 의미가 유지되지만 다음에 수행해야 할 모든 작업에 파이프라인에서 전달하기 전에 새 행 문자가 트리밍됩니다.만약 그게 파일에 쓰는 거라면, 그렇게 해.그것이 호스트에 쓰는 것이라면, 그렇게 할 수 있지만, 호스트에 쓰는 경우는, 을 사용하는 것을 잊지 말아 주세요.| Write-Host -NoNewline
업데이트: 제 코멘트: "내 답변이 왜 작동하지 않는지 알겠습니다.Powershell은 불가피하게 외부 프로그램에 파이핑할 때 파이프 시멘틱스의 일부로 새 줄 문자를 추가합니다.다음 내용을 참조하십시오.github.com/PowerShell/PowerShell/issues/5974 따라서 잘라낸 텍스트를 파이프라인에 전달하면 새 줄 문자가 입력으로 다시 표시됩니다."
다음은 커서를 이전 행의 시작 부분에 다시 배치합니다.올바른 수평 위치($pos 사용)에 배치하는 것은 사용자에게 달려 있습니다.X를 옆으로 이동):
$pos = $host.ui.RawUI.get_cursorPosition()
$pos.Y -= 1
$host.UI.RawUI.set_cursorPosition($Pos)
현재 출력은 27공간 이상입니다. $pos입니다.X = 27이 작동할 수 있습니다.
매우 우아하지는 않지만 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()
인라인 연결을 사용하는 가장 간단한 방법 - 대신 'Write-Output'으로 이동합니다. 예를 들어, 탭 문자(문자열) 2개, 리터럴/버터팀(문자열):
Write-Output ("`t`t" + '${devArg}')
개인적으로 저는 그냥 그런 것을 사용합니다. "user $($user)"라고 적습니다.first name)는 온라인입니다.
$()를 사용하지 않으면 $user만 해석되며 $user는 해석되지 않습니다.이름
안부 전합니다
desired o/p: 기능 XYZ 활성화 중...다 했어요.
다음 명령을 사용할 수 있습니다.
$a = "기능 XYZ 활성화"
쓰기 출력 "$a...완료"
따옴표 안에 변수와 문을 추가해야 합니다.이것이 도움이 되기를 바랍니다:)
테크에갈 감사합니다
코멘트 링크에서 이 답변은 다음과 같습니다.
Write-Output "Some text $( $var.Name )"
잘 먹혔어요.그$( )
Name 값을 개별적으로 취득하기 위해 ExpandProperty가 필요한 경우에는 용장성이 없습니다.그렇지 않은 경우에는 해결된 값이 아닌 다음과 같이 출력됩니다.
@{Name=Name; Address=Address; City=City}.Name
넌 분명히 할 수 있어.Write-Output에는 기본적으로 동일한 "No Enumerate"라는 플래그가 있습니다.
언급URL : https://stackoverflow.com/questions/3896258/how-do-i-output-text-without-a-newline-in-powershell
'programing' 카테고리의 다른 글
cd -'는 무엇의 약자입니까? (0) | 2023.04.23 |
---|---|
Active Directory 사용자 그룹을 SQL Server에서 로그인으로 추가하는 방법 (0) | 2023.04.19 |
여러 Xaml 파일로 WPF 인터페이스 분할 (0) | 2023.04.19 |
UIView 주위의 점선 테두리 (0) | 2023.04.19 |
브런치가 추적하고 있는 리모콘을 변경하는 방법 (0) | 2023.04.19 |