Ho avuto problemi simili e questo mi ha causato molti problemi poiché sto realizzando programmi scritti in PowerShell (applicazioni GUI per utenti finali completi) e ho molti file e risorse che devo caricare dal disco. Dalla mia esperienza, usando . Successivamente, PowerShell cambia la directory nella directory dalla quale è stata invocata o nella directory in cui si trova lo script che si sta eseguendo prima di presentare all'utente il prompt di PowerShell o di eseguire lo script. Questo succede dopo che la stessa app PowerShell si avvia inizialmente nella directory dell'utente home..
per rappresentare la directory corrente non è affidabile. Dovrebbe rappresentare la directory di lavoro corrente, ma spesso non lo è. Sembra che PowerShell salvi la posizione da cui è stato richiamato PowerShell all'interno .
. Per essere più precisi, quando PowerShell viene avviato per la prima volta, viene avviato, per impostazione predefinita, nella directory dell'utente di casa. Di solito è la directory del tuo account utente, qualcosa del genereC:\USERS\YOUR USER NAME
E .
rappresenta quella directory iniziale all'interno della quale è stato avviato PowerShell. Quindi .
rappresenta la directory corrente solo nel caso in cui sia stato richiamato PowerShell dalla directory desiderata. Se in seguito si modifica la directory nel codice di PowerShell, la modifica non si riflette .
in tutti i casi. In alcuni casi .
rappresenta la directory di lavoro corrente e in altre directory da cui è stato invocato PowerShell (stesso, non lo script), ciò che può portare a risultati incoerenti. Per questo motivo utilizzo lo script di invoker. Script di PowerShell con singolo comando all'interno:
rappresenta la directory corrente. Funziona solo se non si modifica la directory in un secondo momento nel codice PowerShell. Nel caso di uno script, utilizzo lo script di invoker che è simile all'ultimo che ho citato, tranne che contiene un'opzione di file:
POWERSHELL
. Ciò garantirà che PowerShell sia richiamato dalla directory desiderata e quindi creerà.
POWERSHELL -FILE DRIVE:\PATH\SCRIPT NAME.PS1
. Ciò garantisce l'avvio di PowerShell nella directory di lavoro corrente.
Basta fare clic sullo script per richiamare PowerShell dalla directory dell'utente di casa, indipendentemente da dove si trova lo script. Risulta che la directory di lavoro corrente è la directory in cui si trova lo script, ma la directory di invocazione di PowerShell è C:\USERS\YOUR USER NAME
e con la .
restituzione di una di queste due directory a seconda della situazione, ciò che è ridicolo.
Ma per evitare tutto questo clamore e usare lo script di invocatore, puoi semplicemente usare $PWD
o $PSSCRIPTROOT
invece di .
rappresentare la directory corrente a seconda del tempo che desideri rappresentare la directory di lavoro corrente o la directory da cui è stato invocato lo script. E se, per qualche motivo, vuoi recuperare altre due directory che .
restituiscono, puoi usare $HOME
.
Personalmente ho solo lo script di invoker nella directory principale delle mie app che sviluppo con PowerShell che richiama lo script della mia app principale e ricordo semplicemente di non cambiare mai la directory di lavoro corrente all'interno del mio codice sorgente della mia app, quindi non devo mai preoccuparmi di questo, e posso usare .
per rappresentare la directory corrente e supportare l'indirizzamento dei file relativi nelle mie applicazioni senza problemi. Questo dovrebbe funzionare con le versioni più recenti di PowerShell (più recenti della versione 2).