programing

PowerShell에 상대 파일 포함

luckcodes 2021. 1. 16. 20:28

PowerShell에 상대 파일 포함


이러한 의사 구문으로 스크립트 파일을 포함하고 싶습니다.

Include '.\scripA.ps1'

그러나 내가 찾은 유일한 것은 다음과 같은 것입니다.

$thisScript = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
. ($thisScript + '.\scriptA.ps1')

그것은 못 생겼다.

상대 경로가있는 스크립트를 포함 하는 좋은 방법이 있습니까?


안타깝게도 좋은 방법은 없습니다. PowerShell은 V1에서이 아이디어를 전혀 지원하지 않습니다. 정말 당신이 취하는 접근 방식이 최선의 접근 방식입니다


다음과 같이 $ PSScriptRoot 매개 변수를 사용할 수 있습니다.

. "$PSScriptRoot\script.ps1"

파일을 도트 소싱 (포함) 할 수 있습니다.

. . \ scriptA.ps1

스크립트의 전체 경로를 얻으려면 :

Resolve-Path. \ scriptA.ps1


이미 언급했듯이 닷 소싱은 특별히 예쁘지는 않지만 가장 간단한 옵션입니다. 그러나이 형식은 약간 더 깔끔하게 만듭니다.

$ScriptDirectory = Split-Path $MyInvocation.MyCommand.Path
. (Join-Path $ScriptDirectory ScriptA.ps1)

또한, 명시 적으로 만드는 데 유용한 상대 경로 에 대한 참고 : 원래 게시물은 현재 작업 디렉토리 에 대한 상대 경로를 원하는 것처럼 보일 수 있습니다 . 실제로 의도는 현재 스크립트의 소스 디렉토리 (alex2k8의 자체 코드 샘플에서 알 수 있듯이)에 상대적 입니다. 따라서 현재 스크립트가 동일한 저장소의 다른 스크립트에 액세스 할 수 있습니다.


V2 (Win7 / 2008R2로 시작하는 네이티브, 참조 $psversiontable.psversion) 부터 다음과 같은 파일을 쉽게 포함 할 수 있습니다.

. "RelativeOrAbsolutePathToFile\include.ps1"

$result = FunctionInIncludeFile()

참조 :
스크립트에서 Windows PowerShell 기능을 재사용하는 방법


이것은 아마도 모든 디렉토리에서 작동하지만 시작 디렉토리가 포함하려는 파일의 직접적인 선행 디렉토리가 아닌 경우 sloooooowwwww 찾기가 될 것입니다. IOW,이 검색의 시작점이 c : \ 또는 다른 드라이브 문자의 루트 인 경우 이것은 끔찍하게 느릴 것입니다.

. $ (Resolve-Path -literal $ (gci -Recurse include.ps1))

이것은 PC에서 스크립트를 개발하고 있지만 스크립트를 예약 된 작업으로 실행할 서버에 배포해야하는 경우 특히 잘 작동합니다.


$ PSScriptRoot 및 "Split-Path"지시문을 사용하여 상대 경로에 대해 제대로 작동하도록 할 수 있습니다. . (($PSScriptRoot | Split-Path | Split-Path)+'somedir\ps\script.ps1')

참조 URL : https://stackoverflow.com/questions/684217/include-relative-files-in-powershell