This script lets you view, add en remove primary users from SCCM without the need of a SCCM management console. Use an account that has a appropriate security level.
Import this script like: import-module 'path to script' -argumentlist 'SITESERVER','SITECODE'
Use Functions like:
Get-PrimaryDevice 'userID'
Get-PrimaryUser 'Computername'
Set-Affinity 'userID' 'ComputerName'
Remove-Affinity 'userID' 'ComputerName'
param(
[string]$Siteserver,
[string]$Sitecode
)
Function Get-PrimaryDevice
{
PARAM
(
[String]$User
)
Get-WmiObject -ComputerName $SITESERVER -Namespace "root\SMS\Site_$SITECODE" -Query "select * from SMS_UserMachineRelationship WHERE UniqueUserName like'%$User%' AND IsActive = '1' AND Types = '1'"
}
Function Get-PrimaryUser
{
PARAM
(
[String]$Device
)
Get-WmiObject -ComputerName $SiteServer -Namespace "root\SMS\Site_$SiteCode" -Query "select * from SMS_UserMachineRelationship WHERE ResourceName like '%$Device%' AND IsActive = '1' AND Types = '1'"
}
Function Set-Affinity
{
PARAM
(
[String]$User,
[String]$Device
)
$CMDeviceResourceID = Get-WmiObject -Namespace "root\SMS\site_$SiteCode" -Class SMS_R_System -ComputerName $SiteServer -Filter "Name like '%$Device%'" | Select-Object -ExpandProperty ResourceID
$CMUserName = Get-WmiObject -Namespace "root\SMS\site_$SiteCode" -Class SMS_R_User -ComputerName $SiteServer -Filter "Name like '%$User%'" | Select-Object -ExpandProperty Name
$WMIConnection = [WmiClass]"\\$($SiteServer)\root\SMS\site_$($SiteCode):SMS_UserMachineRelationship"
$NewRelation = $WMIConnection.psbase.GetMethodParameters("CreateRelationship")
$NewRelation.MachineResourceId = $CMDeviceResourceID
$NewRelation.SourceId = 2
$NewRelation.TypeId = 1
$NewRelation.UserAccountName = $CMUserName
$WMIConnection.psbase.InvokeMethod("CreateRelationship", $NewRelation, $null)
}
Function Remove-Affinity
{
PARAM
(
[String]$User,
[String]$Device
)
$CMDeviceResourceID = Get-WmiObject -Namespace "root\SMS\site_$SiteCode" -Class SMS_R_System -ComputerName $SiteServer -Filter "Name like '%$Device%'" | Select-Object -ExpandProperty ResourceID
$CMUserName = Get-WmiObject -Namespace "root\SMS\site_$SiteCode" -Class SMS_R_User -ComputerName $SiteServer -Filter "Name like '%$User%'" | Select-Object -ExpandProperty Name
$RelationshipResourceID = Get-WmiObject -ComputerName $SiteServer -Namespace "root\SMS\Site_$SiteCode" -Query "select * from SMS_UserMachineRelationship WHERE UniqueUserName like'%$User%' AND ResourceName like '%$Device' AND IsActive = '1' AND Types = '1'"
$RelationshipResourceID.psbase.delete() | New-PSSession -computername $Siteserver
}
Write-host "Import this script like: import-module 'path to script' -argumentlist 'SITESERVER','SITECODE'`nUse Functions like:`nGet-PrimaryDevice 'userID'`nGet-PrimaryUser 'Computername'`nSet-Affinity 'userID' 'ComputerName'`nRemove-Affinity 'userID ComputerName'" -ForegroundColor Cyan