Ś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.

jjoras
źródło
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 \
doobop
źródło
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 ...

Simon B.
źródło
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
Nathan Hartley
źródło
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ść.

ravikanth
źródło
2
% SystemRoot% \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe. W przypadku, gdy SystemRoot nie jest „C: \ Windows”
Matthew