通过 PowerShell 中的 SCCM 查询获取设备的主要用户

Get primary user of device through SCCM query in PowerShell

我们正在扫描活动目录以查找所有计算机对象。然后对于每台机器,我们试图找到最常使用该机器的用户,即主要用户。

为了查找此数据,我们找到了 2 个针对 SCCM 的有效查询:

$Query = "
SELECT
    SMS_R_User.FullUserName, SMS_R_User.UniqueUserName, SMS_R_System.Name
FROM
    SMS_R_System
INNER JOIN
    SMS_G_System_SYSTEM_CONSOLE_USAGE
    ON
    SMS_G_System_SYSTEM_CONSOLE_USAGE.ResourceId = SMS_R_System.ResourceId
INNER JOIN
    SMS_R_User
    ON
    SMS_G_System_SYSTEM_CONSOLE_USAGE.TopConsoleUser = SMS_R_User.UniqueUserName
"
$Query = "
    SELECT
        SMS_R_System.name, SMS_R_User.UniqueUserName
    FROM
        SMS_R_System
    INNER JOIN
        SMS_UserMachineRelationship
        ON
        SMS_UserMachineRelationship.ResourceId = SMS_R_System.ResourceId
    JOIN
        SMS_R_User
        ON
        SMS_UserMachineRelationship.UniqueUserName = SMS_R_User.UniqueUserName
      WHERE
       SMS_UserMachineRelationship.Types = 1
    "

我们执行这些:

    $WmiParams = @{
        Namespace    = "root\SMS\site_EU1"
        ComputerName = $SCCMServer
        Query        = $Query
    }

    $Result = Get-WmiObject @WmiParams

我们不是很多 SCCM 专家,但两个查询给出不同的结果和重复的计算机对象 $Result.SMS_R_System.Name | Group-Object | where Count -ge 2

使用 SamAccountNameFullUserName 将一个机器名称连接到一个主要用户的正确查询是什么?

感谢您的帮助。

SMS_UserMachineRelationship 应包含用户的主要设备。 1 个设备可能是多个用户的 Primary 设备,也可能 1 个用户可以拥有多于 1 个 Primary 设备。它取决于 Client Settings 中配置的条件来识别主设备。默认情况下,如果某些用户在一个月内登录设备 48 hours,则该设备将被视为该用户的主要设备。这个标准可以改变。您可以在 https://docs.microsoft.com/en-us/sccm/apps/deploy-use/link-users-and-devices-with-user-device-affinity

阅读更多关于 User Device Affinity 的信息

另一种选择是使用 PowerShell 模块“dbatools”...

Invoke-DbaQuery -SqlInstance "myserver.contoso.local" -Database "CM_P01" -Query "select UniqueUserName,MachineResource Name from v_UserMachineRelationship"