2016-06-08 1 views
0

Это ближайший я пришел к ответу:New-ADUser в PowerShell, Счет Истечение плюс один день

Set-ADAccountExpiration in PowerShell sets AD account -1 day. Why?

Однако, это не работает в моем случае. Я создаю новых пользователей с PowerShell в Active Directory. Истечение счет извлекается из файла CSV, как это:

$ExpireDate = $Line.'Contract Expiration' 
    if ($ExpireDate -eq "") {$AccountExpiryDate = [DateTime]::Now.AddYears(1)} 
    else {$AccountExpiryDate = $ExpireDate} 

Затем добавляют в Нью-ADUser:

New-ADUser -Path $TestOU -SamAccountName $SamAccountName -AccountExpirationDate $AccountExpiryDate ` 

Он вытягивает дату в очень хорошо, но он должен быть для следующего день (я понимаю, что пуловер в 12:00). Когда я пытаюсь это сделать:

else {$AccountExpiryDate = ([DateTime]($Line.'Contract Expiration')).AddDays(1)} 

Он вытаскивает исходную дату, как если бы AddDays (1) не прилагался. Есть идеи?


Решение найдено (спасибо Остин французский)

$ExpireDate = $Line.'Contract Expiration' 
    $nDate = [DateTime]::Parse($ExpireDate) 
    if ($ExpireDate -eq "") {$AccountExpiryDate = [DateTime]::Now.AddYears(1)} 
    else {$AccountExpiryDate = $nDate.AddDays(1)} 
+0

Пробовал разобрать дату? Что-то вроде: '$ nDate = [DateTime] :: Parse ($ string); $ nDate.AddDays (1) ' –

+0

Sweet, another note: Try/catch была бы отличной идеей в случае действительно искаженных дат (так что весь скрипт не умирает!) –

ответ

1

Мои подозрения в том, что дата в столбце не будет должным образом бросить на объект DateTime. Использование метода DateTime.Parse поможет проверить объект и правильно преобразовать строку.

В вашем случае попробуйте следующее:

$ newDateTime = [DateTime] :: Разбираем ($ Line.'Contract Истечение ') $ AccountExpiryDate = $ newDate.AddDays (1)

+0

Так оно и было. Добавлено рабочее решение для оригинального сообщения. –

Смежные вопросы