Skip to content

Commit d2e4017

Browse files
givinalisGivinalis Omachar
andauthored
Introducing new filter parameters to Get-EntraDevice and Get-EntraBetaDevice (#1565)
* added changes to Get-EntraDevice * added tests for Get-EntraDevice * Updated Documentation for Get-EntraDevice * added parameters to get-entrabetadevice * added tests for get-entrabetadevice * updated docs for get-entrabetadevice * updated parameter sets * updated beta tests * updated docs * updated switch check --------- Co-authored-by: Givinalis Omachar <[email protected]>
1 parent a8bda12 commit d2e4017

File tree

6 files changed

+760
-3
lines changed

6 files changed

+760
-3
lines changed

module/Entra/Microsoft.Entra/DirectoryManagement/Get-EntraDevice.ps1

Lines changed: 74 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,35 @@ function Get-EntraDevice {
1818

1919
[Parameter(ParameterSetName = "GetVague", ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
2020
[System.String] $SearchString,
21+
2122
[Alias('ObjectId')]
2223
[Parameter(ParameterSetName = "GetById", Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
2324
[System.String] $DeviceId,
25+
2426
[Parameter(Mandatory = $false, ValueFromPipeline = $false, ValueFromPipelineByPropertyName = $true)]
2527
[Alias("Select")]
26-
[System.String[]] $Property
28+
[System.String[]] $Property,
29+
30+
[Parameter(ParameterSetName = "GetQuery", Mandatory = $false, ValueFromPipeline = $false, ValueFromPipelineByPropertyName = $true, HelpMessage = "Filter devices with last sign-in before a specified date.")]
31+
[Parameter(ParameterSetName = "GetVague", Mandatory = $false, ValueFromPipeline = $false, ValueFromPipelineByPropertyName = $true, HelpMessage = "Filter devices with last sign-in before a specified date.")]
32+
[DateTime] $LogonTimeBefore,
33+
34+
[Parameter(ParameterSetName = "GetQuery", Mandatory = $false, ValueFromPipeline = $false, ValueFromPipelineByPropertyName = $true, HelpMessage = "Filter devices that haven't signed in for 2 months or more.")]
35+
[Parameter(ParameterSetName = "GetVague", Mandatory = $false, ValueFromPipeline = $false, ValueFromPipelineByPropertyName = $true, HelpMessage = "Filter devices that haven't signed in for 2 months or more.")]
36+
[Switch] $Stale,
37+
38+
[Parameter(ParameterSetName = "GetQuery", Mandatory = $false, ValueFromPipeline = $false, ValueFromPipelineByPropertyName = $true, HelpMessage = "Filter devices that are not compliant with organizational policies.")]
39+
[Parameter(ParameterSetName = "GetVague", Mandatory = $false, ValueFromPipeline = $false, ValueFromPipelineByPropertyName = $true, HelpMessage = "Filter devices that are not compliant with organizational policies.")]
40+
[Switch] $NonCompliant,
41+
42+
[Parameter(ParameterSetName = "GetQuery", Mandatory = $false, ValueFromPipeline = $false, ValueFromPipelineByPropertyName = $true, HelpMessage = "Filter devices onwhether they are managed by a Mobile Device Management (MDM) solution. Use `$true for managed devices or `$false for unmanaged devices.")]
43+
[Parameter(ParameterSetName = "GetVague", Mandatory = $false, ValueFromPipeline = $false, ValueFromPipelineByPropertyName = $true, HelpMessage = "Filter devices onwhether they are managed by a Mobile Device Management (MDM) solution. Use `$true for managed devices or `$false for unmanaged devices.")]
44+
[System.Nullable`1[System.Boolean]] $IsManaged,
45+
46+
[Parameter(ParameterSetName = "GetQuery", Mandatory = $false, ValueFromPipeline = $false, ValueFromPipelineByPropertyName = $true, HelpMessage = "Filter devices by join type: MicrosoftEntraJoined, MicrosoftEntraHybridJoined, or MicrosoftEntraRegistered.")]
47+
[Parameter(ParameterSetName = "GetVague", Mandatory = $false, ValueFromPipeline = $false, ValueFromPipelineByPropertyName = $true, HelpMessage = "Filter devices by join type: MicrosoftEntraJoined, MicrosoftEntraHybridJoined, or MicrosoftEntraRegistered.")]
48+
[ValidateSet("MicrosoftEntraJoined", "MicrosoftEntraHybridJoined", "MicrosoftEntraRegistered")]
49+
[System.String] $JoinType
2750
)
2851

2952
begin {
@@ -103,6 +126,56 @@ function Get-EntraDevice {
103126
$params["Property"] = $PSBoundParameters["Property"]
104127
}
105128

129+
if ($null -ne $PSBoundParameters["LogonTimeBefore"]) {
130+
$logonDate = $PSBoundParameters["LogonTimeBefore"].ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")
131+
if ($params.ContainsKey("Filter")) {
132+
$params["Filter"] += " and approximateLastSignInDateTime le $logonDate"
133+
} else {
134+
$params["Filter"] = "approximateLastSignInDateTime le $logonDate"
135+
}
136+
}
137+
138+
# Ref: https://learn.microsoft.com/en-us/entra/identity/devices/manage-stale-devices
139+
if ($PSBoundParameters.ContainsKey("Stale")) {
140+
$staleDate = (Get-Date).AddMonths(-2).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")
141+
if ($params.ContainsKey("Filter")) {
142+
$params["Filter"] += " and approximateLastSignInDateTime le $staleDate"
143+
} else {
144+
$params["Filter"] = "approximateLastSignInDateTime le $staleDate"
145+
}
146+
}
147+
148+
if ($PSBoundParameters.ContainsKey("NonCompliant")) {
149+
if ($params.ContainsKey("Filter")) {
150+
$params["Filter"] += " and isCompliant eq false"
151+
} else {
152+
$params["Filter"] = "isCompliant eq false"
153+
}
154+
}
155+
156+
if ($null -ne $PSBoundParameters["IsManaged"]) {
157+
$isManagedState = $PSBoundParameters["IsManaged"]
158+
if ($params.ContainsKey("Filter")) {
159+
$params["Filter"] += " and isManaged eq $isManagedState"
160+
} else {
161+
$params["Filter"] = "isManaged eq $isManagedState"
162+
}
163+
}
164+
165+
if ($null -ne $PSBoundParameters["JoinType"]) {
166+
$filterValue = switch ($PSBoundParameters["JoinType"]) {
167+
"MicrosoftEntraJoined" { "trustType eq 'AzureAd'" }
168+
"MicrosoftEntraHybridJoined" { "trustType eq 'ServerAd'" }
169+
"MicrosoftEntraRegistered" { "trustType eq 'Workplace'" }
170+
}
171+
172+
if ($params.ContainsKey("Filter")) {
173+
$params["Filter"] += " and $filterValue"
174+
} else {
175+
$params["Filter"] = $filterValue
176+
}
177+
}
178+
106179
Write-Debug("============================ TRANSFORMATIONS ============================")
107180
$params.Keys | ForEach-Object { "$_ : $($params[$_])" } | Write-Debug
108181
Write-Debug("=========================================================================`n")
@@ -121,7 +194,6 @@ function Get-EntraDevice {
121194
Add-Member -InputObject $_ -MemberType AliasProperty -Name DeviceTrustType -Value TrustType
122195
Add-Member -InputObject $_ -MemberType AliasProperty -Name DeviceObjectVersion -Value DeviceVersion
123196
Add-Member -InputObject $_ -MemberType AliasProperty -Name ObjectId -Value Id
124-
125197
}
126198
}
127199
$response

module/EntraBeta/Microsoft.Entra.Beta/DirectoryManagement/Get-EntraBetaDevice.ps1

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ function Get-EntraBetaDevice {
1111

1212
[Parameter(ParameterSetName = "GetQuery", ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
1313
[System.String] $Filter,
14+
1415
[Alias('ObjectId')]
1516
[Parameter(ParameterSetName = "GetById", Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
1617
[System.String] $DeviceId,
@@ -21,9 +22,31 @@ function Get-EntraBetaDevice {
2122
[Parameter(ParameterSetName = "GetQuery", ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
2223
[Alias("Limit")]
2324
[System.Nullable`1[System.Int32]] $Top,
25+
2426
[Parameter(Mandatory = $false, ValueFromPipeline = $false, ValueFromPipelineByPropertyName = $true)]
2527
[Alias("Select")]
26-
[System.String[]] $Property
28+
[System.String[]] $Property,
29+
30+
[Parameter(ParameterSetName = "GetQuery", Mandatory = $false, ValueFromPipeline = $false, ValueFromPipelineByPropertyName = $true, HelpMessage = "Filter devices with last sign-in before a specified date.")]
31+
[Parameter(ParameterSetName = "GetVague", Mandatory = $false, ValueFromPipeline = $false, ValueFromPipelineByPropertyName = $true, HelpMessage = "Filter devices with last sign-in before a specified date.")]
32+
[DateTime] $LogonTimeBefore,
33+
34+
[Parameter(ParameterSetName = "GetQuery", Mandatory = $false, ValueFromPipeline = $false, ValueFromPipelineByPropertyName = $true, HelpMessage = "Filter devices that haven't signed in for 2 months or more.")]
35+
[Parameter(ParameterSetName = "GetVague", Mandatory = $false, ValueFromPipeline = $false, ValueFromPipelineByPropertyName = $true, HelpMessage = "Filter devices that haven't signed in for 2 months or more.")]
36+
[Switch] $Stale,
37+
38+
[Parameter(ParameterSetName = "GetQuery", Mandatory = $false, ValueFromPipeline = $false, ValueFromPipelineByPropertyName = $true, HelpMessage = "Filter devices that are not compliant with organizational policies.")]
39+
[Parameter(ParameterSetName = "GetVague", Mandatory = $false, ValueFromPipeline = $false, ValueFromPipelineByPropertyName = $true, HelpMessage = "Filter devices that are not compliant with organizational policies.")]
40+
[Switch] $NonCompliant,
41+
42+
[Parameter(ParameterSetName = "GetQuery", Mandatory = $false, ValueFromPipeline = $false, ValueFromPipelineByPropertyName = $true, HelpMessage = "Filter devices onwhether they are managed by a Mobile Device Management (MDM) solution. Use `$true for managed devices or `$false for unmanaged devices.")]
43+
[Parameter(ParameterSetName = "GetVague", Mandatory = $false, ValueFromPipeline = $false, ValueFromPipelineByPropertyName = $true, HelpMessage = "Filter devices onwhether they are managed by a Mobile Device Management (MDM) solution. Use `$true for managed devices or `$false for unmanaged devices.")]
44+
[System.Nullable`1[System.Boolean]] $IsManaged,
45+
46+
[Parameter(ParameterSetName = "GetQuery", Mandatory = $false, ValueFromPipeline = $false, ValueFromPipelineByPropertyName = $true, HelpMessage = "Filter devices by join type: MicrosoftEntraJoined, MicrosoftEntraHybridJoined, or MicrosoftEntraRegistered.")]
47+
[Parameter(ParameterSetName = "GetVague", Mandatory = $false, ValueFromPipeline = $false, ValueFromPipelineByPropertyName = $true, HelpMessage = "Filter devices by join type: MicrosoftEntraJoined, MicrosoftEntraHybridJoined, or MicrosoftEntraRegistered.")]
48+
[ValidateSet("MicrosoftEntraJoined", "MicrosoftEntraHybridJoined", "MicrosoftEntraRegistered")]
49+
[System.String] $JoinType
2750
)
2851

2952
begin {
@@ -103,6 +126,56 @@ function Get-EntraBetaDevice {
103126
$params["Property"] = $PSBoundParameters["Property"]
104127
}
105128

129+
if ($null -ne $PSBoundParameters["LogonTimeBefore"]) {
130+
$logonDate = $PSBoundParameters["LogonTimeBefore"].ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")
131+
if ($params.ContainsKey("Filter")) {
132+
$params["Filter"] += " and approximateLastSignInDateTime le $logonDate"
133+
} else {
134+
$params["Filter"] = "approximateLastSignInDateTime le $logonDate"
135+
}
136+
}
137+
138+
# Ref: https://learn.microsoft.com/en-us/entra/identity/devices/manage-stale-devices
139+
if ($PSBoundParameters.ContainsKey("Stale")) {
140+
$staleDate = (Get-Date).AddMonths(-2).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")
141+
if ($params.ContainsKey("Filter")) {
142+
$params["Filter"] += " and approximateLastSignInDateTime le $staleDate"
143+
} else {
144+
$params["Filter"] = "approximateLastSignInDateTime le $staleDate"
145+
}
146+
}
147+
148+
if ($PSBoundParameters.ContainsKey("NonCompliant")) {
149+
if ($params.ContainsKey("Filter")) {
150+
$params["Filter"] += " and isCompliant eq false"
151+
} else {
152+
$params["Filter"] = "isCompliant eq false"
153+
}
154+
}
155+
156+
if ($null -ne $PSBoundParameters["IsManaged"]) {
157+
$isManagedState = $PSBoundParameters["IsManaged"]
158+
if ($params.ContainsKey("Filter")) {
159+
$params["Filter"] += " and isManaged eq $isManagedState"
160+
} else {
161+
$params["Filter"] = "isManaged eq $isManagedState"
162+
}
163+
}
164+
165+
if ($null -ne $PSBoundParameters["JoinType"]) {
166+
$filterValue = switch ($PSBoundParameters["JoinType"]) {
167+
"MicrosoftEntraJoined" { "trustType eq 'AzureAd'" }
168+
"MicrosoftEntraHybridJoined" { "trustType eq 'ServerAd'" }
169+
"MicrosoftEntraRegistered" { "trustType eq 'Workplace'" }
170+
}
171+
172+
if ($params.ContainsKey("Filter")) {
173+
$params["Filter"] += " and $filterValue"
174+
} else {
175+
$params["Filter"] = $filterValue
176+
}
177+
}
178+
106179
Write-Debug("============================ TRANSFORMATIONS ============================")
107180
$params.Keys | ForEach-Object { "$_ : $($params[$_])" } | Write-Debug
108181
Write-Debug("=========================================================================`n")

0 commit comments

Comments
 (0)