0

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

我为此编写的扩展包括一个 AD 用户帐户的到期日期属性(DateTime值,在示例中命名DateTimeAttribute),如果用户帐户未到期,则它应该为空/null。

使用Import-SCSMInstance应该类似于 CSV 导入,它通过传递"null"字段来工作。问题是这Import-SCSMInstance似乎非常不可靠,并且它没有提供任何关于它为什么工作或不工作的信息。usingUpdate-SCSMClassInstance似乎工作得更好,但我想不出一种方法来使用它清除字段,甚至 using[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
4

2 回答 2

1

日期一旦填满,您似乎无法清除它。当您写入 $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 
于 2017-09-25T11:17:05.527 回答
0

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

于 2019-09-23T05:22:37.317 回答