PowerShell에 관련 파일 포함
다음과 같은 유사 구문의 스크립트 파일을 포함하고 싶습니다.
Include '.\scripA.ps1'
하지만 제가 발견한 것은 다음과 같은 것뿐입니다.
$thisScript = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
. ($thisScript + '.\scriptA.ps1')
그것은 추합니다.
상대 경로가 있는 스크립트를 포함하는 좋은 방법이 있습니까?
다음과 같이 $PSScriptRoot 매개 변수를 사용할 수 있습니다.
. "$PSScriptRoot\script.ps1"
다음 파일을 닷 소스(포함)로 지정할 수 있습니다.
.\scriptA.ps1
스크립트의 전체 경로를 가져오는 방법
Resolve-Path .\scriptA.ps1
도트 소싱은 이미 언급했듯이 특별히 예쁘지는 않지만 가장 간단한 옵션입니다.그러나 이 형식을 사용하면 조금 더 깔끔해집니다.
$ScriptDirectory = Split-Path $MyInvocation.MyCommand.Path
. (Join-Path $ScriptDirectory ScriptA.ps1)
또한 명시적으로 만드는 데 유용한 상대 경로에 대한 참고: 원래 게시물은 현재 작업 디렉터리에 상대적인 경로를 원하는 것처럼 보일 수 있습니다. 실제로 의도는 현재 스크립트의 소스 디렉터리에 상대적입니다(알렉스2k8의 자체 코드 샘플에서 알 수 있음).따라서 현재 스크립트가 동일한 리포지토리에서 다른 스크립트에 액세스할 수 있습니다.
유감스럽게도, 좋은 방법이 없습니다.PowerShell은 V1에서 이 아이디어를 잘 지원하지 않습니다.실제로 현재 취하고 있는 접근 방식이 최상의 접근 방식입니다.
V2 기준(Windows 7/2008R2로 시작하는 기본 제공, 참조)$psversiontable.psversion
) 다음과 같은 파일을 쉽게 포함할 수 있습니다.
. "RelativeOrAbsolutePathToFile\include.ps1"
$result = FunctionInIncludeFile()
참조:
스크립트에서 윈도우즈 파워셸 기능을 재사용하는 방법
$PSScriptRoot 및 "Split-Path" 지시어를 사용하여 상대 경로에 대해 정상적으로 작동할 수 있습니다. . (($PSScriptRoot | Split-Path | Split-Path)+'somedir\ps\script.ps1')
이것은 아마도 어떤 디렉토리에서도 작동할 것이지만, 만약 당신의 시작 디렉토리가 당신이 포함하려는 파일의 직접적인 선행 디렉토리가 아니라면 sooooowwwww 찾기가 될 것입니다.IOW, 이 검색의 시작점이 c:\ 또는 다른 드라이브 문자의 루트인 경우 이 작업은 매우 느릴 수 있습니다.
$(Resolve-Path - 리터럴 $(gci -Recurse include.ps1)
PC에서 스크립트를 개발 중이지만 스크립트를 예약된 작업으로 실행할 서버에 스크립트를 배포해야 하는 경우 특히 유용합니다.
언급URL : https://stackoverflow.com/questions/684217/include-relative-files-in-powershell
'programing' 카테고리의 다른 글
Git 분기 간 특정 폴더의 차이 (0) | 2023.08.12 |
---|---|
CSS: 배경 색상의 배경 이미지 (0) | 2023.08.12 |
스프링 3.0.5에서 매개 변수 바인딩이 쉼표를 해석하지 못하도록 방지하는 방법은 무엇입니까? (0) | 2023.08.12 |
클래스 이름별로 요소 제거 (0) | 2023.08.12 |
jquery에서 배경색을 설정하는 방법 (0) | 2023.08.12 |