<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dmytro Poliakov</title>
    <description>The latest articles on DEV Community by Dmytro Poliakov (@dm_poliakov_6c527410).</description>
    <link>https://dev.to/dm_poliakov_6c527410</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3848186%2Fbe99eb90-4d55-49f2-b8d4-b40e0c4f89ad.jpg</url>
      <title>DEV Community: Dmytro Poliakov</title>
      <link>https://dev.to/dm_poliakov_6c527410</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dm_poliakov_6c527410"/>
    <language>en</language>
    <item>
      <title>Beyond the "Access Denied": A SysAdmin’s Guide to SCCM Client Push Failures</title>
      <dc:creator>Dmytro Poliakov</dc:creator>
      <pubDate>Tue, 14 Apr 2026 07:52:27 +0000</pubDate>
      <link>https://dev.to/dm_poliakov_6c527410/beyond-the-access-denied-a-sysadmins-guide-to-sccm-client-push-failures-532k</link>
      <guid>https://dev.to/dm_poliakov_6c527410/beyond-the-access-denied-a-sysadmins-guide-to-sccm-client-push-failures-532k</guid>
      <description>&lt;p&gt;The struggle is real. You click "Install Client" in the MECM console, and you're met with a wall of silence. No client, no errors in the console, just a "No" that refuses to turn into a "Yes."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc8e9tafxpli6gxbb3qec.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc8e9tafxpli6gxbb3qec.png" alt=" " width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I spent the last few weeks troubleshooting some particularly nasty deployment issues: from Kerberos "ghosts" to security agents that act like brick walls. I decided to document the entire process on my blog, Hidden Obelisk, to help anyone else currently staring at a cryptic ccm.log.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s inside the deep dive:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Decoding ccm.log:&lt;/strong&gt; How to find the specific "Request Block" and identify the "Cliff", the exact line where the installation dies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Kerberos Trap:&lt;/strong&gt; Why a simple time drift (even 5 minutes) can make a healthy network look like it's completely broken.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Hidden Blocker (AV/EDR):&lt;/strong&gt; A real-case analysis of how ESET and other security solutions can silently kill a Client Push, throwing misleading error codes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Registry Surgery:&lt;/strong&gt; Fixing orphaned agents by manually correcting the AssignedSiteCode in the SMS\Mobile Client branch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The "Tambourine" Era Ends Here&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Stop guessing and stop relying on "magic fixes." If you want a repeatable, 7-step process to get your SCCM clients deployed successfully, this guide is for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check out the full article here:&lt;/strong&gt;&lt;br&gt;
👉 &lt;a href="https://www.hiddenobelisk.com/why-your-sccm-client-isnt-installing-a-step-by-step-fix-for-push-failures/" rel="noopener noreferrer"&gt;Why Your SCCM Client Isn’t Installing: A Step-by-Step Fix&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sccm</category>
      <category>sysadmin</category>
    </item>
    <item>
      <title>Finding Portable Software Across 10,000 Endpoints When SCCM Wasn’t Enough</title>
      <dc:creator>Dmytro Poliakov</dc:creator>
      <pubDate>Sat, 04 Apr 2026 15:48:50 +0000</pubDate>
      <link>https://dev.to/dm_poliakov_6c527410/finding-portable-software-across-10000-endpoints-when-sccm-wasnt-enough-1iag</link>
      <guid>https://dev.to/dm_poliakov_6c527410/finding-portable-software-across-10000-endpoints-when-sccm-wasnt-enough-1iag</guid>
      <description>&lt;p&gt;In a recent legacy cleanup project, I had to deal with a common but tricky problem: portable software that never shows up in standard inventory.&lt;/p&gt;

&lt;p&gt;In our case, it was 1C:Enterprise left on user machines over time, often copied and run without installation.&lt;/p&gt;

&lt;p&gt;The environment is fairly large (~10,000 endpoints), and even though we rely on Microsoft System Center Configuration Manager, it quickly became clear that not everything was visible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Some instances:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;weren’t listed in installed programs&lt;/li&gt;
&lt;li&gt;didn’t appear in SCCM inventory&lt;/li&gt;
&lt;li&gt;existed only as portable copies somewhere on disk&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To get full visibility, I built a simple detection approach using only native Windows tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Group Policy to deploy the logic&lt;/li&gt;
&lt;li&gt;Scheduled Tasks running at system startup&lt;/li&gt;
&lt;li&gt;A VBScript wrapper for silent execution&lt;/li&gt;
&lt;li&gt;PowerShell scanning local drives&lt;/li&gt;
&lt;li&gt;Centralized CSV logging&lt;/li&gt;
&lt;li&gt;Aggregation into a single Excel report&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This approach required no agents and was easy to scale.&lt;/p&gt;

&lt;p&gt;In the end, it helped identify 300+ machines with unauthorized or hidden installations that were completely invisible before.&lt;/p&gt;

&lt;p&gt;I wrote a full step-by-step breakdown with screenshots and scripts here:&lt;br&gt;
&lt;a href="https://www.hiddenobelisk.com/detecting-portable-and-unauthorized-software-with-powershell-and-gpo/" rel="noopener noreferrer"&gt;https://www.hiddenobelisk.com/detecting-portable-and-unauthorized-software-with-powershell-and-gpo/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Would be interested to hear how others handle similar cases when standard tools do not show the full picture.&lt;/p&gt;

</description>
      <category>powershell</category>
      <category>windows</category>
      <category>sysadmin</category>
      <category>security</category>
    </item>
    <item>
      <title>Office 2016 on Windows 11: MSI vs Click-to-Run (A Practical Lab Experiment)</title>
      <dc:creator>Dmytro Poliakov</dc:creator>
      <pubDate>Wed, 01 Apr 2026 09:34:56 +0000</pubDate>
      <link>https://dev.to/dm_poliakov_6c527410/office-2016-on-windows-11-msi-vs-click-to-run-a-practical-lab-experiment-1m6k</link>
      <guid>https://dev.to/dm_poliakov_6c527410/office-2016-on-windows-11-msi-vs-click-to-run-a-practical-lab-experiment-1m6k</guid>
      <description>&lt;p&gt;Working with legacy Office deployments can sometimes lead to unexpected behavior, especially on newer operating systems.&lt;/p&gt;

&lt;p&gt;In a recent lab experiment, I decided to take a closer look at how the MSI-based Office 2016 Volume License version behaves on Windows 11. The goal was simple: reproduce real-world issues and understand what’s actually happening under the hood.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the test environment, Office 2016 (MSI, KMS activated) was deployed on Windows 11 and used in a fairly typical scenario. Files were stored on network shares and accessed through Excel.&lt;/p&gt;

&lt;p&gt;The issue appeared quickly. Excel would intermittently freeze when working with files over the network. Everything looked correct from a configuration standpoint, but the user experience told a different story.&lt;/p&gt;

&lt;p&gt;Interestingly, a Click-to-Run based Office 2016 build in the same environment did not show the same behavior.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Experiment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of jumping to a full migration or switching licensing models, I decided to experiment within a controlled lab setup.&lt;/p&gt;

&lt;p&gt;The idea was to test whether a modern Click-to-Run deployment could improve stability, while still keeping a Volume Licensing activation approach.&lt;/p&gt;

&lt;p&gt;To make testing consistent, I used a custom script to handle the installation, configuration, and activation steps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Changed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The difference between MSI and Click-to-Run turned out to be more significant than expected.&lt;/p&gt;

&lt;p&gt;MSI-based Office 2016 relies on older installation and update mechanisms, while Click-to-Run uses a more modern deployment model with ongoing updates and compatibility improvements.&lt;/p&gt;

&lt;p&gt;In practice, this translated into noticeably better stability when working with network-based files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Results&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After switching to a Click-to-Run build in the lab environment, the freezing issues in Excel disappeared during testing.&lt;/p&gt;

&lt;p&gt;The same files, same network conditions, and same system were used. The only difference was the deployment model.&lt;/p&gt;

&lt;p&gt;From a practical standpoint, this suggests that the underlying installation technology can have a direct impact on application stability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deployment model matters more than it seems&lt;/li&gt;
&lt;li&gt;MSI-based Office 2016 can struggle on modern systems&lt;/li&gt;
&lt;li&gt;Click-to-Run provides better compatibility and stability&lt;/li&gt;
&lt;li&gt;Lab testing can reveal issues that are hard to diagnose in production&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Full Breakdown&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I documented the full process, including the script and configuration used in this experiment:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://www.hiddenobelisk.com/from-office-2016-to-modern-click-to-run-a-practical-migration-approach-using-volume-licensing-in-enterprise-environments/" rel="noopener noreferrer"&gt;https://www.hiddenobelisk.com/from-office-2016-to-modern-click-to-run-a-practical-migration-approach-using-volume-licensing-in-enterprise-environments/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sysadmin</category>
      <category>windows</category>
      <category>office365</category>
      <category>it</category>
    </item>
    <item>
      <title>Deploying Poorly Packaged Applications with PowerShell and SCCM</title>
      <dc:creator>Dmytro Poliakov</dc:creator>
      <pubDate>Tue, 31 Mar 2026 12:01:18 +0000</pubDate>
      <link>https://dev.to/dm_poliakov_6c527410/deploying-poorly-packaged-applications-with-powershell-and-sccm-ni0</link>
      <guid>https://dev.to/dm_poliakov_6c527410/deploying-poorly-packaged-applications-with-powershell-and-sccm-ni0</guid>
      <description>&lt;p&gt;In real-world environments, not all enterprise software comes with a proper installer.&lt;/p&gt;

&lt;p&gt;Recently, I had to deploy a legacy DLP agent that had:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;multiple versions across endpoints&lt;/li&gt;
&lt;li&gt;different ProductCodes&lt;/li&gt;
&lt;li&gt;the same display name&lt;/li&gt;
&lt;li&gt;limited documentation&lt;/li&gt;
&lt;li&gt;and no reliable upgrade path&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Trying to handle this using standard logic in Microsoft SCCM (multiple detection rules, MSI-based upgrades, etc.) quickly became messy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Approach&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of relying on SCCM alone, I moved the logic into a PowerShell-based installer.&lt;/p&gt;

&lt;p&gt;The idea is simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detect if the application is installed&lt;/li&gt;
&lt;li&gt;Check the installed version (via ProductCode)&lt;/li&gt;
&lt;li&gt;Remove anything that doesn’t match the target version&lt;/li&gt;
&lt;li&gt;Install the correct version with required parameters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In SCCM, the detection method stays clean — it only checks for the new version.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why This Works Better&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No need for multiple detection rules&lt;/li&gt;
&lt;li&gt;No leftover versions after upgrades&lt;/li&gt;
&lt;li&gt;Full control over install/uninstall logic&lt;/li&gt;
&lt;li&gt;Works even with poorly packaged or legacy software&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key Idea&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of trying to model every scenario inside SCCM, centralize all logic in a script.&lt;/p&gt;

&lt;p&gt;This makes deployments more predictable and much easier to maintain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full Breakdown&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I wrote a detailed step-by-step guide here (including SCCM setup and scripts):&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://www.hiddenobelisk.com/how-to-deploy-poorly-packaged-applications-using-powershell-and-microsoft-sccm/" rel="noopener noreferrer"&gt;https://www.hiddenobelisk.com/how-to-deploy-poorly-packaged-applications-using-powershell-and-microsoft-sccm/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sccm</category>
      <category>powershell</category>
      <category>sysadmin</category>
      <category>devops</category>
    </item>
    <item>
      <title>Automatically create missing PTR records in Windows DNS using PowerShell</title>
      <dc:creator>Dmytro Poliakov</dc:creator>
      <pubDate>Mon, 30 Mar 2026 07:15:24 +0000</pubDate>
      <link>https://dev.to/dm_poliakov_6c527410/automatically-create-missing-ptr-records-in-windows-dns-using-powershell-4163</link>
      <guid>https://dev.to/dm_poliakov_6c527410/automatically-create-missing-ptr-records-in-windows-dns-using-powershell-4163</guid>
      <description>&lt;p&gt;Dealing with DNS inconsistencies can be frustrating, especially when PTR (reverse DNS) records are missing for existing A records.&lt;/p&gt;

&lt;p&gt;This is a pretty common issue in Windows DNS environments, and it can cause problems with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reverse lookups&lt;/li&gt;
&lt;li&gt;Email systems&lt;/li&gt;
&lt;li&gt;Monitoring and security tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I ran into this recently and decided to automate the fix.&lt;/p&gt;

&lt;p&gt;What the script does&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scans DNS zones for A records&lt;/li&gt;
&lt;li&gt;Detects missing PTR records&lt;/li&gt;
&lt;li&gt;Automatically creates PTR entries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s a simple approach, but it helps keep forward and reverse DNS in sync.&lt;/p&gt;

&lt;p&gt;Example usage&lt;/p&gt;

&lt;p&gt;Run the script in PowerShell with administrative privileges:&lt;/p&gt;

&lt;p&gt;.\create-missing-ptr.ps1&lt;/p&gt;

&lt;p&gt;Why this matters&lt;/p&gt;

&lt;p&gt;In many environments, PTR records are often forgotten or not created automatically.&lt;/p&gt;

&lt;p&gt;Fixing this manually is time-consuming, especially in larger networks.&lt;/p&gt;

&lt;p&gt;Automating it saves time and reduces errors.&lt;/p&gt;

&lt;p&gt;GitHub repository&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Servant-of-Inos" rel="noopener noreferrer"&gt;
        Servant-of-Inos
      &lt;/a&gt; / &lt;a href="https://github.com/Servant-of-Inos/create-missing-ptr-records" rel="noopener noreferrer"&gt;
        create-missing-ptr-records
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Automatically create missing PTR records from A records using PowerShell (Windows DNS)
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;DNS PTR Record Auto Create Script&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;This PowerShell script automatically creates missing PTR (reverse DNS) records for existing A records in a Windows DNS environment.&lt;/p&gt;
&lt;p&gt;Useful for maintaining DNS consistency and avoiding reverse lookup issues in enterprise networks.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Scans DNS zones for A records&lt;/li&gt;
&lt;li&gt;Detects missing PTR records&lt;/li&gt;
&lt;li&gt;Automatically creates PTR records&lt;/li&gt;
&lt;li&gt;Helps maintain forward and reverse DNS consistency&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Use Case&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;In many environments, PTR records are not always created when A records are added.&lt;/p&gt;
&lt;p&gt;This can cause issues with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reverse DNS lookups&lt;/li&gt;
&lt;li&gt;Email systems&lt;/li&gt;
&lt;li&gt;Security tools&lt;/li&gt;
&lt;li&gt;Network troubleshooting&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This script helps fix that automatically.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Usage&lt;/h2&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Run PowerShell as Administrator&lt;/li&gt;
&lt;li&gt;Execute the script:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight highlight-source-powershell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;.\create&lt;span class="pl-k"&gt;-&lt;/span&gt;missing&lt;span class="pl-k"&gt;-&lt;/span&gt;ptr.ps1&lt;/pre&gt;

&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;Review output and confirm changes&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Requirements&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows DNS Server&lt;/li&gt;
&lt;li&gt;PowerShell&lt;/li&gt;
&lt;li&gt;Administrator privileges&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Full Guide&lt;/p&gt;
&lt;p&gt;For a detailed step-by-step explanation, see the full article:&lt;/p&gt;
&lt;p&gt;👉 &lt;a href="https://www.hiddenobelisk.com/how-to-automatically-create-missing-ptr-records-for-a-records-in-windows-dns-powershell-script/" rel="nofollow noopener noreferrer"&gt;https://www.hiddenobelisk.com/how-to-automatically-create-missing-ptr-records-for-a-records-in-windows-dns-powershell-script/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Disclaimer&lt;/p&gt;
&lt;p&gt;Test in a safe environment before running in production.
Use at your own risk.&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Servant-of-Inos/create-missing-ptr-records" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;Full guide&lt;/p&gt;

&lt;p&gt;I also wrote a full step-by-step explanation here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.hiddenobelisk.com/how-to-automatically-create-missing-ptr-records-for-a-records-in-windows-dns-powershell-script/" rel="noopener noreferrer"&gt;https://www.hiddenobelisk.com/how-to-automatically-create-missing-ptr-records-for-a-records-in-windows-dns-powershell-script/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How do you usually handle PTR record management in your environments — manual, scripts, or something else?&lt;/p&gt;

</description>
      <category>powershell</category>
      <category>sysadmin</category>
      <category>networking</category>
      <category>dns</category>
    </item>
    <item>
      <title>Mass phishing cleanup in on-prem Exchange with PowerShell</title>
      <dc:creator>Dmytro Poliakov</dc:creator>
      <pubDate>Sat, 28 Mar 2026 19:23:20 +0000</pubDate>
      <link>https://dev.to/dm_poliakov_6c527410/mass-phishing-cleanup-in-on-prem-exchange-with-powershell-19j</link>
      <guid>https://dev.to/dm_poliakov_6c527410/mass-phishing-cleanup-in-on-prem-exchange-with-powershell-19j</guid>
      <description>&lt;p&gt;Dealing with phishing incidents in on-prem Exchange environments can quickly turn into a nightmare, especially when you need to remove malicious emails across multiple mailboxes.&lt;/p&gt;

&lt;p&gt;Manual cleanup is slow, error-prone, and not really an option when time matters.&lt;/p&gt;

&lt;p&gt;Recently I had to handle exactly this situation, so I put together a simple PowerShell script to speed things up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the script does:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Searches for phishing emails across mailboxes&lt;/li&gt;
&lt;li&gt;Removes them using Exchange Management Shell&lt;/li&gt;
&lt;li&gt;Helps automate incident response&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nothing overly complex, but very useful in real-world scenarios.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example usage&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Run the script from Exchange Management Shell:&lt;/p&gt;

&lt;p&gt;powershell:&lt;br&gt;
.\cleanup-phishing.ps1&lt;/p&gt;

&lt;p&gt;Why this matters&lt;/p&gt;

&lt;p&gt;If you've ever dealt with phishing in a corporate environment, you know how painful cleanup can be.&lt;/p&gt;

&lt;p&gt;Automating even a small part of the process can save a lot of time and reduce human error.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub repository&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can find the script here:&lt;br&gt;
&lt;a href="https://github.com/Servant-of-Inos/exchange-phishing-cleanup-script" rel="noopener noreferrer"&gt;https://github.com/Servant-of-Inos/exchange-phishing-cleanup-script&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full step-by-step guide&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I also wrote a detailed guide explaining how it works and how to use it safely:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.hiddenobelisk.com/mass-phishing-cleanup-script-for-on-premises-exchange-2010-2016-2019/" rel="noopener noreferrer"&gt;https://www.hiddenobelisk.com/mass-phishing-cleanup-script-for-on-premises-exchange-2010-2016-2019/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Curious how others handle phishing cleanup in Exchange — do you rely on scripts, tools, or manual processes?&lt;/p&gt;

</description>
      <category>powershell</category>
      <category>sysadmin</category>
      <category>security</category>
      <category>exchange</category>
    </item>
  </channel>
</rss>
