텍스트 파일에서 변수를 검색하는 PowerShell
텍스트 파일 C:\test를 읽을 수 있는 방법이 있습니까?txt 및 특정 값 검색?
iE 파일은 다음과 같습니다.
serverName=serv8496
midasServer=serv8194
이 파일에서 어떤 식으로든 스크립트의 변수 값을 설정하고 싶습니다. 예:
$MidasServer= (from file midasServer value)
나는 참조가 어디에 있는지 라인 번호를 모를 것입니다.
이거 할 수 있는 방법은?
예, 파일을 읽고 각 줄을 분할한 다음 분할 결과를 이름 및 값 매개 변수에 할당합니다.
Get-Content file.txt | Foreach-Object{
$var = $_.Split('=')
New-Variable -Name $var[0] -Value $var[1]
}
만약 당신의 파일이 정확히 그런 식으로 나타난다면, 즉 등호로 표시된 키 값 쌍의 목록을 확인해야 합니다.
하나 이상의 키 및 값 쌍을 포함하는 문자열을 해시 테이블로 변환합니다.각 키/값 쌍은 별도의 줄에 있어야 하므로 여기서 문자열은 입력 형식으로 사용되는 경우가 많습니다.
따라서 텍스트 파일에 예제의 데이터만 포함되어 있는 경우 이를 통해 해시 테이블을 만들 수 있습니다.
$Path = "C:\temp\test.txt"
$values = Get-Content $Path | Out-String | ConvertFrom-StringData
$values.midasServer
어디서$values.midasServer
값은 serv8194입니다.파일에 대한 속성 위치를 알 필요가 없습니다.입력 파일은 동일 부호 주위에 다양한 선행 및 후행 공간을 가질 수 있으며, 이는 정확히 동일한 결과를 제공합니다.
사용 사례에 따라 한 단계 더 나아가 해당 해시 테이블에서 사용자 지정 개체를 만들 수 있습니다.
New-Object -TypeName pscustomobject -Property $values
PowerShell v3 이상이 있는 경우 프로세스를 간소화할 수 있습니다(사용자 지정 psobject를 원한다고 가정).
$values = [pscustomobject](Get-Content $Path -Raw | ConvertFrom-StringData)
$values.midasServer
이것은 셰이 레비의 답변을 개선한 것입니다.다음과 같은 작업을 수행합니다.
- 주석이 달린 줄과 파일의 새 줄은 무시됩니다.파일 처리를 시작하기 전에 txt.따라서 이름이 빈 문자열이기 때문에 만들 수 없다는 오류를 해결합니다.
- 문자 "="이 처음 발생할 때만 분할됩니다.따라서 값 필드의 문자를 사용할 수 있습니다.
- 변수/속성의 시작과 끝에서 공백 문자를 제거하기 위해 트림() 작업을 수행합니다.따라서 파일에 "VARIVEL=VALUE"와 "VARIVEL=VALUE"가 있습니다.txt는 동일한 값을 반환합니다.
- 새 변수의 범위를 "스크립트"로 설정합니다.스크립트 범위에서 생성된 변수는 해당 변수가 생성된 스크립트 파일 또는 모듈 내에서만 액세스할 수 있습니다.기타 옵션은 전역, 로컬 및 개인입니다.여기에서 가변 범위 참조를 찾을 수 있습니다.
Get-Content file.txt | Where-Object {$_.length -gt 0} | Where-Object {!$_.StartsWith("#")} | ForEach-Object {
$var = $_.Split('=',2).Trim()
New-Variable -Scope Script -Name $var[0] -Value $var[1]
}
이것은 저에게 성공적이었습니다.
(파일명 = filename)txt)
[string] $person 'Joe'
$[int] 50파운드
$datemy'[datetime] $dob '06/11/datemy'
(소리)
내용 파일 이름을 가져옵니다.txt | 각 개체에 대해 {}
= = $.분할(" ").자르기()
{\cript\complete\command-script\colon\colon\command\cript\colon\colon\command\colon\colon\colon\colon\col
invar[0])+$($invar[1])+'='+$($invar[2])
} )
}
공간을 포함하는 "값"이 있다는 것을 알고 있다면, "사람 "조 B"와 같이 값에 참여하십시오.
대체:
invar[0])+$($invar[1])+'='+$($invar[2])
사용:
$($invar[ $($invar[1])+($invar[2])+(-$invar[3]), $($invar[5]), $()
저도 사실 같은 문제를 겪었고 우리는 다음과 같은 접근법을 사용합니다.
$serverName = (Get-Content .\YourFilename).split()[0].split("=")[1]
이것이 여러분들에게 도움이 되길 바랍니다.
언급URL : https://stackoverflow.com/questions/12368142/powershell-retrieving-a-variable-from-a-text-file
'sourcecode' 카테고리의 다른 글
JQuery Ajax 요청:사용자-에이전트 변경 (0) | 2023.08.21 |
---|---|
런타임에 Spring의 @Scheduled fixed delay를 변경하는 방법은 무엇입니까? (0) | 2023.08.21 |
Java 프로그램에서 MariaDB에 액세스하려고 하면 암호가 올바르는데도 'access denied' 예외가 발생하는 이유는 무엇입니까? (0) | 2023.08.21 |
공유 EntityManager에서 트랜잭션을 생성할 수 없음 - Spring 트랜잭션 또는 EJB CMT 사용 (0) | 2023.08.21 |
다른 Oracle 데이터베이스에서 테이블 쿼리 (0) | 2023.08.21 |