diff --git a/examples/User Deprovisioning/Users_Deprovision.ps1 b/examples/User Deprovisioning/Users_Deprovision.ps1 index e7e3d344..5bc0405c 100644 --- a/examples/User Deprovisioning/Users_Deprovision.ps1 +++ b/examples/User Deprovisioning/Users_Deprovision.ps1 @@ -1,5 +1,5 @@ #APP SETUP -#README: This powershell script will use the Box CLI to deprovision a list of users by first transfering user content to the current admin user's root folder (Transfer content default: "Y") before deleting that user. +#README: This powershell script will use the Box CLI to deprovision a list of users by first transferring user content to the current admin user's root folder (Transfer content default: "Y") before deleting that user. #APPLICATION ACCESS LEVEL (FOR JWT APPS): App + Enterprise Access #APPLICATION SCOPES: Read & Write all folders stored in Box, Manage users, & Make API calls using the as-user header @@ -21,8 +21,7 @@ $EmployeeArchiveFolderName = "Employee Archive" ### SCRIPT BUSINESS LOGIC ########################################################### ######################################################################################## -$EmployeeArchiveFolderID =$null - +$EmployeeArchiveFolderID = $null # Function to write to logs function Write-Log { param ([string]$message, [string]$errorMessage = $null, [Exception]$exception = $null, [string]$output = $false, [string]$color = "Green") @@ -101,7 +100,7 @@ Function Start-Script { # Get employees json file and convert from CSV to an array of objects Try { $Employees = Import-Csv $EmployeeList - Write-Log "Importing csv of users to deprovision" -output true + Write-Log "Importing csv of users to deprovision." -output true } Catch { Write-Log "Error reading employee data from CSV file $EmployeeList" -exception $_.Exception -output true -color Red @@ -113,6 +112,8 @@ Function Start-Script { $UserResp = "$(box users:get --json 2>&1)" $User = $UserResp | ConvertFrom-Json $UserId = $User.id + Write-Log "Successfully get current user: $($User.login), ID: $($User.id)." -output true + Write-Log $UserResp } catch { Write-Log "Could not get the current user. See log for details." -errorMessage $UserResp -output true -color Red break @@ -122,27 +123,30 @@ Function Start-Script { # List root folder contents try { $RootFolderResp = "$(box folders:items 0 --sort=name --direction=ASC --json 2>&1)" - $RootFolder = $RootFolderResp| ConvertFrom-Json + $RootFolder = $RootFolderResp | ConvertFrom-Json } catch { Write-Log "Could not get root directory for current user (ID: $UserId). See log for details. " -errorMessage $RootFolderResp -output true -color Red break } # Check if "Employee Archive" folder already exists - ForEach($Result in $RootFolder) { - if( $Result.name -eq $EmployeeArchiveFolderName) { - $EmployeeArchiveFolderID = $Result.id - Write-Log "Employee Archive folder already exists with folder ID: $($EmployeeArchiveFolderID)" -output true + ForEach($FolderItem in $RootFolder) { + if($FolderItem.name -eq $EmployeeArchiveFolderName) { + $EmployeeArchiveFolderID = $FolderItem.id + Write-Log "'$EmployeeArchiveFolderName' folder already exists with folder ID: $($EmployeeArchiveFolderID)." -output true + break } } # Create new "Employee Archive" folder if it doens't exist if($null -eq $EmployeeArchiveFolderID) { try { - $EmployeeArchiveFolderID = "$(box folders:create 0 $EmployeeArchiveFolderName --id-only 2>&1)" - Write-Log "Created new Employee Archive root folder with ID: $($EmployeeArchiveFolderID); name: $($EmployeeArchiveFolderName)" -output true + $EmployeeArchiveFolderResp = "$(box folders:create 0 "$EmployeeArchiveFolderName" --fields="id" --json 2>&1)" + $EmployeeArchiveFolderID = $EmployeeArchiveFolderResp | ConvertFrom-Json | ForEach-Object { $_.id } + Write-Log "Successfully created new '$EmployeeArchiveFolderName' root folder with ID: $($EmployeeArchiveFolderID)." -output true + Write-Log $EmployeeArchiveFolderResp } catch { - Write-Log "Could not create new Employee Archive root folder. See log for details." -errorMessage $EmployeeArchiveFolderID -output true -color Red + Write-Log "Could not create new '$EmployeeArchiveFolderName' root folder. See log for details." -errorMessage $EmployeeArchiveFolderResp -output true -color Red break } } @@ -160,10 +164,12 @@ Function Start-Script { continue } elseif (($FoundEmployee.Length -gt 1) -or $($FoundEmployee.total_count) -gt 1) { Write-Log "Multiple matching users found for email: $($Employee.email). Skipping this employee." -output true -color Yellow + Write-Log $FoundEmployeeResp continue } else { $FoundEmployeeID = $FoundEmployee.id - Write-Log "Found employee $($FoundEmployee.name) with ID: $FoundEmployeeID for email: $($Employee.email)" -output true + Write-Log "Found employee $($FoundEmployee.name) with ID: $FoundEmployeeID for email: $($Employee.email)." -output true + Write-Log $FoundEmployeeResp } } catch { Write-Log "Skipping this employee. Could not find user for email: $($Employee.email). See log for details." -errorMessage $FoundEmployeeResp -output true -color Red @@ -172,11 +178,13 @@ Function Start-Script { if($TransferContent -eq "Y") { # Transfer users content to current user's root folder before deleting user - Write-Log "Transfering $($FoundEmployee.name) content over to current user's Root folder with name ""$($FoundEmployee.login) - $($FoundEmployee.name)'s Files and Folders""" -output true + Write-Log "Transferring $($FoundEmployee.name) content over to current user's Root folder with name ""$($FoundEmployee.login) - $($FoundEmployee.name)'s Files and Folders""..." -output true try { $NewFolderResp = "$(box users:transfer-content $FoundEmployeeID $UserId --json 2>&1)" $NewFolder = $NewFolderResp | ConvertFrom-Json + Write-Log "Successfully transferred content to ""$($FoundEmployee.login) - $($FoundEmployee.name)'s Files and Folders""." -output true + Write-Log $NewFolderResp } catch { Write-Log "Skipping this employee. Could not transfer $($FoundEmployee.name) content over to current user's Root folder. See log for details." -errorMessage $NewFolderResp -output true -color Red continue @@ -186,24 +194,32 @@ Function Start-Script { $TransferredFolder = $NewFolder.id try { $MoveFolderResp = "$(box folders:move $TransferredFolder $EmployeeArchiveFolderID --json 2>&1)" - Write-Log "Transfered employee content $($FoundEmployee.name) with User ID: $($FoundEmployeeID) to Employee Archive Folder" -output true + $MoveFolderResp | ConvertFrom-Json | Out-Null + Write-Log "Successfully moved transferred employee content $($FoundEmployee.name) with User ID: $($FoundEmployeeID) to '$EmployeeArchiveFolderName' folder with ID: $EmployeeArchiveFolderID." -output true + Write-Log $MoveFolderResp } catch { - Write-Log "Skipping this employee. Could not move transfered folder with ID: $TransferredFolder to $EmployeeArchiveFolderName folder with ID: $EmployeeArchiveFolderID. See log for details." -errorMessage $MoveFolderResp -output true -color Red + Write-Log "Skipping this employee. Could not move transferred folder with ID: $TransferredFolder to $EmployeeArchiveFolderName folder with ID: $EmployeeArchiveFolderID. See log for details." -errorMessage $MoveFolderResp -output true -color Red continue } } # Delete user try { - $DeleteUserResp = "$(box users:delete $FoundEmployeeID --json 2>&1)" - Write-Log "Deleted employee $($FoundEmployee.name) with ID: $($FoundEmployeeID)" -output true + # Because of the "-q" flag, the users:delete command returns an error if it occurs or null otherwise + $DeleteUserResp = "$(box users:delete $FoundEmployeeID -q 2>&1)" + if(!$DeleteUserResp) { + Write-Log "Successfully deleted employee $($FoundEmployee.name) with ID: $($FoundEmployeeID)." -output true + } else { + Write-Log "Could not delete employee $($FoundEmployee.name) with ID: $($FoundEmployeeID). See log for details." -errorMessage $DeleteUserResp -output true -color Red + continue + } } catch { Write-Log "Could not delete employee $($FoundEmployee.name) with ID: $($FoundEmployeeID). See log for details." -errorMessage $DeleteUserResp -output true -color Red continue } } - Write-Log "complete" + Write-Log "Complete User Deprovisioning script." } Start-Script