Skip to content

Instantly share code, notes, and snippets.

View jschlackman's full-sized avatar

James Schlackman jschlackman

View GitHub Profile
#Requires -Module @{ModuleName='ExchangeOnlineManagement'; ModuleVersion='1.0.1'}
<#
.SYNOPSIS
Gets and optionally exports members of an Exchange Online distribution list or shared mailbox.
.DESCRIPTION
Gets members of an Exchange Online distribution list or shared mailbox, looks up the recipient/delegate details, and presents them to the user for optional export.
<#
.SYNOPSIS
Downloads an .msi installer from an internet resource and installs it.
.DESCRIPTION
Downloads a signed .msi installer from an internet resource, validates the downloaded file's signature,
and silently installs it with the option to pass specified arguments.
Author: James Schlackman <james@schlackman.org>
<#
.SYNOPSIS
Create a basic self-signed certificate for "testing" purposes and save it in a password-protected PFX file.
.DESCRIPTION
Author: James Schlackman
Last Modified: Oct 15 2025
.PARAMETER DnsName
@jschlackman
jschlackman / Remove_VMwareTools.ps1
Last active September 23, 2025 23:45 — forked from broestls/Remove_VMwareTools.ps1
Force removal of VMware Tools, Program Files, and Windows Services
# This script will manually rip out all VMware Tools registry entries and files for Windows 2008-2019
# Tested for 2019, 2016, and probably works on 2012 R2 after the 2016 fixes.
# This function pulls out the common ID used for most of the VMware registry entries along with the ID
# associated with the MSI for VMware Tools.
function Get-VMwareToolsInstallerID {
foreach ($item in $(Get-ChildItem Registry::HKEY_CLASSES_ROOT\Installer\Products)) {
If ($item.GetValue('ProductName') -eq 'VMware Tools') {
return @{
reg_id = $item.PSChildName;
<#
.SYNOPSIS
Retrieves all Exchange inbox rules that forward messages to another recipient.
.DESCRIPTION
Author: James Schlackman <james@schlackman.org>
Last Modified: Oct 29 2025
.PARAMETER OutputPath
Path to optional CSV export file.
<#
.SYNOPSIS
Retrieves all mailboxes from Exchange that have automatic forwarding configured at the mailbox level.
.DESCRIPTION
Author: James Schlackman <james@schlackman.org>
Last Modified: Oct 29 2025
.PARAMETER OutputPath
Path to optional CSV export file.
<#
.SYNOPSIS
Assigns an imported list of users to an Okta application using the Okta API.
.DESCRIPTION
Imports a list of users from a CSV file, matches it against existing Okta users, and sets application assignments for each user in a specified application.
Author: James Schlackman <james@schlackman.org>
Last Modified: Oct 29 2025
<#
.SYNOPSIS
Run a PowerShell command in the 64-bit host.
.DESCRIPTION
When called from a 32-bit host executable, the specified command block will be run using the 64-bit Powershell host.
If called from a 64-bit host, the command is simply run in the current host.
.PARAMETER CommandBlock
Command block to execute.
@jschlackman
jschlackman / Remove-DeletedAdObject.ps1
Created January 16, 2025 02:02
List all objects in the Active Directory Recycle Bin and allow selection of an object to be permanently removed immediately
Get-AdObject -Filter 'IsDeleted -eq $True' -IncludeDeletedObjects -Properties * | Out-GridView -OutputMode Single | Remove-ADObject
@jschlackman
jschlackman / Enroll-EntraJoinedToIntune.ps1
Created January 16, 2025 01:58
Trigger Intune enrollment for Entra-joined devices that were not configured for automatic enrollment on initial join
# Check enrollment URLs at
# https://intune.microsoft.com/#view/Microsoft_AAD_IAM/MdmConfiguration.ReactView/appId/0000000a-0000-0000-c000-000000000000/appName/Microsoft.Intune
# Set MDM Enrollment URLs
$joinedTenantKey = (Get-ChildItem 'HKLM:\SYSTEM\CurrentControlSet\Control\CloudDomainJoin\TenantInfo')
$joinedTenantKey | New-ItemProperty -Name 'MdmTermsOfUseUrl' -Value 'https://portal.manage.microsoft.com/TermsofUse.aspx' -PropertyType String -Force
$joinedTenantKey | New-ItemProperty -Name 'MdmEnrollmentUrl' -Value 'https://enrollment.manage.microsoft.com/enrollmentserver/discovery.svc' -PropertyType String -Force
$joinedTenantKey | New-ItemProperty -Name 'MdmComplianceUrl' -Value 'https://portal.manage.microsoft.com/?portalAction=Compliance' -PropertyType String -Force