Установка 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.