Установка DateTime в $null/empty с помощью PowerShell и командлетов SCSM

В настоящее время я пытаюсь синхронизировать дополнительные атрибуты из AD (Active Directory) для пользовательских объектов в SCSM (System Center Service Manager) с помощью сценария PowerShell.

Расширение, которое я написал для этого, включает в себя атрибут для срока действия учетной записи пользователя AD (DateTime значение, названное 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

1 ответ

Кажется, вы не можете очистить дату, когда она заполнена. Когда вы пишете $null, он устанавливает дату 1-1-0001 01:00:00, которая является недопустимой датой, приводящей к сбою update-scsmclassinstance. То, что мы установили в качестве свойства AD пользователя, когда мы не хотим, чтобы срок его действия истек, это 2999-12-31 (гггг-ММ-дд). Возможно, это могло бы помочь, хотя это не совсем то, что вы просили...

Также вы можете использовать конвейер для обновления свойства в SCSM:

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

Не похоже, что в настоящее время возможно очистить настраиваемые атрибуты даты с помощью командлетов PowerShell.

Другие вопросы по тегам