Open Reports > Definitions > Job Step Text Search to find text across the current commands of the jobs you can see in the selected fleet. The search box and operator picker are DevExpress controls. This is a read-only report: it never runs, edits, enables, disables, or saves a job.
Search And Counts
Enter the text, choose an operator, and select Search, or press Enter. Matching is case-insensitive unless Match case is checked. Spaces are significant.
| Operator | Meaning | Example |
|---|---|---|
| Contains | Literal occurrences anywhere in the command | ArchiveDB counts every use. .* is literal in this mode. |
| Starts with | The entire command begins with the text | USE [ArchiveDB] |
| Ends with | The entire command ends with the text | COMMIT; |
| Equals (=) | The whole command equals the text, including spaces/newlines | SELECT 1; |
| Like | Whole-command wildcard match; % or * means any text, _ or ? means one character |
%ArchiveDB% |
| Regex | Non-overlapping .NET regular-expression matches | Archive\w+ or \bSELECT\b |
Contains and Regex count individual occurrences. Starts with, Ends with, Equals, and Like count one matched definition per matching step. Regex ^ and $ anchor individual lines; use \A and \z for the entire command. Like wildcards span line breaks. Regex matches select their actual length in the preview, including zero-length matches when the expression requests them. Invalid expressions show a validation error. Slow expressions time out after 250 ms per match operation and fail the scan instead of presenting partial totals.
Each result is one matching job step. Occurrences counts every non-overlapping use of the string within that step's command text. The summary shows total occurrences, matching steps, matching jobs, and search coverage. For example, if ArchiveDB appears three times in one step and twice in another, the result is 5 occurrences in 2 steps, not just two hits. Searching aa in aaaa counts two occurrences.
The report includes enabled and disabled jobs, all step types with readable command text, and nested/pool-child steps returned by the current-definition API. It does not search old versions, run history, deleted jobs/steps, job names, or separate structured fields such as file-operation paths and SSIS settings. A global step delivered to several jobs counts once per delivered current job-step definition, not once per template.
Inspect A Match
Select a result to see its full authorized command text in the read-only editor below. The preview has line numbers and step-appropriate syntax highlighting, selects the first match, and scrolls to its line. The grid also includes the step name/type, target server, job active state, first matching line, and a short context snippet.
Double-click a result to open its job in the normal job editor. The table supports grouping, sorting, filters, column selection, and the standard table export menu. Search total always means the entire search result, not just the rows remaining after grid filtering. Export uses the grid's current rows and visible columns; match snippets may contain sensitive script text, so handle exported files accordingly. The full command-preview text is not a grid export column.
Coverage And Permissions
The Agent API checks job access first, then evaluates View Hidden Step Code separately for each hidden step before decrypting it. Step-level overrides are included through the existing permission resolver; a job-level allowance is not reused for every step. Public code retains its normal visibility. Hidden-code placeholder messages and decryption-failure messages are never treated as scripts or counted as matches, previews, or exported snippets.
The neutral Coverage status at the top shows readable/searchable steps out of the steps returned, followed by separate counts for hidden by permissions, could not decrypt, and other unavailable. For example, 98 of 100 steps readable/searchable | 2 hidden by permissions | 0 could not decrypt is normal limited coverage, not a failed search. The job counter shows how many visible jobs were successfully read; hover over the coverage status for unavailable job names, if any. Step totals cover only successfully read jobs, because unread jobs have an unknown step count. Jobs not visible to your identity cannot be enumerated by this report. Search totals describe only successfully searched definitions, not a claim that excluded code contains no matches.
Fleet Admin's bypass role grants code-view access, but does not bypass cryptographic validation. DECRYPTION_FAILED_POSSIBLE_TAMPERING means the API could not decrypt a stored command; it does not prove tampering, nor does it mean the caller lacks permission. Possible causes include the wrong/missing original certificate or private-key access, malformed ciphertext, or a command copied from another row whose authenticated context does not match. Restoring the original key/data or re-importing from a verified source may be necessary. The report does not weaken validation, expose hidden code, replace stored commands, or re-encrypt anything automatically.
Refresh And Cancel
The shared refresh icon repeats the search using the current text and case option. Its normal automatic-refresh settings are available on right-click. A scan uses at most four parallel job-detail requests and does not start another scan while one is running. Definitions can change during the scan; the report is a read-time view, not a transactionally frozen database snapshot.
Cancel stops outstanding reads and clears the results rather than presenting partial totals. Leaving the page or switching fleets also cancels the scan and removes its in-memory command preview. No search text, command bodies, or snippets are written to the report's diagnostics; support events contain lifecycle states and numeric counts only. Existing explicitly requested trace screenshots may still capture what is visible on screen.
This feature uses the existing job-list and job-detail endpoints without a database migration. Update both API and Console to include the per-step hidden-code checks and neutral coverage status. This permission correction does not require a Worker update.