문제

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

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) SO와 같은 파일을 쉽게 포함시킬 수 있습니다.

. "RelativeOrAbsolutePathToFile\include.ps1"

$result = FunctionInIncludeFile()

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

이것은 아마도 모든 디렉토리에서 작동하지만 시작 디렉토리가 포함하려는 파일의 직접적인 선행 디렉토리가 아닌 경우 Sloooooowwwww를 찾을 수 있습니다. IOW,이 검색의 시작점이 C : 또는 다른 드라이브 문자의 근본이라면 아마도 끔찍하게 느리게 될 것입니다.

. $ (Resolve -Path -literal $ (gci -recurse includ.ps1)))

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

$ psscriptroot 및 "분할 경로"지침을 사용하여 상대 경로에서 깨끗하게 작동하도록 할 수 있습니다. . (($PSScriptRoot | Split-Path | Split-Path)+'somedir\ps\script.ps1')

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top