Question Analysis
On a Windows device, PowerShell was used to collect a snapshot of running processes. Identify the exact cmdlet that was executed.
3b3809b6-a54b-4f5b-8aff-cb51f2e97b34
Question ID
19/23
Models Correct
1
Valid Answer
83%
Success Rate
Reference Answer
Human-validated correct answer for this question
Get-Process
Model Performance Comparison
See how different AI models performed on this question
Model | Answer | KQL Query | Status | Attempts | Time | Cost |
---|---|---|---|---|---|---|
gemini-2.5-flash-preview-04-17 | Get-Process | DeviceProcessEvents
| where FileName == "powershell.exe"
| where ActionType == "ProcessCreated"
| where ProcessCommandLine contains "Get-Process"
| distinct ProcessCommandLine | Correct | 1 | 32.65s | 0.0034 |
gpt-35-turbo | Invoke-AtomicTest | DeviceProcessEvents | where ActionType == 'ProcessCreated' and ProcessCommandLine contains 'Get-Process' | Incorrect | 1 | 2.00s | 0.0047 |
gpt-4-turbo-2024-04-09 | Get-Process | DeviceProcessEvents
| where FileName == 'powershell.exe' and (ProcessCommandLine contains 'Get-Process' or ProcessCommandLine contains 'ps')
| project DeviceId, DeviceName, ProcessCommandLine, TimeGenerated
| limit 50 | Correct | 1 | 12.28s | 0.1460 |
gpt-4.1 | Get-Process | DeviceProcessEvents
| where FileName in~ ('powershell.exe', 'pwsh.exe')
| where ProcessCommandLine has_any ("Get-Process", "gps", "ps ")
| project TimeGenerated, DeviceName, AccountName, ProcessCommandLine | Correct | 1 | 5.09s | 0.0127 |
gpt-4.1-finetuned | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0487 |
gpt-4.1-mini | Get-Process | DeviceProcessEvents
| where FileName in ("powershell.exe", "pwsh.exe")
| where ProcessCommandLine has_any ("Get-Process", "Get-CimInstance", "Get-WmiObject", "Get-Process -Name", "Get-Process |", "Get-CimInstance Win32_Process", "Get-WmiObject Win32_Process")
| project TimeGenerated, DeviceName, InitiatingProcessAccountName, ProcessCommandLine
| summarize count() by ProcessCommandLine
| top 10 by count_ desc | Correct | 1 | 12.41s | 0.0025 |
gpt-4.1-nano | Get-Process | DeviceProcessEvents
| where ProcessCommandLine contains "powershell" or FileName endswith ".exe"
| where ProcessCommandLine contains "Get-Process"
| project TimeGenerated, DeviceName, ProcessCommandLine
| order by TimeGenerated desc
| take 10 | Correct | 2 | 6.96s | 0.0007 |
gpt-4o | Get-NetTCPConnection | DeviceProcessEvents
| where InitiatingProcessCommandLine contains "powershell" and InitiatingProcessCommandLine contains "Get-Process"
| project DeviceId, DeviceName, InitiatingProcessCommandLine, TimeGenerated | Incorrect | 1 | 3.12s | 0.0144 |
gpt-5-high | Get-Process | let process_cmdlet_pattern = @"(?i)\b(get-process|get-wmiobject|get-ciminstance|get-ciminstance|gwmi|gcim|gps|ps)\b";
union isfuzzy=true
(
DeviceEvents
| where ActionType has "PowerShell"
| extend CmdText = tostring(coalesce(AdditionalFields.Command, AdditionalFields.ScriptLine, AdditionalFields.ScriptBlockText, AdditionalFields.ScriptContent, AdditionalFields.Message, AdditionalFields.Content, AdditionalFields.AmsiContent))
| where isnotempty(CmdText)
| where CmdText matches regex process_cmdlet_pattern or CmdText has_cs "Win32_Process"
| extend ExecutedToken = tostring(extract(process_cmdlet_pattern, 1, CmdText))
| extend CanonicalCmdlet = case(
tolower(ExecutedToken) in ("gps","ps"), "Get-Process",
tolower(ExecutedToken) in ("gwmi","get-wmiobject"), "Get-WmiObject",
tolower(ExecutedToken) in ("gcim","get-ciminstance","get-ciminstance"), "Get-CimInstance",
tolower(ExecutedToken) == "get-process", "Get-Process",
ExecutedToken)
| project TimeGenerated, DeviceId, DeviceName, AccountDomain, AccountName, ActionType, Source = "PowerShellEvent", ExecutedToken, CanonicalCmdlet, CmdText
),
(
DeviceProcessEvents
| where FileName in~ ("powershell.exe","pwsh.exe","powershell_ise.exe")
| where isnotempty(ProcessCommandLine)
| where ProcessCommandLine matches regex process_cmdlet_pattern or ProcessCommandLine has_cs "Win32_Process"
| extend CmdText = ProcessCommandLine
| extend ExecutedToken = tostring(extract(process_cmdlet_pattern, 1, CmdText))
| extend CanonicalCmdlet = case(
tolower(ExecutedToken) in ("gps","ps"), "Get-Process",
tolower(ExecutedToken) in ("gwmi","get-wmiobject"), "Get-WmiObject",
tolower(ExecutedToken) in ("gcim","get-ciminstance","get-ciminstance"), "Get-CimInstance",
tolower(ExecutedToken) == "get-process", "Get-Process",
ExecutedToken)
| project TimeGenerated, DeviceId, DeviceName, AccountDomain, AccountName, ActionType, Source = "ProcessCreate", ExecutedToken, CanonicalCmdlet, CmdText
)
| where isnotempty(ExecutedToken)
| order by TimeGenerated desc | Correct | 1 | 111.12s | 0.0532 |
gpt-5-mini-high | Get-Process | let CmdletRegex = @"(?i)\b((?:get-process|get-wmiobject|get-ciminstance|gwmi|tasklist(?:\.exe)?|\bGet-Process\b|\bGet-WmiObject\b|\bGet-CimInstance\b|\bgwmi\b|\btasklist\b|\bwin32_process\b)[^;|&\r\n]*)";
union isfuzzy=true DeviceProcessEvents, DeviceEvents, DeviceFileEvents, DeviceImageLoadEvents, DeviceRegistryEvents
| extend CmdLine = coalesce(ProcessCommandLine, InitiatingProcessCommandLine, tostring(AdditionalFields.CommandLine), tostring(AdditionalFields.commandline), tostring(AdditionalFields.CommandLineText))
| where isnotempty(CmdLine) and CmdLine has_cs "powershell"
| where CmdLine matches regex CmdletRegex
| extend MatchedCmd = extract(CmdletRegex, 1, CmdLine)
| summarize Count = count(), FirstSeen = min(TimeGenerated), LastSeen = max(TimeGenerated), ExampleCmd = any(MatchedCmd), ExampleFullCmd = any(CmdLine) by DeviceName, AccountName, FileName, ProcessId, ReportId
| sort by LastSeen desc
| project FirstSeen, LastSeen, Count, DeviceName, AccountName, FileName, ProcessId, ReportId, ExampleCmd, ExampleFullCmd
| take 1000 | Correct | 3 | 45.11s | 0.0114 |
gpt-5-mini-low | Get-Process | // Find PowerShell invocations that include process listing cmdlets
let powershellBinaries = dynamic(["powershell.exe","pwsh.exe","powershell_ise.exe","powershell" ,"pwsh"]);
let processCmdPatterns = dynamic(["Get-Process","Get-Process\\b","Get-CimInstance\\b","Get-CimInstance","Get-WmiObject\\b","Get-WmiObject","gwmi\\b","gwmi","Get-WmiObject -Class Win32_Process","Get-CimInstance -ClassName Win32_Process","tasklist","Get-Process | Sort-Object","Get-Process -" ]);
union isfuzzy=true DeviceEvents, DeviceProcessEvents
| where TimeGenerated between (startofday(ago(7d)) .. now())
// filter for PowerShell executables as the initiating process or file name
| where tolower(InitiatingProcessFileName) has_any ("powershell","pwsh") or tolower(FileName) has_any ("powershell","pwsh") or tolower(ProcessCommandLine) contains "powershell" or tolower(InitiatingProcessCommandLine) contains "powershell" or tolower(ProcessCommandLine) contains "pwsh" or tolower(InitiatingProcessCommandLine) contains "pwsh"
// combine commandline fields
| extend cmd = coalesce(InitiatingProcessCommandLine, ProcessCommandLine, AdditionalFields.CommandLine, tostring(AdditionalFields.CommandLine))
| where isnotempty(cmd)
// search for known process-listing cmdlets/strings
| where cmd matches regex @"(?i)\b(Get-Process|Get-CimInstance|Get-WmiObject|gwmi|tasklist)\b" or cmd contains "Win32_Process"
| project TimeGenerated, DeviceName, AccountName, InitiatingProcessFileName, InitiatingProcessId, InitiatingProcessCommandLine, ProcessId, ProcessCommandLine, cmd, FileName, ActionType
| extend MatchedCmdlet = extract(@"(?i)\b(Get-Process|Get-CimInstance|Get-WmiObject|gwmi|tasklist)\b", 1, cmd)
| summarize Events = count(), AnyCommandLines = make_set(cmd, 50) by DeviceName, AccountName, MatchedCmdlet
| order by Events desc
| mv-expand AnyCommandLines
| project DeviceName, AccountName, MatchedCmdlet, AnyCommandLines
| top 100 by DeviceName
| Correct | 1 | 14.35s | 0.0037 |
gpt-5-mini-medium | Get-Process | (
DeviceEvents
| where FileName has_cs "powershell" or InitiatingProcessFileName has_cs "powershell" or FileName has_cs "pwsh" or InitiatingProcessFileName has_cs "pwsh"
| where ProcessCommandLine has_any ("Get-Process","Get-CimInstance","Get-WmiObject","gwmi","Get-Process","get-process","Get-Process |","ps ","tasklist")
| project TimeGenerated, DeviceName, AccountName, FileName, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine, ActionType
)
| union (
DeviceProcessEvents
| where FileName has_cs "powershell" or InitiatingProcessFileName has_cs "powershell" or FileName has_cs "pwsh" or InitiatingProcessFileName has_cs "pwsh"
| where ProcessCommandLine has_any ("Get-Process","Get-CimInstance","Get-WmiObject","gwmi","Get-Process","get-process","Get-Process |","ps ","tasklist")
| project TimeGenerated, DeviceName, AccountName, FileName, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine = InitiatingProcessCommandLine, ActionType
)
| sort by TimeGenerated desc
| extend Cmdlet = coalesce(ProcessCommandLine, InitiatingProcessCommandLine)
| summarize Count = count(), FirstSeen = min(TimeGenerated), LastSeen = max(TimeGenerated), Devices = make_set(DeviceName, 10), Accounts = make_set(AccountName, 10), Examples = make_set(Cmdlet, 5) by Cmdlet
| project Cmdlet, Count, FirstSeen, LastSeen, Devices, Accounts, Examples
| top 50 by LastSeen desc | Correct | 1 | 13.68s | 0.0041 |
gpt-5-nano-high | Get-Process | DeviceProcessEvents
| where tolower(InitiatingProcessFileName) contains 'powershell' or tolower(InitiatingProcessFileName) contains 'powershell.exe'
| where InitiatingProcessCommandLine contains_cs 'Get-Process'
| extend Cmdlet = iff(InitiatingProcessCommandLine contains_cs 'Get-Process', 'Get-Process', '')
| where Cmdlet != ''
| project TimeGenerated, InitiatingProcessCreationTime, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, Cmdlet | Correct | 1 | 27.93s | 0.0016 |
gpt-5-nano-medium | Get-Process | let psExes = dynamic(["powershell.exe","pwsh.exe"]);
DeviceProcessEvents
| where InitiatingProcessFileName in (psExes)
| where isnotempty(InitiatingProcessCommandLine)
| where tolower(InitiatingProcessCommandLine) contains "get-process"
| extend CmdletDetected = "Get-Process"
| project TimeGenerated, DeviceName, DeviceId, InitiatingProcessId, InitiatingProcessFileName, InitiatingProcessCommandLine, CmdletDetected | Correct | 1 | 20.97s | 0.0017 |
grok-3-beta | Get-Process | DeviceProcessEvents
| where InitiatingProcessFileName =~ 'powershell.exe'
| where InitiatingProcessCommandLine contains 'Get-Process'
| project Timestamp, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, ProcessCommandLine
| order by Timestamp desc | Correct | 1 | 8.78s | 0.0208 |
grok-3-mini-beta | Get-Process | DeviceProcessEvents
| where InitiatingProcessFileName =~ 'powershell.exe'
| where ProcessCommandLine contains 'Get-Process'
| project ProcessCommandLine, Timestamp
| distinct ProcessCommandLine | Correct | 1 | 11.84s | 0.0016 |
o1-high | Get-Process | DeviceProcessEvents
| where FileName in~ ("powershell.exe", "pwsh.exe", "powershell_ise.exe")
| where ProcessCommandLine has_any ("Get-Process", "Get-WmiObject", "Get-CimInstance")
| project TimeGenerated, DeviceName, AccountName, ProcessCommandLine, InitiatingProcessCommandLine, FolderPath
| order by TimeGenerated desc | Correct | 1 | 59.20s | 0.2979 |
o1-low | Get-Process | DeviceProcessEvents
| where ActionType == "ProcessCreated"
| where Timestamp >= ago(30d)
| where InitiatingProcessCommandLine contains "powershell" or ProcessCommandLine contains "powershell"
| where InitiatingProcessCommandLine has "get-process" or ProcessCommandLine has "get-process"
| project TimeGenerated, DeviceName, InitiatingProcessCommandLine, ProcessCommandLine | Correct | 1 | 25.71s | 0.2066 |
o3-high | Get-Process | // PowerShell process enumeration detection – what exact cmdlet was used?
DeviceProcessEvents
// 1. Focus on PowerShell hosts
| where FileName in~ ("powershell.exe", "pwsh.exe", "powershell_ise.exe")
// 2. Keep only invocations that attempt to list running processes
| where ProcessCommandLine has_any ("Get-Process", // standard cmdlet
"Get-CimInstance",
"Get-WmiObject",
"gwmi", // aliases for Get-WmiObject
"gps", "ps") // aliases for Get-Process
// 3. Extract the first matching process-listing cmdlet / alias
| extend CmdletExecuted = tolower(extract(@"(?i)(get-process|get-ciminstance|get-wmiobject|gwmi|gps|ps)", 1, ProcessCommandLine))
// 4. Normalise common aliases to their canonical cmdlet names
| extend CmdletExecuted = case(CmdletExecuted == "ps" or CmdletExecuted == "gps", "get-process",
CmdletExecuted == "gwmi", "get-wmiobject",
CmdletExecuted)
// 5. Return context so the analyst can validate the finding
| project TimeGenerated,
DeviceName,
AccountName,
CmdletExecuted,
ProcessCommandLine,
FolderPath,
ProcessId,
InitiatingProcessCommandLine
| order by TimeGenerated desc | Correct | 1 | 35.81s | 0.0262 |
o3-mini-high | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0410 |
o3-mini-low | Get-Process | DeviceProcessEvents
| where FileName =~ "powershell.exe"
| where ProcessCommandLine has "Get-Process"
| project TimeGenerated, DeviceName, FileName, ProcessCommandLine
| sort by TimeGenerated desc | Correct | 1 | 56.71s | 0.0126 |
o4-mini-high | Get-Process | DeviceProcessEvents
| where FileName == "powershell.exe"
| where ProcessCommandLine contains "Get-Process"
or ProcessCommandLine contains "Get-WmiObject"
or ProcessCommandLine contains "Get-CimInstance"
or ProcessCommandLine contains "tasklist"
| extend Cmdlet = extract(@"(?i)\b(Get-(?:Process|WmiObject|CimInstance))\b", 1, ProcessCommandLine)
| project TimeGenerated, DeviceName, InitiatingProcessAccountName, Cmdlet, ProcessCommandLine
| sort by TimeGenerated desc | Correct | 1 | 44.50s | 0.0165 |
o4-mini-low | Get-Process | DeviceProcessEvents
| where FileName == "powershell.exe"
| where ProcessCommandLine has_any ("Get-Process", "gps")
| extend ScriptBlockText = tostring(AdditionalFields.ScriptBlockText)
| project TimeGenerated, DeviceName, InitiatingProcessAccountName, ProcessCommandLine, ScriptBlockText
| order by TimeGenerated desc | Correct | 1 | 29.42s | 0.0078 |