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
'programing' 카테고리의 다른 글
데이터 소스의 SQL 언어를 구성해야하는 이유는 무엇입니까? (0) | 2021.01.16 |
---|---|
SharePoint 인터뷰 질문 (0) | 2021.01.16 |
사람이 읽을 수있는 파일 형식을 사용해야하는 이유는 무엇입니까? (0) | 2021.01.16 |
NSData를 NSString Hex 문자열로 변환하는 방법은 무엇입니까? (0) | 2021.01.16 |
MVC 3이 서버에 설치되었으므로 / Account / Login? ReturnUrl = % 2f로 리디렉션 요청 (0) | 2021.01.16 |