Как преобразовать system.string в тип system.DateTime с помощью powershell - PullRequest
0 голосов
/ 20 сентября 2019

введите описание изображения здесь Мне нужно удалить тех пользователей, которые входят в специальное подразделение, и убедитесь, что в этом подразделении прошло более 6 месяцев, удалите их.Я не знаю, если у меня есть право, но я использую атрибут When ладно, а также проверил с помощью Get-ADgroupmemberDate, но мой скрипт работает хорошо, пока у меня нет одного пользователя в OU или группе, как только у меня есть более 2 пользователей, я получаю эту ошибку

Невозможно преобразовать 'System.String []' в тип 'System.DateTime'

Get-ADUser -Filter * -SearchBase 'OU=testOU,DC=fire,DC=cloud' -Properties whenChanged | ForEach {
     $userinfo = Get-ADUser -filter {Enabled -eq $True} -SearchBase 'OU=testOU,DC=fire,DC=cloud' -properties whenChanged | Sort-Object DisplayName | Select-Object DisplayName, whenChanged 
     $today = Get-Date -Format "yyyy-MM-dd"
     $userData = $userinfo.Whenchanged
     $convert = ([string]$userData.ToshortDatestring()).Split()


     $result = (New-TimeSpan -Start $convert -End $today).Days 


        If ($result -ge 10) {
            #Get-ADUser -Filter * -SearchBase "OU=testOU,DC=fire,DC=cloud" | Disable-ADAccount
            #Get-ADUser -filter * -searchbase "OU=testOU,DC=fire,DC=cloud" | where-object { $_.Enabled -eq $false } | remove-ADobject -Confirm:$false
            "Hello"
            }


}

1 Ответ

0 голосов
/ 20 сентября 2019

Вы действительно перестали делать это с помощью командлета Get-ADUser.

Если я правильно понимаю вопрос, вы хотели бы получить список всех пользовательских объектов в этом подразделении, которые не были изменены дляболее 6 месяцев (хотя ваш код предлагает 10 дней ..).
Затем, если этот пользовательский объект включен, вы хотите отключить его, и если пользовательский объект уже был отключен, вам необходимо удалить его.

В таком случае это должно быть сделано:

$refDate = (Get-Date).AddMonths(-6)    # test for users that have been in this OU for more than 6 months
Get-ADUser -Filter * -SearchBase 'OU=testOU,DC=fire,DC=cloud' -Properties DisplayName, Modified | ForEach-Object {
    # iterating over this user collection means that in each run, the $_ automatic variable contains a single user
    if ($_.Modified -lt $refDate) {
        if ($_.Enabled) {
            Write-Host "Disabling user $($_.DisplayName)" -ForegroundColor Yellow
            $_ | Disable-ADAccount
        }
        else {
            Write-Host "Deleting user $($_.DisplayName)" -ForegroundColor Magenta
            $_ | Remove-ADUser
        }
    }
}


Благодаря Lee_Daily .Если вам нужно сравнить дату с полночь из X месяцев назад (в основном, пропустите временную часть даты), измените объявление $refDate на
$refDate = (Get-Date).Date.AddMonths(-6)

и изменитетест на

if ($_.Modified.Date -lt $refDate) {

В соответствии с вашим комментарием выписать CSV для всех пользователей, которые были отключены / удалены вышеуказанной функцией, вы можете реализовать это с помощью:

$today   = Get-Date
$refDate = $today.Date.AddMonths(-6)    # test for users that have been in this OU for more than 6 months
$result  = Get-ADUser -Filter * -SearchBase 'OU=testOU,DC=fire,DC=cloud' -Properties DisplayName, Modified | ForEach-Object {
    # iterating over this user collection means that in each run, the $_ automatic variable contains a single user
    if ($_.Modified.Date -lt $refDate) {
        # create an object with some details about the user for export to CSV
        $out = [PsCustomObject]@{
            'UserName'    = $_.DisplayName
            'AccountName' = $_.SamAccountName
            'Date'        = $today
            'Action'      = ''
        }
        if ($_.Enabled) {
            Write-Host "Disabling user $($_.DisplayName)" -ForegroundColor Yellow
            $out.Action = 'Disabled'
            $_ | Disable-ADAccount
        }
        else {
            Write-Host "Deleting user $($_.DisplayName)" -ForegroundColor Magenta
            $out.Action = 'Deleted'
            $_ | Remove-ADUser
        }
        # emit the PsCustomObject so it gets collected in variable $result
        $out
    }
}

if ($result) {
    # output the $result collection to screen
    $result

    # output to a CSV file
    $result | Export-Csv -Path 'Ex-users.csv' -NoTypeInformation
}
else { "No users were deleted or disabled" }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...