Tuve problemas similares y me causó muchos problemas ya que estoy haciendo programas escritos en PowerShell (aplicaciones GUI de usuario final) y tengo muchos archivos y recursos que necesito cargar desde el disco. Desde mi experiencia, usando . Después de eso, PowerShell cambia el directorio a cualquier directorio desde el que lo invocó, o al directorio donde se encuentra el script que está ejecutando antes de presentarle el indicador de PowerShell o ejecutar el script. Pero eso sucede después de que la aplicación PowerShell se inicia originalmente dentro de su directorio de usuario doméstico..
para representar el directorio actual no es confiable. Debe representar el directorio de trabajo actual, pero a menudo no lo hace. Parece que PowerShell guarda la ubicación desde la cual se ha invocado a PowerShell .
. Para ser más precisos, cuando PowerShell se inicia por primera vez, se inicia, de manera predeterminada, dentro de su directorio de usuario doméstico. Ese suele ser el directorio de su cuenta de usuario, algo así comoC:\USERS\YOUR USER NAME
Y .
representa ese directorio inicial dentro del cual se inició PowerShell. Por lo tanto, .
solo representa el directorio actual en caso de que haya invocado PowerShell desde el directorio deseado. Si luego cambia el directorio en el código de PowerShell, el cambio parece no reflejarse .
en el interior en todos los casos. En algunos casos .
representa el directorio de trabajo actual, y en otros directorio desde el que se ha invocado PowerShell (en sí mismo, no el script), lo que puede conducir a resultados inconsistentes. Por esta razón, uso el script de invocador. Script de PowerShell con un solo comando dentro:
representa el directorio actual. Pero solo funciona si no cambia el directorio más adelante en el código de PowerShell. En el caso de un script, utilizo un script de invocador que es similar al último que mencioné, excepto que contiene una opción de archivo:
POWERSHELL
. Eso garantizará que se invoque PowerShell desde el directorio deseado y, por lo tanto,.
POWERSHELL -FILE DRIVE:\PATH\SCRIPT NAME.PS1
. Eso asegura que PowerShell se inicie dentro del directorio de trabajo actual.
Simplemente haciendo clic en la secuencia de comandos invoca PowerShell desde el directorio de usuario de su casa sin importar dónde se encuentre la secuencia de comandos. Resulta que el directorio de trabajo actual es el directorio donde se encuentra el script, pero el directorio de invocación de PowerShell esC:\USERS\YOUR USER NAME
, y con la .
devolución de uno de estos dos directorios dependiendo de la situación, lo que es ridículo.
Pero para evitar todo este alboroto y usar el script de invocador, simplemente puede usar cualquiera $PWD
o en $PSSCRIPTROOT
lugar de .
representar el directorio actual dependiendo del clima en el que desee representar el directorio de trabajo actual o el directorio desde el que se invocó el script. Y si, por alguna razón, desea recuperar otro de dos directorios que.
regresa, puede usarlo $HOME
.
Personalmente, solo tengo un script de invocador dentro del directorio raíz de mis aplicaciones que desarrollo con PowerShell que invoca el script de mi aplicación principal, y simplemente recuerdo que nunca cambie el directorio de trabajo actual dentro del código fuente de mi aplicación, por lo que nunca tengo que preocuparme por esto, y puedo usar .
para representar el directorio actual y para admitir el direccionamiento de archivos relativo en mis aplicaciones sin ningún problema. Esto debería funcionar en las versiones más nuevas de PowerShell (más nuevas que la versión 2).