У меня были подобные проблемы, и это доставило мне много хлопот, так как я делаю программы, написанные на PowerShell (приложения с полным пользовательским интерфейсом), и у меня много файлов и ресурсов, которые мне нужно загрузить с диска. Из моего опыта использования. для представления текущего каталога ненадежно. Он должен представлять текущий рабочий каталог, но часто это не так. Похоже, что PowerShell сохраняет расположение, из которого был вызван PowerShell .. Точнее говоря, при первом запуске PowerShell он запускается по умолчанию внутри вашего домашнего каталога пользователя. Обычно это каталог вашей учетной записи, что-то вродеC:\USERS\YOUR USER NAME, После этого PowerShell меняет каталог на каталог, из которого вы его вызвали, или на каталог, в котором находится выполняемый скрипт, перед тем, как представить вам приглашение PowerShell или запустить скрипт. Но это происходит после того, как само приложение PowerShell изначально запускается в вашем домашнем пользовательском каталоге.
И .представляет тот начальный каталог, внутри которого запускается PowerShell. Таким образом, .представляет текущий каталог только в том случае, если вы вызвали PowerShell из требуемого каталога. Если вы позже измените каталог в коде PowerShell, изменение не будет отражаться внутри .каждого случая. В некоторых случаях .представляет текущий рабочий каталог, а в других каталог, из которого был вызван PowerShell (сам по себе, а не сценарий), что может привести к противоречивым результатам. По этой причине я использую скрипт invoker. PowerShell скрипт с одной командой внутри:
POWERSHELL. Это гарантирует, что PowerShell вызывается из требуемого каталога и, таким образом,.представлять текущий каталог. Но это работает только в том случае, если вы не измените каталог позже в коде PowerShell. В случае сценария, я использую INVOKER скрипт , который похож на последнего я уже говорил, за исключением того, что содержит опцию Файл:
POWERSHELL -FILE DRIVE:\PATH\SCRIPT NAME.PS1. Это обеспечивает запуск PowerShell внутри текущего рабочего каталога.
Простое нажатие на скрипт вызывает PowerShell из вашего домашнего пользовательского каталога независимо от того, где находится скрипт. Это приводит к тому, что текущим рабочим каталогом является каталог, в котором находится сценарий, а каталогом вызова PowerShell - C:\USERS\YOUR USER NAMEи с .возвратом одного из этих двух каталогов в зависимости от ситуации, что смешно.
Но чтобы избежать всей этой суеты и использования сценария invoker, вы можете просто использовать один $PWDили $PSSCRIPTROOTвместо .представления текущего каталога в зависимости от того, какую погоду вы хотите представить текущий рабочий каталог или каталог, из которого был вызван сценарий. И если вы по какой-то причине хотите получить другие из двух каталогов, которые .возвращаются, вы можете использовать $HOME.
Лично у меня просто есть скрипт invoker внутри корневого каталога моих приложений, который я разрабатываю с помощью PowerShell, который вызывает мой основной скрипт приложения, и просто не забываю никогда не менять текущий рабочий каталог внутри моего исходного кода моего приложения, поэтому мне никогда не придется беспокоиться об этом, и я могу использовать .для представления текущего каталога и для поддержки относительной адресации файлов в моих приложениях без каких-либо проблем. Это должно работать в более новых версиях PowerShell (новее версии 2).