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
$path = Get-Process | Select-Object Path
オブジェクトの配列を返します。配列内の各オブジェクトには、オプションの値とともにプロパティ「パス」があります。
Split-pathの「path」パラメータは「string」引数を取るので、Split-Path $path
を実行すると
各オブジェクトが文字列型に変換されているので、ハッシュテーブル形式の出力が得られると思います。
split-pathは、パイプラインからプロパティ名でパス値を受け入れることができるため、次のことができます。
$path | Split-path
パスが必要な場合は、次のことを試してみてください。
Get-Process | Select-Object -ExpandProperty Path
すべてのパスのリストを取得するには、次を使用します。
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
を直接使用することはできません。