Skip to content

Instantly share code, notes, and snippets.

View jschlackman's full-sized avatar

James Schlackman jschlackman

View GitHub Profile
<#
.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.
<#
.SYNOPSIS
Starts automatic update for all installed Visual Studio instances.
.DESCRIPTION
Gets details of all current Visual Studio installs on this machine and attempts to run the updater for each installation found.
This script can be run using Task Scheduler or an RMM to periodicially check for and apply Visual Studio updates.
Author: James Schlackman <[email protected]>
Last Modified: March 6 2025