비슷한 문제가 있었고 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 이상)에서 작동합니다.