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

使用PowerShell和SCSM cmdlet将DateTime设置为$null/empty,powershell,datetime,system-center,Powershell,Datetime,System Center,我当前正在尝试使用PowerShell脚本从SCSM(System Center Service Manager)中的用户对象的AD(Active Directory)同步其他属性 我为此编写的扩展包括一个AD用户帐户的过期日期属性(DateTimevalue,在示例中名为DateTimeAttribute),如果用户帐户没有过期,它应该为空/空 使用Import-SCSMInstance,它应该类似于CSV导入,它通过为字段传递“null”来工作。问题是,Import-SCSMInstance

我当前正在尝试使用PowerShell脚本从SCSM(System Center Service Manager)中的用户对象的AD(Active Directory)同步其他属性

我为此编写的扩展包括一个AD用户帐户的过期日期属性(
DateTime
value,在示例中名为
DateTimeAttribute
),如果用户帐户没有过期,它应该为空/空

使用
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
$server=“”
$extensionGuid=“”
导入模块“C:\Program Files\System Center 2012 R2\Service Manager\Powershell\System.Center.Service.Manager.psd1”
新的SCManagementGroupConnection-ComputerName$服务器
$extensionClass=Get SCSMClass-Id$extensionGuid
$scsmUserObject=Get-SCSMClassInstance-Class$extensionClass-Filter'UserName-eq''
#错误
$scsmUserObject.DateTimeAttribute=“”
#在更新SCSMClassInstance时工作,但失败
$scsmUserObject.DateTimeAttribute=$null
$scsmUserObject.DateTimeAttribute=[DateTime]::MinValue
#工作
$scsmUserObject.DateTimeAttribute=“01-01-1970”
更新SCSMClassInstance-实例$scsmUserObject

似乎一旦日期填写完毕,您就无法清除它。写入$null时,它会将日期设置为1-1-0001 01:00:00,这是一个无效的日期,导致更新scsmclassinstance失败。 当我们不希望某些内容过期时,我们将其设置为用户的广告属性,即2999-12-31(yyyy-MM-dd)。也许这会有帮助,虽然这不是你直接要求的

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

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

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

这是一个提供解决方案的部分答案。我了解管道,但想让代码更清楚一点,以说明问题所在。使用管道可能会稍微加快这个过程。在生产中,我不仅仅是阅读一个用户。使用“古怪”的约会感觉有点错误,但似乎是目前最好的选择。