programing

텍스트 파일로 변수 출력("echo")

lastmoon 2023. 8. 20. 12:25
반응형

텍스트 파일로 변수 출력("echo")

많은 서버에 대해 PowerShell 스크립트를 실행하고 있으며 출력을 텍스트 파일로 기록하고 있습니다.

스크립트가 현재 실행 중인 서버를 캡처하려고 합니다.지금까지 제가 가진 것은:

$file = "\\server\share\file.txt"
$computername = $env:computername

$computername | Add-Content -Path $file

이 마지막 줄은 출력 파일에 물음표를 추가합니다.어라.

PowerShell에서 텍스트 파일로 변수를 출력하려면 어떻게 해야 합니까?

가장 간단한 헬로 월드의 예는...

$hello = "Hello World"
$hello | Out-File c:\debug.txt

Note: The answer below is written from the perspective of Windows PowerShell.
However, it applies to the cross-platform PowerShell (Core) v6+ as well, except that the latter - commendably - consistently defaults to BOM-less UTF-8 as the character encoding, which is the most widely compatible one across platforms and cultures.
.


bigtv의 유용한 답변을 보다 간결한 대안 및 배경 정보로 보완하기 위해:

# > $file is effectively the same as | Out-File $file
# Objects are written the same way they display in the console.
# Default character encoding is UTF-16LE (mostly 2 bytes per char.), with BOM.
# Use Out-File -Encoding <name> to change the encoding.
$env:computername > $file

# Set-Content calls .ToString() on each object to output.
# Default character encoding is "ANSI" (culture-specific, single-byte).
# Use Set-Content -Encoding <name> to change the encoding.
# Use Set-Content rather than Add-Content; the latter is for *appending* to a file.
$env:computername | Set-Content $file 

텍스트 파일로 출력할 때는 다른 개체 표현을 사용하는 두 가지 기본 옵션이 있으며 Windows PowerShell에서는 다른 기본 문자 인코딩사용합니다(PowerShell Core와 달리).

  • Out-File (또는)>) /Out-File -Append(또는)>>):

    • PowerShell의 기본 출력 형식이 출력 개체에 적용되므로 모든 유형의 출력 개체에 적합합니다.

      • , 콘솔 인쇄할 때와 동일한 출력을 얻을있습니다.
    • 기본 인코딩으로 변경할 수 있습니다.-Encoding매개 변수, is는 대부분의 문자가 2바이트로 인코딩되는 UTF-16LE입니다.UTF-16LE와 같은 유니코드 인코딩의 장점은 모든 인간 언어의 모든 문자를 인코딩할 수 있는 글로벌 알파벳이라는 것입니다.

      • PSv5.1+에서 및 에서 사용하는 인코딩을 변경할 수 있습니다.$PSDefaultParameterValues 변수는,▁fact▁of▁pre▁the라는 사실을 이용한 입니다.>그리고.>>는 사실상 이제사가다니명입의 이 되었습니다.Out-File그리고.Out-File -Append예를 들어 UTF-8(Windows PowerShell에서 BOM과 함께 변경할 수 없음)로 변경하려면 다음을 사용합니다.
        $PSDefaultParameterValues['Out-File:Encoding']='UTF8'
  • Set-Content / Add-Content:

    • 문자열을 작성하는 경우 및 와 같이 의미 있는 문자열 표현을 갖는 것으로 알려진 유형의 인스턴스에 사용됩니다.NET 기본 데이터 유형(Booleans, 정수 등).

      • .psobject.ToString() 메소드는 각 출력 객체에 대해 호출되며, 이는 의미 있는 표현을 명시적으로 구현하지 않는 유형에 대해 의미 없는 표현을 초래합니다.[hashtable]예는 다음과 같습니다.
        @{ one = 1 } | Set-Content t.txt 문그로쓰기대자▁literal쓰기▁writesSystem.Collections.Hashtablet.txt은 의결인의 입니다.@{ one = 1 }.ToString().
    • 기본 인코딩으로 변경할 수 있습니다.-Encoding매개 변수는 시스템의 활성 ANSI 코드 페이지, 즉 일반적으로 Windows-1252인 Unicode가 아닌 응용 프로그램에 대한 단일 바이트 문화별 레거시 인코딩입니다.
      현재 설명서에서는 ASCII가 기본 인코딩이라고 잘못 주장하고 있습니다.

    • 의 목적기존 파일에 내용을 추가하는 이며 다음과 같습니다.Set-Content대상 파일이 아직 존재하지 않는 경우.
      있지 않은 , 파이존있않지으면비어고일재하,,면,Add-Content기존 인코딩과 일치하려고 합니다.

Out-File/>/Set-Content/Add-Content 모두 문화에 민감하게 작용합니다. 즉, 사용 가능한 경우 현재 문화에 적합한 표현을 생성합니다(사용자 지정 형식 데이터는 자체적으로 정의할 수 있지만, 문화적 표현은 참조).이것은 문화 불변인 PowerShell의 문자열 확장(이중 따옴표로 묶은 문자열 보간)과 대조됩니다. 제 대답을 참조하십시오.

성능에 대해서는:

  • 기본 형식을 입력에 적용할 필요가 없기 때문에 성능이 더 좋으며, 따라서 입력이 표준 .NET을 통해 기본 문자열화되는 문자열 및/또는 개체로 구성된 경우 선호되는 선택입니다..ToString()방법으로 충분합니다.

OP의 증상:

때부터$env:COMPUTERNAMEASC가 아닌 것을 포함할 수 없습니다.II 문자(또는 동사) ? 문자),Add-Content의 파일에 추가하면 다음이 발생하지 않습니다.?캐릭터, 그리고 가장 가능성 있는 설명은?인스턴스가 출력 파일의 기존 콘텐츠의 일부임$file 그렇고요.Add-Content 부속의

약간의 시행착오 끝에, 저는 그것을 발견했습니다.

$computername = $env:computername

시스템 이름을 가져오는 데 사용되지만 전송$computernameAdd-Content를 통해 파일로 이동할 수 없습니다.

저도 노력했습니다.$computername.Value.

대신에, 만약 내가

$computername = get-content env:computername

다음을 사용하여 텍스트 파일로 보낼 수 있습니다.

$computername | Out-File $file

당신의 샘플 코드는 문제가 없는 것 같습니다.따라서 근본적인 문제는 어떻게든 파헤쳐져야 합니다.대본에 오타가 날 가능성을 없애도록 하겠습니다. 먼여, 러들이분을 넣도록 .Set-Strictmode -Version 2.0스크립트의 시작 부분에 있습니다.이렇게 하면 철자가 틀린 변수 이름을 찾는 데 도움이 됩니다. 렇게이.

# Test.ps1
set-strictmode -version 2.0 # Comment this line and no error will be reported.
$foo = "bar"
set-content -path ./test.txt -value $fo # Error! Should be "$foo"

PS C:\temp> .\test.ps1
The variable '$fo' cannot be retrieved because it has not been set.
At C:\temp\test.ps1:3 char:40
+ set-content -path ./test.txt -value $fo <<<<
    + CategoryInfo          : InvalidOperation: (fo:Token) [], RuntimeException
    + FullyQualifiedErrorId : VariableIsUndefined

물음표에 대한 다음 부분은 유니코드에 문제가 있는 것처럼 들립니다.Powershell로 파일을 입력하면 출력이 어떻게 됩니까?

$file = "\\server\share\file.txt"
cat $file

쉬운 방법은 다음과 같습니다.

$myVar > "c:\myfilepath\myfilename.myextension"

다음을 시도할 수도 있습니다.

Get-content "c:\someOtherPath\someOtherFile.myextension" > "c:\myfilepath\myfilename.myextension"

언급URL : https://stackoverflow.com/questions/19122755/output-echo-a-variable-to-a-text-file

반응형