2015-07-13 608 views
3

我想使用PowerShell获取计算机上当前正在运行的进程的位置。使用PowerShell获取进程位置路径

C:\Program Files (x86)\Mozilla Firefox 
C:\Windows\sysWOW64\WindowsPowerShell\v1.0 
C:\Program Files (x86)\Internet Explorer 

当我运行命令

$path = Get-Process | Select-Object Path 
Split-Path $path 

我得到下面的输出,这是我不是我想要的。为什么添加@ {Path =

@{Path=C:\Program Files (x86)\Mozilla Firefox 
@{Path=C:\Windows\sysWOW64\WindowsPowerShell\v1.0 
@{Path=C:\Program Files (x86)\Internet Explorer 

当我运行Split-Path如下,它给了我正确的输出C:\Windows\sysWOW64\WindowsPowerShell\v1.0

$pshpath = "C:\Windows\sysWOW64\WindowsPowerShell\v1.0\powershell.exe" 
Split-Path $pshpath 

回答

5
$path = Get-Process | Select-Object Path 

返回对象的数组。数组中的每个对象都具有“路径”属性以及一个可选值。

分离路径的“路径”参数采用“字符串”参数,以便当运行 Split-Path $path

我想每个对象被转换为类型字符串,以便你得到哈希表格式输出。

分离路径可以通过属性名接受来自管道的路径值,所以你可以这样做:

$path | Split-path 

如果你只是想的路径也许你可以尝试:

Get-Process | Select-Object -ExpandProperty Path 
1

获取列表所有路径的只是使用:

ps | % {$_.Path} 

或完整语法:

Get-Process | ForEach-Object {$_.Path} 

使用时:

$path = Get-Process | Select-Object Path 

让我们来看看什么$路径是:

$path | Get-Member 

,你会得到:

TypeName: Selected.System.Diagnostics.Process 

Name  MemberType Definition 
----  ---------- ---------- 
Equals  Method  bool Equals(System.Object obj) 
GetHashCode Method  int GetHashCode() 
GetType  Method  type GetType() 
ToString Method  string ToString() 
Path  NoteProperty System.String Path=C:\windows\system32\atieclxx.exe 

所以路径不是字符串但是NoteProperty,我想这就是为什么你不能直接使用Split-Path