Jak ustawić domyślny katalog PowerShell?


Odpowiedzi:


61

Możesz określić katalog do otwarcia podczas uruchamiania PowerShell:

powershell.exe -NoExit -command "& {Set-Location $env:systemroot}"

Po prostu użyj go w swoim skrócie.

Lub użyj profilu, aby ustawić katalog startowy.


5
PS Core:pwsh.exe -WorkingDirectory C:\YourLocation\Goes\Here
Sergey Zykov

„C: \ Program Files \ PowerShell \ 6 \ pwsh.exe” -WorkingDirectory D: \ test
cem kaan

179

Utwórz profil programu PowerShell w następujący sposób.

  1. Uruchom PowerShell jako administrator i wykonaj następujące polecenie:

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

    Umożliwi to PowerShell uruchamianie lokalnych skryptów i skryptów pobranych z Internetu, które zostały podpisane. Przeczytaj więcej o tym poleceniu w dokumentacji .

  2. W Documentsfolderze znajdź folder o nazwie WindowsPowerShelldla klasycznego programu PowerShell lub PowerShelldla nowszego programu PowerShell Core. Jeśli nie istnieje, to w porządku; po prostu go stwórz.

  3. Utwórz nowy plik o nazwie profile.ps1w WindowsPowerShellfolderze (lub PowerShelldla programu PowerShell Core).
  4. Otwórz profile.ps1i dodaj następujące polecenie, aby ustawić domyślny katalog roboczy:

    Set-Location C:\my\default\working\directory
  5. Otwórz nowe okno PowerShell ... zmiany powinny zacząć obowiązywać.


1
Próbowałem tego, ale get „profile.ps1 nie może zostać załadowane, ponieważ uruchamianie skryptów jest wyłączone”. Czy istnieje „bezpieczny” sposób włączania bezpiecznych skryptów?
John Little

3
Uruchom to: „Set-ExecutionPolicy -ExecutionPolicy RemoteSigned” Możesz o tym przeczytać tutaj: technet.microsoft.com/en-us/library/ee176961.aspx Nie zezwala na uruchamianie skryptów pobranych z Internetu, chyba że pochodzą one od zaufanego źródło.
LLL

7
Jest to naprawdę zły sposób, ponieważ jeśli masz na przykład skrypt kompilacji (taki jak skrypt kompilacji Visual Studio) i chcesz uruchomić polecenie ps, katalog roboczy polecenia zostanie ustawiony na tę lokalizację, więc w zasadzie będzie zepsuć wszystkie skrypty za pomocą programu PowerShell, takiego jakpowershell -File "myscript.ps1"
Santhos

2
Jeśli to zła opcja, czy istnieje lepszy / bezpieczniejszy sposób na zrobienie tego?
Adam_G,

4
Pozwól mi się poprawić. Podczas pisania skryptów PowerShell, np. Do kompilacji, zawsze używaj opcji -NoProfile, takiej jakpowershel -NoProfile -File "myscript.ps1"
Santhos

33

Wypróbowałem powyższe odpowiedzi w systemie Windows Server 2016 bez powodzenia.

Ale stwierdziłem, że to podejście (powinno być takie samo dla Windows 10) działa dla mnie.

  1. Rozpocznij sesję PowerShell
  2. Na pasku zadań kliknij prawym przyciskiem myszy i przypnij, aby zachować łącze
  3. Ponownie kliknij prawym przyciskiem myszy ikonę na pasku zadań, a następnie kliknij prawym przyciskiem myszy Windows PowerShell i wybierz Właściwości
  4. Wprowadź preferowany katalog w polu wejściowym Rozpocznij w: i naciśnij OK
  5. Zacznij od ikony na pasku zadań

Gotowe!

W tym samym oknie dialogowym Właściwości możesz również zmienić wiele innych ustawień, takich jak czcionki, kolory, rozmiary i na karcie Skrót za pomocą przycisku Advanced. Możesz wybrać, czy ta sesja PowerShell ma być uruchamiana z uprawnieniami administratora.


5
Zmiana katalogu roboczego nie wydaje się działać, gdy sprawdzasz Run as administratorw .lnkmenu zaawansowanym. Wydaje się, że rozwiązanie jest tutaj stackoverflow.com/questions/31622469/ ...
Santhos

To dziwne, bo działa tutaj. Właśnie przetestowano, zmieniając katalog i zmieniając Run as aministratorpole wyboru w tę iz powrotem.
neongrau,

Działa czarująco. Dzięki.
Yasser Shaikh

12

Prostszy sposób ustawienia katalogu domyślnego jest następujący:

  1. Kliknij prawym przyciskiem myszy ikonę programu Windows PowerShell i przypnij do menu Start
  2. Kliknij prawym przyciskiem myszy ikonę Windows PowerShell w menu Start i ponownie kliknij prawym przyciskiem myszy Windows PowerShell i wybierz Właściwości (nie Uruchom jako administrator, a nie Windows PowerShell ISE )

    Tutaj wprowadź opis obrazu

    1. Na karcie Skrót -> w polu „Rozpocznij w” zmień lokalizację, w której ma rozpoczynać się program PowerShell.

    Tutaj wprowadź opis obrazu


Och, dziękuję, podoba mi się ta odpowiedź. Pomogło mi zrozumieć, dlaczego i który katalog został ustawiony jako „domyślny”. Myślę, że to rozwiązanie również nieznacznie zmniejsza ogólny koszt czasu ładowania profilu (nie jestem pewien, czy to prawda, czy nie, ale wydaje się, że tak).
Jennings

4

Umieszczenie Set-Locationw swoim profilu bezwarunkowo zmieni bieżący katalog roboczy, co może mieć niepożądane konsekwencje w odniesieniu do katalogu roboczego skryptów, które wykonujesz za pomocą funkcji „uruchom z PowerShell”.

Alternatywnym rozwiązaniem jest zmiana katalogu roboczego dla .lnkplików na PowerShell, który zwykle znajduje się w %USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell. Kliknij łącze prawym przyciskiem myszy i zmień katalog roboczy z %HOMEDRIVE%%HOMEPATH%na żądany katalog.


1
Zmiana katalogu roboczego nie wydaje się działać, gdy sprawdzasz Run as administratorw .lnkmenu zaawansowanym. Wydaje się, że rozwiązanie jest tutaj stackoverflow.com/questions/31622469/ ...
Santhos Kwietnia

To najlepsze rozwiązanie (przynajmniej dla mnie).
Anders Arpi

Dlatego skrypty powinny używać -NoProfileopcji takiej jak powershell -NoProfile -File "myscript.ps1"
Santhos


3

Zamiast bezwarunkowej zmiany katalogu roboczego, jak wspomniano w poprzednich odpowiedziach, możesz napisać prostą funkcję w profilu programu PowerShell, Set-Locationaby szybko zmienić katalog roboczy w razie potrzeby.

Sprawdź odpowiedź Jeremy'ego Danyowa, aby utworzyć / zmodyfikować profil PowerShell.

Dodaj funkcje do swojego profilu PowerShell:

function goto_this {set-location 'your\path\to\some\dir'}
function goto_that {set-location 'your\path to some\dir with space'}

Po prostu zmień nazwę funkcji i wskazany katalog. Używanie cudzysłowów na ścieżce jest obowiązkowe, jeśli zawiera spacje. Staram się zachować przedrostek, goto_ponieważ pomaga zapamiętać nazwy funkcji.

Możesz zacząć pisać, goto_a następnie nacisnąć TAB, aby przejść przez wszystkie dodane funkcje (pamiętaj, aby po dodaniu / zmodyfikowaniu funkcji uruchomić nowe okno PowerShell).


1

Używając tylko wiersza poleceń, jeśli plik już istnieje, zostanie do niego dołączony:

$(if (-Not (Test-Path ~\Documents\WindowsPowerShell\)){ mkdir ~\Documents\WindowsPowerShell\}) ; echo "Set-Location c:\THELOCATIONYOUWANT" >> ~\Documents\WindowsPowerShell\profile.ps1

1

W związku z tym wydaje się, że istnieje pewne zamieszanie dotyczące „katalogu roboczego” i „lokalizacji” programu PowerShell. To, co większość ludzi tutaj robi i mówi do zrobienia, to zmiana „lokalizacji” programu PowerShell. „Katalog roboczy” jest w rzeczywistości inny. Oto artykuł, który to wyjaśnia.

Dla tych, którzy nie chcą czytać artykułu: Otwórz PowerShell i wykorzystaj to, co powiedzieli inni Set-Location "C:\some\directory". Zwróć uwagę, że Twój „katalog roboczy” nadal jest miejscem, w którym otwarto program PowerShell. Albo "~"czy "%SYSTEMROOT%\system32"w zależności czy prowadził jako administrator lub nie. Aby sprawdzić katalog roboczy, użyj [Environment]::CurrentDirectory.

Uwaga: w artykule autor mówi, aby sprawdzić „katalog roboczy” za pomocą tego polecenia:

\[Environment\]::CurrentDirectory

Nie jestem pewien, czy działa to ze starszymi wersjami PowerShell, ale z PowerShell 5 (i nowszymi) musisz użyć [Environment]::CurrentDirectory.


1

Wyjście zapisu "Ustaw położenie C: \" >> $ profile


0

Spraw, aby był to pierwszy wiersz w Twoim Profile.ps1 i PowerShell Core (pwsh) otworzy się w katalogu, w którym aktualnie pracujesz:

set-location (get-location) .path


0

To rozwiązanie ustawia bieżący folder roboczy w lokalizacji, w której znajduje się skrypt. Pamiętaj, aby umieścić go na początku skryptu lub przynajmniej przed próbą użycia polecenia w oparciu o ścieżkę lokalizacji.

Set-Location (Split-Path $MyInvocation.MyCommand.Path)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.