使用 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 清除自定义日期属性。
我目前正在尝试使用 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 清除自定义日期属性。