Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@ Please note that backwards compatibility breaks are prefixed with `{"BC"}` (shor

Note: Version 2.3.0 was released in error and will be skipped.

## 2026-06-22 - Version 2.7.2

* Fixes:
* Fix request wrapper functions leaking boolean return value from endpoint support checks into the output pipeline, causing cmdlets to return arrays with spurious `$true` as the first element.

## 2026-06-22 - Version 2.7.1

* Fixes:
Expand Down
2 changes: 1 addition & 1 deletion Source/NinjaOne.psd1
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
RootModule = '.\NinjaOne.psm1'

# Version number of this module.
ModuleVersion = '2.7.1'
ModuleVersion = '2.7.2'

# Supported PSEditions
# CompatiblePSEditions = @()
Expand Down
7 changes: 4 additions & 3 deletions Source/Private/New-NinjaOneDELETERequest.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ function New-NinjaOneDELETERequest {
if ($null -eq $Script:NRAPIAuthenticationInformation) {
throw "Missing NinjaOne authentication tokens, please run 'Connect-NinjaOne' first."
}
Test-NinjaOneEndpointSupport -Method 'DELETE' -resource $resource -Verbose:$VerbosePreference
Test-NinjaOneEndpointSupport -Method 'DELETE' -resource $resource -Verbose:$VerbosePreference | Out-Null
try {
if ($QSCollection) {
Write-Verbose ('Query string in New-NinjaOneDELETERequest contains: {0}' -f ($QSCollection | Out-String))
Expand All @@ -54,9 +54,10 @@ function New-NinjaOneDELETERequest {
try {
$Result = Invoke-NinjaOneRequest @WebRequestParams
Write-Verbose ('NinjaOne request returned {0}' -f ($Result | Out-String))
if ($Result.results) {
# Only process object properties if Result is a PSObject or hashtable, not a scalar boolean
if (($Result -is [System.Management.Automation.PSCustomObject] -or $Result -is [hashtable]) -and $Result.results) {
return $Result.results
} elseif ($Result.result) {
} elseif (($Result -is [System.Management.Automation.PSCustomObject] -or $Result -is [hashtable]) -and $Result.result) {
return $Result.result
} else {
return $Result
Expand Down
2 changes: 1 addition & 1 deletion Source/Private/New-NinjaOneGETRequest.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ function New-NinjaOneGETRequest {
if ($null -eq $Script:NRAPIAuthenticationInformation) {
throw "Missing NinjaOne authentication tokens, please run 'Connect-NinjaOne' first."
}
Test-NinjaOneEndpointSupport -Method 'GET' -resource $resource -Verbose:$VerbosePreference
Test-NinjaOneEndpointSupport -Method 'GET' -resource $resource -Verbose:$VerbosePreference | Out-Null
Comment thread
homotechsual marked this conversation as resolved.
try {
if ($qSCollection) {
Write-Verbose ('Query string in New-NinjaOneGETRequest contains: {0}' -f ($qSCollection | Out-String))
Expand Down
2 changes: 1 addition & 1 deletion Source/Private/New-NinjaOnePATCHRequest.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ function New-NinjaOnePATCHRequest {
if ($null -eq $Script:NRAPIAuthenticationInformation) {
throw "Missing NinjaOne authentication tokens, please run 'Connect-NinjaOne' first."
}
Test-NinjaOneEndpointSupport -Method 'PATCH' -resource $resource -Verbose:$VerbosePreference
Test-NinjaOneEndpointSupport -Method 'PATCH' -resource $resource -Verbose:$VerbosePreference | Out-Null
try {
if ($qSCollection) {
Write-Verbose ('Query string in New-NinjaOnePATCHRequest contains: {0}' -f ($qSCollection | Out-String))
Expand Down
2 changes: 1 addition & 1 deletion Source/Private/New-NinjaOnePOSTRequest.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ function New-NinjaOnePOSTRequest {
if ($null -eq $Script:NRAPIAuthenticationInformation) {
throw "Missing NinjaOne authentication tokens, please run 'Connect-NinjaOne' first."
}
Test-NinjaOneEndpointSupport -method 'POST' -resource $resource -Verbose:$VerbosePreference
Test-NinjaOneEndpointSupport -Method 'POST' -resource $resource -Verbose:$VerbosePreference | Out-Null
try {
if ($qSCollection) {
Write-Verbose ('Query string in New-NinjaOnePOSTRequest contains: {0}' -f ($qSCollection | Out-String))
Expand Down
2 changes: 1 addition & 1 deletion Source/Private/New-NinjaOnePUTRequest.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ function New-NinjaOnePUTRequest {
if ($null -eq $Script:NRAPIAuthenticationInformation) {
throw "Missing NinjaOne authentication tokens, please run 'Connect-NinjaOne' first."
}
Test-NinjaOneEndpointSupport -Method 'PUT' -resource $resource -Verbose:$VerbosePreference
Test-NinjaOneEndpointSupport -Method 'PUT' -resource $resource -Verbose:$VerbosePreference | Out-Null
try {
if ($qSCollection) {
Write-Verbose ('Query string in New-NinjaOnePUTRequest contains: {0}' -f ($qSCollection | Out-String))
Expand Down
14 changes: 14 additions & 0 deletions Tests/NinjaOne.Private.Tests.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -1288,6 +1288,20 @@ Describe 'New-NinjaOneGETRequest' {
Assert-MockCalled -CommandName Test-NinjaOneEndpointSupport -ModuleName $ModuleName -Times 1 -ParameterFilter { $Method -eq 'GET' -and $resource -eq '/v2/organizations' }
}

It 'should not leak endpoint support output into the request result' {
Mock -CommandName Test-NinjaOneEndpointSupport -ModuleName $ModuleName -MockWith { $true }
Mock -CommandName Invoke-NinjaOneRequest -ModuleName $ModuleName -MockWith {
[pscustomobject]@{ result = [pscustomobject]@{ id = 42 } }
}

$module = Get-Module -Name $ModuleName
& $module {
$result = @(New-NinjaOneGETRequest -Resource '/v2/organizations')
$result.Count | Should -Be 1
$result[0].id | Should -Be 42
}
}

It 'should return the results property when present' {
Mock -CommandName Invoke-NinjaOneRequest -ModuleName $ModuleName -MockWith {
[pscustomobject]@{ results = @('a', 'b') }
Expand Down
Loading