Ścieżka do programu Powershell.exe (wersja 2.0)


114

Gdzie znajduje się Powershell (wersja 2.0)? Jaka jest ścieżka do programu Powershell.exe? Mam zainstalowany system Windows Server 2008 i Powershell. Kiedy patrzę na ten folder:

PS C:\Windows\System32\WindowsPowerShell> dir


    Directory: C:\Windows\System32\WindowsPowerShell


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----         20.4.2010     17:09            v1.0

Mam tylko Powershell v1.0. Ale kiedy piszę

PS C:\> $Host.version

Major  Minor  Build  Revision
-----  -----  -----  --------
2      0      -1     -1


PS C:\>

Pokazuje, że mam zainstalowaną wersję 2.0.


8
„Wersja 1.0”, którą widzisz powyżej, to tylko nazwa katalogu, a nie rzeczywisty numer wersji.
— doobop

Wystarczy spojrzeć na lokalizację docelową linku PowerShell
— oxfn

Odpowiedzi:


171

Wierzę, że to jest C:\Windows\System32\WindowsPowershell\v1.0\. Aby zmylić niewinnych, MS trzymało go w katalogu oznaczonym „v1.0”. Uruchomienie tego w systemie Windows 7 i sprawdzenie numeru wersji za pomocą $Host.Version( Określ zainstalowaną wersję PowerShell ) pokazuje, że jest to 2.0.

Inną opcją jest wpisanie $PSVersionTablew wierszu polecenia. Jeśli używasz wersji 2.0, wynik będzie następujący:

Name                           Value
----                           -----
CLRVersion                     2.0.50727.4927
BuildVersion                   6.1.7600.16385
PSVersion                      2.0
WSManStackVersion              2.0
PSCompatibleVersions           {1.0, 2.0}
SerializationVersion           1.1.0.1
PSRemotingProtocolVersion      2.1

Jeśli używasz wersji 1.0, zmienna nie istnieje i nie będzie żadnych danych wyjściowych.

Lokalizacja PowerShell w wersji 1.0, 2.0, 3.0, 4.0:

  • Wersja 64-bitowa: C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \
  • Wersja 32-bitowa: C: \ Windows \ SysWOW64 \ WindowsPowerShell \ v1.0 \

1
Może był to przypadek zakodowanych ścieżek, z którymi chcieli zachować zgodność? Microsoft to Microsoft
— Tiago Leite

6
Jednym z moich ulubionych cytatów będzie „Aby zmylić niewinnych”.
— simlev

48

Myślę, że $ PsHome ma informacje, których szukasz?

PS.> $ PsHome
C: \ Windows \ System32 \ WindowsPowerShell \ v1.0

PS.> Uzyskaj pomoc about_automatic_variables

TEMAT
    about_Automatic_Variables ...


29

Oto jeden sposób ...

(Get-Process powershell | select -First 1).Path

Oto prawdopodobnie lepszy sposób, ponieważ zwraca pierwsze trafienie na ścieżce, tak jak gdybyś uruchomił Powershell z wiersza poleceń ...

(Get-Command powershell.exe).Definition

3
Jeśli o mnie chodzi, jest to lepsza odpowiedź niż ta, w której głosowano obecnie do 35. Pierwotne pytanie wydawało się dotyczyć ścieżki do pliku wykonywalnego, a informacje o wersji były przypadkowe. Ta odpowiedź bezpośrednio odnosi się do tego pytania, pomijając nawet odpowiedź „rzekomo być” i pozwalając osobie dowiedzieć się, gdzie dokładnie znajduje się exe w jej własnym systemie, nawet jeśli ten system różni się od domyślnego. (Właśnie tego szukałem, więc doceniam to.)
— Todd Walton,

Wyszukiwanie na podstawie istoty wykonywalnej powershell.exejest trochę zbyt luźne, ponieważ można łatwo zmienić nazwę innego pliku wykonywalnego na powershell.exei zamiast tego wybrać ten proces. Get-Process -Id $PIDzadziała, chociaż nie jestem pewien, która wersja $PIDzostała wprowadzona.
— Charles Grunwald

Widzę twój "zbyt zrelaksowany" punkt, jednak użycie $ PID zwróci aktualnego hosta, który może nie być interpreterem Powershell. Na przykład jak Powershell_ise.exe.
— Nathan Hartley

być może od listopada 2011 zmieniły się właściwości. Dla mnie (w lipcu 2016 r. W systemie Windows Server 2012) właściwość .Source nie istnieje. Zamiast tego mogę użyć właściwości .Definition, która zwraca: „C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe” . Moja zmienna $ PSHome zawiera: „C: \ Windows \ System32 \ WindowsPowerShell \ v1.0” Ponadto, jeśli używasz get-process, rozważ użycie „PowerShell *” zamiast tylko PowerShell, na wypadek gdybyś korzystał z powershell_ise. HTH
— Marcelo Finki

Zmieniono odpowiedź z używania .Source na .Definition.
— Nathan Hartley

12

Zawsze jest to C: \ Windows \ System32 \ WindowsPowershell \ v1.0. Zostało tak, ponieważ gdzieś słyszałem lub czytałem wsteczną kompatybilność.


2
% SystemRoot% \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe. W przypadku, gdy SystemRoot nie jest „C: \ Windows”
— Matthew
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.