텍스트 파일로 변수 출력("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'
- PSv5.1+에서 및 에서 사용하는 인코딩을 변경할 수 있습니다.
-
문자열을 작성하는 경우 및 와 같이 의미 있는 문자열 표현을 갖는 것으로 알려진 유형의 인스턴스에 사용됩니다.NET 기본 데이터 유형(Booleans, 정수 등).
.psobject.ToString()
메소드는 각 출력 객체에 대해 호출되며, 이는 의미 있는 표현을 명시적으로 구현하지 않는 유형에 대해 의미 없는 표현을 초래합니다.[hashtable]
예는 다음과 같습니다.
@{ one = 1 } | Set-Content t.txt
문그로쓰기대자▁literal쓰기▁writesSystem.Collections.Hashtable
t.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:COMPUTERNAME
ASC가 아닌 것을 포함할 수 없습니다.II 문자(또는 동사) ?
문자),Add-Content
의 파일에 추가하면 다음이 발생하지 않습니다.?
캐릭터, 그리고 가장 가능성 있는 설명은?
인스턴스가 출력 파일의 기존 콘텐츠의 일부임$file
그렇고요.Add-Content
부속의
약간의 시행착오 끝에, 저는 그것을 발견했습니다.
$computername = $env:computername
시스템 이름을 가져오는 데 사용되지만 전송$computername
Add-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
'programing' 카테고리의 다른 글
배열의 모든 값이 동일한지 확인합니다. (0) | 2023.08.20 |
---|---|
콘텐츠 보안 정책:페이지 설정이 리소스 로드를 차단했습니다. (0) | 2023.08.20 |
테이블 행에 테두리 반지름을 추가하는 방법 (0) | 2023.08.20 |
추가 방법추가 방법자바스크립트로?자바스크립트로? (0) | 2023.08.20 |
PL/SQL의 CASE 문에 스택 조건 (0) | 2023.08.20 |