2017-03-08 34 views
0

我正在嘗試使用PowerShell腳本爲SCSM(System Center Service Manager)中的用戶對象同步來自AD(Active Directory)的其他屬性。

我爲此編寫的擴展包括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(yyyy-MM-dd)。或許,這可以幫助,但它不是直接是你問的...

此外,您還可以使用管道在SCSM更新的屬性:

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

那麼它的部分答案,提供了一個解決方法。我知道管道,但想讓代碼更清楚一些,以顯示問題所在。使用這些管道可能會加快這一過程。在生產中,我不只是閱讀一個用戶。使用「古怪的」日期感覺有點不對勁,但似乎是現在最好的選擇。 – Seth