비슷한 문제가 있었고 PowerShell (전체 최종 사용자 GUI 응용 프로그램)으로 작성된 프로그램을 만들고 디스크에서로드 해야하는 많은 파일과 리소스가 있기 때문에 많은 문제가 발생했습니다. 내 경험상 .
현재 디렉토리를 나타내는 데 사용 하는 것은 신뢰할 수 없습니다. 현재 작업 디렉토리를 나타내야하지만 종종 그렇지 않습니다. PowerShell은 내부에서 PowerShell이 호출 된 위치를 저장하는 것으로 보입니다 .
. 보다 정확하게 말하면 PowerShell이 처음 시작될 때 기본적으로 홈 사용자 디렉토리 내에서 시작됩니다. 일반적으로 사용자 계정의 디렉토리입니다.C:\USERS\YOUR USER NAME
. 그런 다음 PowerShell은 디렉토리를 호출 한 디렉토리 또는 PowerShell 프롬프트를 표시하거나 스크립트를 실행하기 전에 실행중인 스크립트가있는 디렉토리로 디렉토리를 변경합니다. 그러나 PowerShell 앱 자체가 원래 홈 사용자 디렉토리에서 시작된 후에 발생합니다.
그리고 .
PowerShell이 시작된 초기 디렉터리를 나타냅니다. 그래서 .
당신이 원하는 디렉토리에서 PowerShell을 호출하는 경우에만 경우 현재 디렉토리를 나타냅니다. 나중에 PowerShell 코드에서 디렉토리를 변경하면 변경 내용이 .
모든 경우에 반영되는 것은 아닙니다 . 어떤 경우에는 .
현재 작업중인 디렉토리를 나타내며 다른 경우에는 PowerShell (스크립트 자체가 아닌)이 호출 된 디렉토리에서 결과가 일치하지 않을 수 있습니다. 이런 이유로 호출자 스크립트를 사용합니다. 내부에 단일 명령이 포함 된 PowerShell 스크립트 :
POWERSHELL
. 그러면 원하는 디렉토리에서 PowerShell을 호출하여.
현재 디렉토리를 나타냅니다. 그러나 나중에 PowerShell 코드에서 디렉토리를 변경하지 않으면 작동합니다. 스크립트의 경우 파일 옵션을 포함한다는 점을 제외하고 마지막으로 언급 한 호출자 스크립트를 사용합니다
POWERSHELL -FILE DRIVE:\PATH\SCRIPT NAME.PS1
. 그러면 현재 작업 디렉토리 내에서 PowerShell이 시작됩니다.
스크립트를 클릭하기 만하면 스크립트 위치에 관계없이 홈 사용자 디렉토리에서 PowerShell이 호출됩니다. 결과적으로 현재 작업 디렉토리는 스크립트가있는 디렉토리이지만 PowerShell 호출 디렉토리 는 상황이며 상황에 따라이 두 디렉토리 중 하나 C:\USERS\YOUR USER NAME
를 .
반환합니다.
그러나 이러한 모든 혼란을 피하고 호출자 스크립트를 사용하려면 현재 작업 디렉토리 또는 스크립트가 호출 된 디렉토리를 나타내는 날씨에 따라 현재 디렉토리를 나타내는 대신 $PWD
또는 $PSSCRIPTROOT
대신에 단순히 또는 대신을 사용할 수 있습니다 .
. 그리고 어떤 이유로 든 .
반환 하는 두 디렉토리 중 다른 디렉토리를 검색 하려면을 사용할 수 있습니다 $HOME
.
필자는 개인적으로 내 앱의 루트 디렉토리 내에 호출자 스크립트를 가지고 있으며 주 앱 스크립트를 호출하는 PowerShell을 사용하여 개발하며 앱의 소스 코드 내에서 현재 작업 디렉토리를 절대로 변경하지 않아야한다는 것을 기억하므로 걱정할 필요가 없습니다. .
현재 디렉토리를 나타내고 문제없이 응용 프로그램에서 상대 파일 주소 지정을 지원 하는 데 사용할 수 있습니다 . 이것은 최신 버전의 PowerShell (버전 2 이상)에서 작동합니다.