IntuneScriptLab
0.33.0
Test Intune scripts before Intune does: static rules, a runtime harness, Pester assertions, a Graph
pre-flight over the tenant's deployed scripts and readers for the agent's logs
Minimum PowerShell version
5.1
Installation Options
Owners
Copyright
(c) 2026 Jeffrey Stuhr. All rights reserved.
Package Details
Author(s)
- Jeffrey Stuhr
Tags
Intune Remediation Win32 PSScriptAnalyzer Lint Endpoint Pester
Functions
Test-IntuneScript Invoke-IntuneDetectionTest Invoke-IntuneRemediationTest Invoke-IntunePlatformScriptTest Invoke-IntuneWin32AppTest Invoke-IntuneRequirementTest Test-IntuneWin32Rule Test-IntuneWin32Requirement Get-IntuneAgentLog Get-IntuneAgentTimeline Export-IntuneAgentDiagnostic Get-IntuneAnalyzerRulePath Test-IntuneDeployedScript Compare-IntuneDeployedScript Get-IntuneScriptHealth Export-IntuneFindingSarif Repair-IntuneScript Test-IntuneAssignmentFilter Assert-HaveIntuneStatus Assert-BeIntuneDetected Assert-NotBeIntuneDetected Assert-HaveIntuneRunState Assert-PassIntuneAnalysis Assert-BeIntuneApplicable Assert-NotBeIntuneApplicable
PSEditions
Dependencies
This module has no dependencies.
Release Notes
0.33.0 - The CI pieces, after a run against a repository laid out the way the templates describe.
The gate script no longer analyzes a Pester suite next to the scripts or the contents of a
Win32 app's Package folder, both of which the suite template puts there and both of which
failed a build at -FailOn Warning for findings that do not apply to them; its GitHub
annotations percent-encode the file and title values as well as the message.
Export-IntuneFindingSarif describes the assignment, filter and schedule rules, gives a
mixed-severity rule the level of its worst finding, and writes a policy check, which has no
script behind it, as a result without a location instead of throwing. The workflow template
uses checkout@v7 and upload-sarif@v4; the suite template names its static tests by package
and runs the device's own 64-bit host, so it works on Windows on ARM. See CHANGELOG.md.
0.32.0 - Get-IntuneAgentTimeline read Kind as Unknown for a policy whose lines all sat in a rolled
log file (HealthScripts-20260925-101500 lost only its time part); it reads Remediation or
Win32App like one from the current file. The Policy column of the health report and drift
tables is 40 characters wide, so a long policy name stays on one line. The README's log
blocks show the Agent abbreviation and the list form of the diagnostic result. See
CHANGELOG.md.
0.31.0 - Assignment filter messages. The parser warns about a -contains value that is only
whitespace, which the service trims to nothing so the clause matches every device; a double
quote inside a value is refused with a message saying no escape exists and that -contains
or -startsWith on the parts around it is the way through. In exclude mode,
Test-IntuneAssignmentFilter and Test-IntuneDeployedScript say what a warning means for the
assignment: a clause that never matches excludes nobody, so the assignment reaches every
device in the group. The tenant-wide help example keeps to Windows filters. See
CHANGELOG.md.
Earlier versions, 0.1.0 to 0.30.0: CHANGELOG.md, which ships with the module.
FileList
- IntuneScriptLab.nuspec
- CHANGELOG.md
- Private\Get-IslCoreOnlyFeature.ps1
- Private\Invoke-IslProcess.ps1
- Public\Test-IntuneAssignmentFilter.ps1
- IntuneScriptLab.Format.ps1xml
- Private\Get-IslDesktopModulePath.ps1
- Private\Invoke-IslScriptRun.ps1
- Public\Test-IntuneDeployedScript.ps1
- Private\Get-IslDeviceFact.ps1
- Private\New-IslFinding.ps1
- Public\Test-IntuneScript.ps1
- IntuneScriptLab.psd1
- Private\Get-IslDsregStatus.ps1
- Private\Resolve-IslAccount.ps1
- Public\Test-IntuneWin32Requirement.ps1
- IntuneScriptLab.psm1
- Private\Get-IslExportReport.ps1
- Private\Resolve-IslRulePath.ps1
- Public\Test-IntuneWin32Rule.ps1
- LICENSE
- Private\Get-IslFilterDeviceFact.ps1
- PSScriptAnalyzer\IntuneScriptLab.Rules.psm1
- Private\Rules\Find-IslArchitectureIssue.ps1
- README.md
- Private\Get-IslFilterProperty.ps1
- Public\Assert-IntuneResult.ps1
- Private\Rules\Find-IslArm64Assumption.ps1
- en-US\about_IntuneScriptLab.help.txt
- Private\Get-IslFilterWarningMessage.ps1
- Public\Compare-IntuneDeployedScript.ps1
- Private\Rules\Find-IslContextIssue.ps1
- en-US\IntuneScriptLab-Help.xml
- Private\Get-IslHostArchitecture.ps1
- Public\Export-IntuneAgentDiagnostic.ps1
- Private\Rules\Find-IslEncodingIssue.ps1
- Examples\intune-script-gate.yml
- Private\Get-IslHostPath.ps1
- Public\Export-IntuneFindingSarif.ps1
- Private\Rules\Find-IslExecutionPolicyCall.ps1
- Examples\IntuneScriptLab.settings.psd1
- Private\Get-IslInboxModule.ps1
- Public\Get-IntuneAgentLog.ps1
- Private\Rules\Find-IslExitCodeIssue.ps1
- Examples\IntuneScripts.Tests.ps1.template
- Private\Get-IslIntuneOutput.ps1
- Public\Get-IntuneAgentTimeline.ps1
- Private\Rules\Find-IslInteractiveCall.ps1
- Examples\Invoke-IntuneScriptGate.ps1
- Private\Get-IslLogonSession.ps1
- Public\Get-IntuneAnalyzerRulePath.ps1
- Private\Rules\Find-IslLongSleep.ps1
- Private\Compare-IslRequirementOutput.ps1
- Private\Get-IslMsiProduct.ps1
- Public\Get-IntuneScriptHealth.ps1
- Private\Rules\Find-IslModuleDependency.ps1
- Private\Compare-IslRuleValue.ps1
- Private\Get-IslOemEncoding.ps1
- Public\Invoke-IntuneDetectionTest.ps1
- Private\Rules\Find-IslOutputIssue.ps1
- Private\ConvertFrom-IslCmTraceLog.ps1
- Private\Get-IslScriptContext.ps1
- Public\Invoke-IntunePlatformScriptTest.ps1
- Private\Rules\Find-IslPowerShell7Syntax.ps1
- Private\ConvertFrom-IslFilterRule.ps1
- Private\Get-IslSetting.ps1
- Public\Invoke-IntuneRemediationTest.ps1
- Private\Rules\Find-IslRebootCommand.ps1
- Private\ConvertFrom-IslRuleSpec.ps1
- Private\Get-IslSuppression.ps1
- Public\Invoke-IntuneRequirementTest.ps1
- Private\Rules\Find-IslRelativePath.ps1
- Private\ConvertTo-IslCmTraceTime.ps1
- Private\Get-IslWindowsReleaseBuild.ps1
- Public\Invoke-IntuneWin32AppTest.ps1
- Private\Rules\Find-IslScriptSize.ps1
- Private\Find-IslAstNode.ps1
- Private\Grant-IslFolderAccess.ps1
- Public\Repair-IntuneScript.ps1
- Private\Rules\Find-IslSignatureIssue.ps1
- Private\Get-IslAgentLogEvent.ps1
- Private\Invoke-IslGraphRequest.ps1