使用 PowerShell 和 SCSM cmdlet 将 DateTime 设置为 $null/empty

Setting a DateTime to $null/empty using PowerShell and the SCSM cmdlets

我目前正在尝试使用 PowerShell 脚本从 AD(Active Directory)同步 SCSM(系统中心服务管理器)中用户对象的附加属性。

我为此编写的扩展包括一个 AD 用户帐户到期日期的属性(DateTime 值,在示例中命名为 DateTimeAttribute)如果用户帐户没有过期应该是 empty/null.

使用 Import-SCSMInstance,这应该类似于 CSV 导入,它通过为字段传递 "null" 来工作。问题是 Import-SCSMInstance 似乎很不可靠,它没有提供任何关于它为什么有效或无效的信息。使用 Update-SCSMClassInstance 似乎效果更好,但我想不出使用它来清除字段的方法,甚至使用 [DateTime]::MinValue 也会导致错误,指出它是无效值。

那么有人知道如何使用 Update-SCSMClassInstance 清除值或弄清楚为什么 Import-SCSMInstance 可能有效或无效吗?

一个简单的示例如下所示:

$server = "<ServerName>"
$extensionGuid = "<GUID>"
Import-Module 'C:\Program Files\System Center 2012 R2\Service Manager\Powershell\System.Center.Service.Manager.psd1'

New-SCManagementGroupConnection -ComputerName $server
$extensionClass = Get-SCSMClass -Id $extensionGuid
$scsmUserObject = Get-SCSMClassInstance -Class $extensionClass -Filter 'UserName -eq "<User>"'

# Error
$scsmUserObject.DateTimeAttribute = ""

# Works but fails on Update-SCSMClassInstance
$scsmUserObject.DateTimeAttribute = $null
$scsmUserObject.DateTimeAttribute = [DateTime]::MinValue

# Works
$scsmUserObject.DateTimeAttribute = "01-01-1970"

Update-SCSMClassInstance -Instance $scsmUserObject

日期填满后似乎无法清除。当您写入 $null 时,它会将日期设置为 1-1-0001 01:00:00,这是导致 update-scsmclassinstance 失败的无效日期。 当我们不希望某些东西过期时,我们设置为用户的 AD 属性 是 2999-12-31 (yyyy-MM-dd)。也许这会有所帮助,尽管它不是您直接要求的...

此外,您可以使用管道更新 SCSM 中的 属性:

    Get-SCSMClassInstance -Class $extensionClass -Filter 'UserName -eq "<User>"' | % {$_.DateTimeAttribute = <date>; $_} | update-scsmclassinstance 

目前似乎无法使用 PowerShell cmdlet 清除自定义日期属性。