Create a gist now

Instantly share code, notes, and snippets.

Embed
What would you like to do?
プロセスのコマンドラインを取得する関数
<#
.SYNOPSIS
Get the command line of a process.
#>
function Get-ProcessCommandline {
[CmdletBinding()]
param (
[Parameter(Mandatory = $true)]
[int]$Id
)
if ($Id -lt 0) {
return ""
}
# Windows PowerShell
if ($null -eq $PSEdition -or "Desktop" -eq $PSEdition) {
$proc = Get-WmiObject -Class Win32_Process -Filter "ProcessId = $Id" -Property "ProcessId", "CommandLine"
if ($null -eq $proc) {
return ""
}
return $proc.CommandLine
}
# PowerShell Core on Windows
if ($IsWindows) {
$proc = Get-CimInstance -Class Win32_Process -Filter "ProcessId = $Id" -Property "ProcessId", "CommandLine"
if ($null -eq $proc) {
return ""
}
return $proc.CommandLine
}
# PowerShell Core on macOS
if ($IsMacOS) {
return (/bin/ps -o command= -p $Id)
}
# PowerShell Core on Linux
if (-not (Test-Path -LiteralPath "/proc/$Id")) {
return ""
}
return @(Get-Content -LiteralPath "/proc/$Id/cmdline")[0] -replace "\0", " "
}
# 実行例
Get-Process | ForEach-Object {
[PSCustomObject]@{
Name = $_.Name;
CommandLine = (Get-ProcessCommandline -Id $_.Id);
}
} | Format-List
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment