$DeviceId = "123456789-1234-1234-1234-123123123123"
Get-AzureAdAuditSigninLogs -top 1 -filter "appdisplayname eq 'Windows Sign In'" | where-object {$_.DeviceDetail.DeviceID -eq $DeviceID} | select-object userdisplayname
作为较大脚本的一部分,我将 AzureAD 设备 ID 列表拉入 foreach 循环中。然后我想运行上面的命令来仅显示与该设备 ID 匹配的每个设备的详细信息。问题是设备 ID 隐藏在“设备详细信息”下。我想添加一个 where-object 或类似的东西来将 $DeviceID 与 $DeviceDetail.DeviceID 进行比较,但这不起作用。我知道我错过了一些简单的东西,但我并没有真正处理这样的数据。
例如(见下文)
ResourceDisplayName : Windows Azure Active Directory
ResourceId : 00000002-0000-0000-c000-000000000000
AuthenticationMethodsUsed : {}
Status : class SignInStatus {
ErrorCode: 0
FailureReason: Other.
AdditionalDetails:
}
DeviceDetail : class SignInAuditLogObjectDeviceDetail {
DeviceId: 123456789-1234-1234-1234-123123123123
DisplayName: xxxxxxxxxx
OperatingSystem: Windows
Browser:
IsCompliant: True
IsManaged: True
TrustType: Azure AD joined
}
Location : class SignInAuditLogObjectLocation {
City: xxxxx
State: xxxxxxx
CountryOrRegion: US
}
在非嵌套数据上,我只能使用 where-object 引用数据属性,但我尝试检索的数据是数组的一部分,因此我无法获取Where-object 来过滤它。
$DeviceId = "123456789-1234-1234-1234-123123123123"
Get-AzureAdAuditSigninLogs -top 1 -filter "appdisplayname eq 'Windows Sign In'" | where-object {$_.DeviceDetail.DeviceID -eq $DeviceID} | select-object userdisplayname
我不确定,但我认为您正在使用 PowerShell 并尝试根据嵌套属性 (
Get-AzureAdAuditSigninLogs
) 过滤 DeviceDetail.DeviceID
的输出。 PowerShell 的 Where-Object
cmdlet 确实是完成此任务的正确工具,但您需要确保正确引用嵌套属性。
在您的情况下,对
DeviceID
属性中的 DeviceDetail
属性的正确引用将是 $_.DeviceDetail.DeviceId
(请注意“DeviceId”中的小写“d”)。 PowerShell 区分大小写,因此使用正确的属性名称大小写至关重要。
这是更正后的代码:
$DeviceId =“123456789-1234-1234-1234-123123123123” Get-AzureAdAuditSigninLogs -Top 1 -Filter“appdisplayname eq 'Windows 登录'”| Where-Object { $_.DeviceDetail.DeviceId -eq $DeviceId } |选择对象 UserDisplayName
确保使用
$_.DeviceDetail.DeviceId
而不是 $_.DeviceDetail.DeviceID
。如果大小写不正确,则无法进行比较。
这应该根据指定的
$DeviceId
过滤结果。如果您仍然遇到问题,您可能需要检查 Get-AzureAdAuditSigninLogs -Top 1 -Filter "appdisplayname eq 'Windows Sign In'"
的输出,以了解您正在使用的数据的结构并确保属性名称正确。