Удалить учетные записи, если lastusetime старше, чем значение - PullRequest
0 голосов
/ 13 мая 2019

enter image description here Я пытаюсь создать задачу, которая будет выполняться позже с локальным компьютером taskch, которая будет выполняться каждый день.

Задача состоит в том, что если пользователь не вошел в систему компьютера, он должен быть удален с компьютера.

Дело в том, что с моим кодом что-то не так, и я не знаю, что Сейчас я пытаюсь, чтобы скрипт удалил testuser 1,2,3, а на testuser 4 должен сказать, что Account is old, используя lastusetime.

Система-информация

Название ОС: Microsoft Windows 10 Enterprise Версия ОС: 10.0.17763 N / A Build 17763

Счет-Info

@ {Sid = S-1-5-21-3824012622-276487612-2647460976-1105; LocalPath = C: \ Users \ testuser4; LastUseTime = 2019-05-13 19:27:57}

@ {Sid = S-1-5-21-3824012622-276487612-2647460976-1109; LocalPath = C: \ Users \ testuser3; LastUseTime = 2019-05-10 14:54:07}

@ {Sid = S-1-5-21-3824012622-276487612-2647460976-1108; LocalPath = C: \ Users \ testuser2; LastUseTime = 2019-05-10 14:54:07}

@ {SID = S-1-5-21-3824012622-276487612-2647460976-1107; LocalPath = C: \ Users \ testuser1; LastUseTime = 2019-05-10 13:49:16}

# Start PS-Code
 $DeleteIfLastUseTimetIsOlderThen = (get-date).AddDays(-5).tostring("yyyy-MM-dd hh:mm:ss”) 

 $GetLocalAccounts = Get-WmiObject -ComputerName localhost -Filter "Special=False" -Class Win32_UserProfile | 
 Select-Object Sid, LocalPath, @{Label='LastUseTime';Expression={$_.ConvertToDateTime($_.LastUseTime)} }  

  foreach ($UserAccount in $GetLocalAccounts) 
   { 
    if ($GetLocalAccounts.LastUseTime -Ge $DeleteIfLastUseTimetIsOlderThen )  
     { Write-host "Account is old, Remove me"}
      Else 
       { Write-host "Account is not old"}
 } 
# End PS-Code

Дело в том, что не имеет значения, если я изменю значение "$ DeleteIfLastUseTimetIsOlderThen" на 1,2,3,4 или 55, все кажется старым.

1 Ответ

0 голосов
/ 13 мая 2019

Проблема здесь двоякая. Во-первых, вы хотите использовать сравнение меньше при поиске более старой даты, так как дата в прошлом меньше, чем дата в будущем. Во-вторых, вы хотите сравнить каждую дату в вашей коллекции ($GetLocalAccounts) с определенной фиксированной датой ($DeleteIfLastUseTimeIsOlderThan). Чтобы сделать это со своей структурой кода, вам необходимо проверить текущий объект ($UserAccount) в цикле for.

# Start PS-Code
 $DeleteIfLastUseTimetIsOlderThan = (get-date).AddDays(-5).tostring("yyyy-MM-dd hh:mm:ss”) 

 $GetLocalAccounts = Get-WmiObject -ComputerName localhost -Filter "Special=False" -Class Win32_UserProfile | 
 Select-Object Sid, LocalPath, @{Label='LastUseTime';Expression={$_.ConvertToDateTime($_.LastUseTime)} }  

  foreach ($UserAccount in $GetLocalAccounts) 
   { 
    if ($UserAccount.LastUseTime -le $DeleteIfLastUseTimetIsOlderThan )  
     { Write-host "Account is old, Remove me"}
      Else 
       { Write-host "Account is not old"}
 } 
# End PS-Code
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...