Skip to content

Instantly share code, notes, and snippets.

View jschlackman's full-sized avatar

James Schlackman jschlackman

View GitHub Profile
<#
.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 <[email protected]>
<#
.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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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
<#
.SYNOPSIS
Retrieves an audit of MX, SPF, and DMARC records from public DNS for a given list of domains.
.DESCRIPTION
Author: James Schlackman
Last Modified: March 20 2025
.PARAMETER DomainPath
Pathname to CSV file with list of domains to check.