programing

PowerShell에 관련 파일 포함

subpage 2023. 8. 12. 10:20
반응형

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

반응형