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