web-dev-qa-db-ja.com

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
7
Ishan
$path = Get-Process | Select-Object Path

オブジェクトの配列を返します。配列内の各オブジェクトには、オプションの値とともにプロパティ「パス」があります。

Split-pathの「path」パラメータは「string」引数を取るので、Split-Path $pathを実行すると

各オブジェクトが文字列型に変換されているので、ハッシュテーブル形式の出力が得られると思います。

split-pathは、パイプラインからプロパティ名でパス値を受け入れることができるため、次のことができます。

 $path | Split-path

パスが必要な場合は、次のことを試してみてください。

Get-Process | Select-Object -ExpandProperty Path
13
Kiran

すべてのパスのリストを取得するには、次を使用します。

ps | % {$_.Path}

または完全な構文:

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

使用時:

$path = Get-Process | Select-Object Path

$ 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

したがって、PathはStringではなくNotePropertyです。そのため、Split-Pathを直接使用することはできません。

5
Peter Hahndorf