none
script powershell RRS feed

  • Domanda

  • Hello,

    I am trying this script powershell to work; it remove Office 365 licenses from a csv file

    I added the rows marked in bold, which should check if the user have had not access in the last 30 days, but the script goes wrong

    The rows implicated in the error are the bold ones, because without them the script goes well

    ***

    Import-Module ExchangeOnlineManagement
    Connect-ExchangeOnline -Credential $credential
    Connect-AzureAD -Credential $credential

    $list = Import-CSV Utenti_da_Disabilitare.csv -delimiter ";"

    forEach ($item in $list) {

      $userUPN = $item.mail

      $userList = Get-AzureADUser -ObjectID $userUPN
      $LastLogonTime = Get-EXOMailboxStatistics -Identity $userUPN -Properties LastLogonTime
      $OneMonthAgo = (Get-Date).adddays(-30)
      if ($LastLogonTime -lt $OneMonthAgo) {
        $Skus = $userList | Select -ExpandProperty AssignedLicenses | Select SkuID
        if($userList.Count -ne 0) {
          if($Skus -is [array])
          {
            $licenses = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
            for ($i=0; $i -lt $Skus.Count; $i++) {
              $Licenses.RemoveLicenses +=  (Get-AzureADSubscribedSku | Where-Object -Property SkuID -Value $Skus[$i].SkuId -EQ).SkuID   
            }
            Set-AzureADUserLicense -ObjectId $userUPN -AssignedLicenses $licenses
          } else {
            $licenses = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
            $Licenses.RemoveLicenses =  (Get-AzureADSubscribedSku | Where-Object -Property SkuID -Value $Skus.SkuId -EQ).SkuID
            Set-AzureADUserLicense -ObjectId $userUPN -AssignedLicenses $licenses
          }
        }
      }

    }


    giovedì 25 marzo 2021 10:56

Risposte

  • C'è un errore nel tuo codice,  dato che $lastlogonti contiene l'oggetto intero e non un tipo System.DateTime, per cui il confronto fallisce, puoi cambiare il codice così

    if ($LastLogonTime.LastLogonTime -lt $OneMonthAgo) {
    o così (e ricordo  che è un o esclusivo)
    $LastLogonTime = (Get-EXOMailboxStatistics -Identity $userUPN -Properties LastLogonTime).lastlogontime
      $OneMonthAgo = (Get-Date).adddays(-30)
      if ($LastLogonTime -lt $OneMonthAgo) {

    Ciao Gas


    Gastone Canali >


    Se alcuni post rispondono al tuo quesito, ricorda di contrassegnarli come risposta e non dimenticare anche i post utili. GRAZIE! Dai un occhio ai link Click Here and Here Leaderboard Here


    venerdì 26 marzo 2021 19:58
    Moderatore

Tutte le risposte

  • Hi Nicola,

    US MSDN/Technet are read-only from 6th of January 2021 and they were migrated to MicrosoftQ&A.

    Please follow the link to Q&A, where you will be able to ask/reply questions in English.

    Regards, Nikola


    venerdì 26 marzo 2021 08:21
    Moderatore
  • We need the error to understand !

    Se riporti l'errore vediamo di capire

    Ciao dal forum italliano :)


    Gastone Canali >


    Se alcuni post rispondono al tuo quesito, ricorda di contrassegnarli come risposta e non dimenticare anche i post utili. GRAZIE! Dai un occhio ai link Click Here and Here Leaderboard Here



    venerdì 26 marzo 2021 08:35
    Moderatore
  • Impossibile confrontare "@{DisplayName=Luigi Pizzini; LastLogonTime=23/03/2021 07:41:20; MailboxGuid=4a21e778-563b-42fa-9955-5f863eeb516f; DeletedItemCount=102; ItemCount=4129; 
    TotalDeletedItemSize=6.543 MB (6,861,347 bytes); TotalItemSize=955.6 MB (1,001,970,104 bytes)}" con "24/02/2021 12:16:16" perché gli oggetti non sono dello stesso tipo o l'oggetto 
    "@{DisplayName=Luigi Pizzini; LastLogonTime=23/03/2021 07:41:20; MailboxGuid=4a21e778-563b-42fa-9955-5f863eeb516f; DeletedItemCount=102; ItemCount=4129; TotalDeletedItemSize=6.543 MB 
    (6,861,347 bytes); TotalItemSize=955.6 MB (1,001,970,104 bytes)}" non implementa "IComparable".
    In C:\Users\nicola.venosta\OneDrive - asstvaltellina\ATTIVITA IN CORSO\Office 365\Powershell\Eliminare_licenze_O365\eliminalicenza_new.ps1:14 car:7
    +   if ($LastLogonTime -lt $OneMonthAgo) {
    +       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [], ExtendedTypeSystemException
        + FullyQualifiedErrorId : PSObjectCompareTo
    venerdì 26 marzo 2021 14:41
  • C'è un errore nel tuo codice,  dato che $lastlogonti contiene l'oggetto intero e non un tipo System.DateTime, per cui il confronto fallisce, puoi cambiare il codice così

    if ($LastLogonTime.LastLogonTime -lt $OneMonthAgo) {
    o così (e ricordo  che è un o esclusivo)
    $LastLogonTime = (Get-EXOMailboxStatistics -Identity $userUPN -Properties LastLogonTime).lastlogontime
      $OneMonthAgo = (Get-Date).adddays(-30)
      if ($LastLogonTime -lt $OneMonthAgo) {

    Ciao Gas


    Gastone Canali >


    Se alcuni post rispondono al tuo quesito, ricorda di contrassegnarli come risposta e non dimenticare anche i post utili. GRAZIE! Dai un occhio ai link Click Here and Here Leaderboard Here


    venerdì 26 marzo 2021 19:58
    Moderatore
  • Molte grazie intanto, proverò e ti faccio sapere.

    Purtroppo non conosco bene powershell e la sua sintassi.

    sabato 27 marzo 2021 10:22
  • Quale dei parametri sotto riportati è il più realistico nell'indicare l'ultimo accesso alla casella di posta?


    sabato 27 marzo 2021 15:13
  • https://www.michev.info/Blog/Post/2408/new-properties-added-to-get-mailboxstatistics-output

    LastInteractionTime seems to be updated independently of the other parameters, near real-time, so it seems to be the best way to determine the answer to “when was this user last active” question. Unfortunately, the value of this property seems to be updated by other background assistants running against the mailbox, so it might not always give you the correct data.


    Gastone Canali >


    Se alcuni post rispondono al tuo quesito, ricorda di contrassegnarli come risposta e non dimenticare anche i post utili. GRAZIE! Dai un occhio ai link Click Here and Here Leaderboard Here

    sabato 27 marzo 2021 17:39
    Moderatore
  • Getting inactive mailboxes is the most needed task as it involves regaining unused licenses, archiving mailboxes, etc. Hence, the attribute used to get inactive mailbox must be more accurate. From the research, we found that getting inactive mailboxes using LastUserActionTime is the best solution.
    lunedì 29 marzo 2021 11:22