v1.0 = Production Version

+ Production Version
This commit is contained in:
Zack T
2018-08-17 15:03:45 -07:00
parent 97b4e453bb
commit c516949c19

View File

@@ -0,0 +1,133 @@
<#
Script Name: jamf_QuickAddInvitations.ps1
By: Zack Thompson / Created: 8/17/2018
Version: 1.0 / Updated: 8/17/2018 / By: ZT
Description: This script gets all QuickAdd created Computer Invitations and exports them to a file. The file can be review and the desired IDs provided back to the script, via the file, to be deleted.
#>
Write-Host "jamf_QuickAddInvitations Process: START"
# ============================================================
# Define Variables
# ============================================================
# Setup Credentials
$jamfAPIUser = $(Read-Host "JPS Account")
$jamfAPIPassword = $(Read-Host -AsSecureString "JPS Password")
$APIcredentials = New-Object TypeName System.Management.Automation.PSCredential ArgumentList $jamfAPIUser, $jamfAPIPassword
# Setup API URLs
$jamfPS = "https://jps.company.com:8443"
$getInvitations = "${jamfPS}/JSSResource/computerinvitations"
$getInvitation = "${jamfPS}/JSSResource/computerinvitations/id"
# ============================================================
# Functions
# ============================================================
Function Prompt {
$Title = "Choose Action";
$Message = "Choose which action:"
$Option1 = New-Object System.Management.Automation.Host.ChoiceDescription "&Get";
$Option2 = New-Object System.Management.Automation.Host.ChoiceDescription "&Delete";
$Options = [System.Management.Automation.Host.ChoiceDescription[]]($Option1,$Option2);
$script:Answer = $Host.UI.PromptForChoice($Title,$Message,$Options,0)
}
function getAllInvitations($workingDirectory) {
# Get all the Policies
$objectOf_AllInvitations = Invoke-RestMethod -Uri "${getInvitations}" -Method Get -Credential $APIcredentials
$matchedInvites = @()
# Loop through each Policy
ForEach ($Invite in $objectOf_AllInvitations.computer_invitations.computer_invitation) {
# Get the configuration of each Policy
$objectOf_Invite = Invoke-RestMethod -Uri "${getInvitation}/$(${Invite}.id)" -Method Get -Credential $APIcredentials
# If the Site is 'NONE' and is a Self Service Policy...
If ( $objectOf_Invite.computer_invitation.invitation_type -ne "USER_INITIATED_EMAIL" -and $objectOf_Invite.computer_invitation.invitation_type -ne "USER_INITIATED_URL" ) {
# Build an object of details we want to export for each Policy
$matchedInvites = New-Object PSObject -Property @{
id = $objectOf_Invite.computer_invitation.id
invitation_type = $objectOf_Invite.computer_invitation.invitation_type
multiple_uses_allowed = $objectOf_Invite.computer_invitation.multiple_uses_allowed
times_used = $objectOf_Invite.computer_invitation.times_used
enroll_into_site = $objectOf_Invite.computer_invitation.enroll_into_site.name
}
# Export each Policy object
Export-Csv -InputObject $matchedInvites -Path "${workingDirectory}\InvitesNew.csv" -Append -NoTypeInformation
}
}
Write-Host "All Invites have been processed."
}
function deleteInvitations($inviteFile) {
# Import the file provided
$invitesToDelete = Import-Csv -Path $inviteFile
# Loop through each record
ForEach ($Invite in $invitesToDelete) {
# Expire Invitation IDs
Try {
$Response = Invoke-RestMethod -Uri "${getInvitation}/$(${Invite}.id)" -Method Delete -Credential $APIcredentials -Body $upload_PolicyConfig -ErrorVariable RestError -ErrorAction SilentlyContinue
}
Catch {
$statusCode = $_.Exception.Response.StatusCode.value__
$statusDescription = $_.Exception.Response.StatusDescription
If ($statusCode -notcontains "200") {
Write-host " -> Failed to Expire Invite ID: $($Invite.id)..."
Write-Host " -> Response: ${statusCode}/${statusDescription}"
}
}
}
Write-Host "All Policies have been updated!"
}
# ============================================================
# Bits Staged...
# ============================================================
# Verify credentials that were provided by doing an API call and checking the result to verify permissions.
Write-Host "Verifying API credentials..."
Try {
$Response = Invoke-RestMethod -Uri "${jamfPS}/JSSResource/jssuser" -Method Get -Credential $APIcredentials -ErrorVariable RestError -ErrorAction SilentlyContinue
}
Catch {
$statusCode = $_.Exception.Response.StatusCode.value__
$statusDescription = $_.Exception.Response.StatusDescription
If ($statusCode -notcontains "200") {
Write-Host "ERROR: Invalid Credentials or permissions."
Write-Host "Response: ${statusCode}/${statusDescription}"
Write-Host "jamf_MoveSites Process: FAILED"
Exit
}
}
Write-Host "API Credentials Valid -- continuing..."
# Prompt what action to perform
Prompt
# Request list of devices and call Update function for each device type
switch ($Answer) {
0 {
$saveDirectory = ($(Read-Host "Save Directiory") -replace '"')
getAllInvitations "${saveDirectory}"
}
1 {
$readFile = ($(Read-Host "Please provide Policy File") -replace '"')
deleteInvitations "${readFile}"
}
}
Write-Host "jamf_QuickAddInvitations Process: COMPLETE"