2017-03-08 5 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が機能しない場合があります。このため

A簡単な例は次のようになります。

$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)です。

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

まあその回避策を提供しています部分的な答えを:それはあなたのために...また

、あなたがSCSM内のプロパティを更新するためにパイプラインを使用することができ尋ね直接ではありませんが、おそらくこれは、助けることができます。私はパイプについて知っていましたが、問題が何かを示すためにコードを少しはっきりさせたいと思っていました。パイプを使用すると、処理が少し遅くなる可能性があります。プロダクションでは、私はただのユーザーしか読んでいません。 「異国的な」日付を使用することは間違っているように感じますが、今は最良の選択肢と思われます。 – Seth

関連する問題