<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel>
        <copyright>Copyright TechTarget - All rights reserved</copyright>
        <description></description>
        <docs>https://cyber.law.harvard.edu/rss/rss.html</docs>
        <generator>Techtarget Feed Generator</generator>
        <language>en</language>
        <lastBuildDate>Sun, 15 Mar 2026 22:59:15 GMT</lastBuildDate>
        <link>https://www.techtarget.com/searchwindowsserver</link>
        <managingEditor>editor@techtarget.com</managingEditor>
        <item>
            <body>&lt;p&gt;When Windows 11 Remote Desktop sessions freeze, the impact extends beyond individual users. For IT leaders responsible for endpoint management and hybrid workforce productivity, frozen remote sessions can interrupt access to business-critical applications and delay operational workflows.&lt;/p&gt; 
&lt;p&gt;Problems with the Remote Desktop client -- MSTSC.EXE -- on Windows 11 can lead to freezing and hanging sessions. When sessions hang, employees can lose access to line-of-business applications, internal systems and enterprise data hosted in remote environments.&lt;/p&gt; 
&lt;p&gt;Some general remote desktop best practices, such as making sure remote desktop users have a strong network connection with low latency and accounting for external peripheral hardware, can resolve some of these issues. However, a recent Remote Desktop Protocol (&lt;a href="https://www.techtarget.com/searchenterprisedesktop/definition/Remote-Desktop-Protocol-RDP"&gt;RDP&lt;/a&gt;) issue has made frozen sessions much more common.&lt;/p&gt; 
&lt;p&gt;This freezing on Windows 11 is tied to the Windows 11 22H2 release. While Microsoft addressed the underlying bug in later cumulative updates, organizations with inconsistent endpoint patch levels or mixed device configurations can still encounter the issue.&lt;/p&gt; 
&lt;section class="section main-article-chapter" data-menu-title="How to fix an RDP session that keeps freezing"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;How to fix an RDP session that keeps freezing&lt;/h2&gt;
 &lt;p&gt;Microsoft RDP can &lt;a href="https://www.techtarget.com/searchvirtualdesktop/answer/What-are-the-differences-between-TCP-and-UDP"&gt;run on TCP or UDP&lt;/a&gt;, with UDP delivering a more stable connection. However, UDP is tied to the Windows 11 22H2 release issue. Remote desktop administrators can disable UDP with Group Policies as a workaround if they cannot apply the KB5022360 update to all of their clients.&lt;/p&gt;
 &lt;p&gt;To do this, create a &lt;a href="https://www.techtarget.com/searchwindowsserver/definition/Group-Policy-Object"&gt;Group Policy Object &lt;/a&gt;and browse to Computer Configuration &amp;gt; Administrative templates &amp;gt; Windows components &amp;gt; Remote Desktop Services &amp;gt; Remote Desktop Connection client.&lt;b&gt; &lt;/b&gt;Here, select the group policy &lt;b&gt;Turn Off UDP On Client &lt;/b&gt;and enable the policy (Figure 1).&lt;/p&gt;
 &lt;p&gt;This fix is just a workaround for the underlying problem, however, so running &lt;strong data-end="725" data-start="707"&gt;Windows Update&lt;/strong&gt; is the preferred and more permanent option.&lt;/p&gt;
 &lt;figure class="main-article-image half-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/windows_remote_desktop_freezing_fix-h.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/windows_remote_desktop_freezing_fix-h_half_column_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/windows_remote_desktop_freezing_fix-h_half_column_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/windows_remote_desktop_freezing_fix-h.jpg 1280w" alt="Group Policy Editor showing the Turn Off UDP On Client setting for the Remote Desktop Connection client." height="158" width="280"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Figure 1. Group Policy setting Turn Off UDP On Client in the Remote Desktop Connection client configuration.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
&lt;/section&gt;     
&lt;section class="section main-article-chapter" data-menu-title="Consider desktop environments beyond traditional RDP"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Consider desktop environments beyond traditional RDP&lt;/h2&gt;
 &lt;p&gt;Many organizations now rely on hosted desktop environments such as &lt;a href="https://www.techtarget.com/searchvirtualdesktop/tip/Comparing-Windows-365-vs-Azure-Virtual-Desktop"&gt;Azure Virtual Desktop or Windows 365&lt;/a&gt; instead of connecting directly to physical machines. While these platforms still rely on the Remote Desktop Protocol, the infrastructure supporting the connection is managed in the cloud. If freezing issues occur in these environments, administrators should review host session health, client versions and endpoint network conditions to determine whether the issue originates from the endpoint device or the hosted desktop environment.&lt;/p&gt;
 &lt;p&gt;Troubleshooting remote desktops in these environments often starts with the same fundamentals as traditional RDP sessions: validating endpoint connectivity, confirming the client software version and verifying that recent Windows updates have been applied. Administrators should also check platform-specific monitoring tools to determine whether the issue stems from the endpoint device, the session host or the broader remote desktop infrastructure.&lt;/p&gt;
&lt;/section&gt;   
&lt;section class="section main-article-chapter" data-menu-title="How to deploy the latest Windows updates to all remote desktops"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;How to deploy the latest Windows updates to all remote desktops&lt;/h2&gt;
 &lt;p&gt;Maintaining consistent Windows update levels across a distributed device fleet can be challenging, especially in hybrid environments where laptops often operate outside the corporate network for extended periods. This is especially true for the common hybrid work environment with laptops that aren't domain-joined but &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/What-should-admins-know-about-Microsoft-Entra-features"&gt;Microsoft Entra ID hybrid-joined&lt;/a&gt;.&lt;/p&gt;
 &lt;p&gt;Windows administrators used to roll out Windows updates with &lt;a href="https://www.techtarget.com/searchwindowsserver/definition/Windows-Server-Update-Services-WSUS"&gt;Windows Server Update Services&lt;/a&gt; on all machines, but now they need new methods to ensure all machines have the updates. This is especially important for updates that have a significant effect on performance and UX, such as the update that fixed the freezing issue.&lt;/p&gt;
 &lt;p&gt;Windows Update for Business, which integrates with Microsoft Intune endpoint management, allows administrators to monitor update compliance across Windows devices and verify that clients are running builds that address stability issues. With Windows Update for Business, it's possible to run reports &lt;a href="https://www.techtarget.com/searchenterprisedesktop/tip/How-to-add-and-enroll-devices-to-Microsoft-Intune"&gt;on all Intune-enrolled Windows 11 client devices&lt;/a&gt; and check if they are running the latest Windows 11 build with the issue fixed. IT administrators should use Intune or a management tool with similar capabilities to Windows Update for Business to &lt;a target="_blank" href="https://learn.microsoft.com/en-us/mem/intune/protect/windows-update-reports" rel="noopener"&gt;check&lt;/a&gt; the compliance of end-user devices.&amp;nbsp; &amp;nbsp;&lt;/p&gt;
 &lt;p&gt;In hybrid work environments, consistent patching and endpoint configuration management are critical to maintaining reliable remote access experiences for distributed employees.&lt;/p&gt;
 &lt;blockquote class="main-article-pullquote"&gt;
  &lt;div class="main-article-pullquote-inner"&gt;
   &lt;figure&gt;
    Frozen remote sessions can interrupt access to business-critical applications and delay operational workflows.
   &lt;/figure&gt;
   &lt;i class="icon" data-icon="z"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/blockquote&gt;
&lt;/section&gt;      
&lt;section class="section main-article-chapter" data-menu-title="How to manage Windows updates to prevent version inconsistency"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;How to manage Windows updates to prevent version inconsistency&lt;/h2&gt;
 &lt;p data-end="774" data-start="544"&gt;To proactively prevent these version consistency issues, admins can manage Windows update rollouts. This way, if Windows releases a harmful or malfunctioning Windows build, desktop administrators can block it from being installed.&lt;/p&gt;
 &lt;p data-end="1476" data-start="776"&gt;Admins should also test every release and Windows update before deploying it within their organization. Make sure a test script can run on a test device when a new update is released and keep the RDP client open for an extended period during testing.&lt;/p&gt;
 &lt;p data-end="1476" data-start="776"&gt;While this process can be time-consuming, testing new Windows builds against remote access workflows and critical enterprise applications helps IT teams identify stability issues early and maintain reliable remote connectivity across the organization. As remote access continues to support hybrid work environments, maintaining consistent endpoint configurations and update policies is essential to ensuring remote desktop reliability at scale.&lt;/p&gt;
 &lt;p data-end="1476" data-start="776"&gt;&lt;em&gt;&lt;strong data-end="268" data-start="250"&gt;Editor's note:&lt;/strong&gt; This article was updated to reflect current Windows Remote Desktop environments and expanded to include guidance for cloud-hosted desktop platforms. &lt;/em&gt;&lt;/p&gt;
 &lt;p&gt;&lt;i&gt;Chris Twiest works as a technology officer at RawWorks in the Netherlands, focusing on the standardization and automation of IT services.&lt;/i&gt;&lt;/p&gt;
&lt;/section&gt;</body>
            <description>Windows 11 Remote Desktop sessions can freeze due to updates, configuration issues or network problems. Learn how IT admins can troubleshoot and prevent RDP freezes.</description>
            <image>https://cdn.ttgtmedia.com/rms/onlineimages/check_g1268128622.jpg</image>
            <link>https://www.techtarget.com/searchvirtualdesktop/tip/What-to-do-when-a-Windows-11-remote-desktop-keeps-freezing</link>
            <pubDate>Thu, 05 Mar 2026 19:25:00 GMT</pubDate>
            <title>What to do when a Windows 11 Remote Desktop keeps freezing</title>
        </item>
        <item>
            <body>&lt;p&gt;What exactly is the Microsoft Applied Skills program -- a certificate, a badge, a bootcamp? Not quite. This program's credentials, as Microsoft refers to them, sit alongside traditional certifications but serve a different purpose.&lt;/p&gt; 
&lt;p&gt;Introduced in 2023 as a complement to Microsoft's existing certification programs, Applied Skills are designed for users with hands-on experience in Microsoft technologies. Rather than providing broad, role-based knowledge, these credentials focus on specific, scenario-based tasks that professionals encounter in day-to-day &lt;a href="https://www.techtarget.com/searchitoperations/definition/IT-operations"&gt;IT operations&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;In this article, we'll explore what you can learn through the Applied Skills program, how it stands apart from Microsoft's certifications program and why it's quickly gaining traction among IT professionals.&lt;/p&gt; 
&lt;section class="section main-article-chapter" data-menu-title="Overview of the Microsoft Applied Skills program"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Overview of the Microsoft Applied Skills program&lt;/h2&gt;
 &lt;p&gt;Microsoft's Applied Skills program offers a quicker, more targeted alternative to traditional certifications. These credentials are meant to validate practical skills, proving an applicant has the ability to apply hands-on knowledge to real-world tasks -- particularly within Azure.&lt;/p&gt;
 &lt;p&gt;While not a replacement for full certifications, Applied Skills credentials can serve as a bridge to help individuals &lt;a href="https://www.techtarget.com/searchcloudcomputing/infographic/By-the-numbers-How-upskilling-fills-the-IT-skills-gap"&gt;upskill in specific areas&lt;/a&gt;, explore new technologies or reinforce existing expertise.&lt;/p&gt;
 &lt;p&gt;For hiring managers, these credentials provide a quick way to identify candidates with proven abilities in relevant skill areas, offering insight into an individual's practical expertise in niche tasks. For individuals, Applied Skills credentials can be a way to learn new skills in their current role or to validate skills they already have. The program is also well suited for anyone &lt;a href="https://www.techtarget.com/whatis/feature/Best-entry-level-tech-jobs"&gt;starting out in a career&lt;/a&gt; or moving into a role where they don't have experience.&lt;/p&gt;
&lt;/section&gt;    
&lt;section class="section main-article-chapter" data-menu-title="Microsoft Applied Skills learning pathways"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Microsoft Applied Skills learning pathways&lt;/h2&gt;
 &lt;p&gt;The Applied Skills program has expanded rapidly since it was publicly launched in October 2023 with eight credentials. As of December 2025, it now certifies 40 skills across six subject areas: application development, artificial intelligence, business applications, data management, security and technical infrastructure. Note that some skills apply to more than one subject.&lt;/p&gt;
 &lt;p&gt;The following table provides an overview of the subject areas and example skills within each.&lt;/p&gt;
 &lt;p&gt;&lt;iframe title="Microsoft Applied Skills overview" aria-label="Table" id="datawrapper-chart-XwXhz" src="https://datawrapper.dwcdn.net/XwXhz/1/" scrolling="no" frameborder="0" style="width: 0; min-width: 100% !important; border: none;" height="475" data-external="1"&gt;&lt;/iframe&gt;&lt;/p&gt;
 &lt;p&gt; &lt;script type="text/javascript"&gt;window.addEventListener("message",function(a){if(void 0!==a.data["datawrapper-height"]){var e=document.querySelectorAll("iframe");for(var t in a.data["datawrapper-height"])for(var r,i=0;r=e[i];i++)if(r.contentWindow===a.source){var d=a.data["datawrapper-height"][t]+"px";r.style.height=d}}});&lt;/script&gt; &lt;/p&gt;
&lt;/section&gt;     
&lt;section class="section main-article-chapter" data-menu-title="Microsoft Applied Skills vs. Microsoft Certifications: Key differences"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Microsoft Applied Skills vs. Microsoft Certifications: Key differences&lt;/h2&gt;
 &lt;p&gt;Applied Skills are more specialized than Microsoft's &lt;a target="_blank" href="https://learn.microsoft.com/en-us/credentials/browse/?credential_types=certification" rel="noopener"&gt;traditional certifications&lt;/a&gt;, which tend to cover the broader aspects of a job role. Here's how they compare in a few key areas:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;&lt;b&gt;Cost.&lt;/b&gt; At this time, Applied Skills are free, which makes them an easy choice for exploring new areas.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Time.&lt;/b&gt; Certifications might require 20-plus hours of study, but Applied Skills learning paths typically take only 4-5 hours.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Scope.&lt;/b&gt; While Applied Skills are targeted in scope, certifications cover a broad range of knowledge. Think of it as a skill vs. a skillset: The scope of Applied Skills is a scenario, whereas the scope of a certification encompasses many skills and contextualized knowledge.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Application.&lt;/b&gt; Applied Skills can be extremely valuable for people working in deployments and similar technical projects, as well as for those in operational roles that involve building and maintaining technologies. Certifications might involve broader content, wider context, interactions with other technologies and governance. This makes certifications beneficial to a broader variety of roles, including managers or those with a large technical remit, such as architects.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Assessment.&lt;/b&gt; The evaluation process also differs between the two options. Certifications use the traditional assessment exam, administered either at a testing center or using a remote proctored exam. The Applied Skills program provides a virtual lab where keyboard and mouse strokes are captured as certain tasks are completed.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Expiry.&lt;/b&gt; As of now, Applied Skills do not have an expiration date, making them a lasting credential for targeted expertise.&lt;/li&gt; 
 &lt;/ul&gt;
&lt;/section&gt;   
&lt;section class="section main-article-chapter" data-menu-title="Benefits of earning Applied Skills credentials"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Benefits of earning Applied Skills credentials&lt;/h2&gt;
 &lt;p&gt;Since Applied Skills are a new offering and market familiarity is not yet fully established, they might not be as in-demand or listed in job descriptions as many traditional certifications are. But these credentials still offer some solid benefits. The scenario-specific nature of Applied Skills credentials means they're better suited for &lt;a href="https://www.techtarget.com/searchitoperations/feature/IT-operations-manager-vs-specialist-Compare-roles-and-skills"&gt;project-based or specialized roles&lt;/a&gt; rather than positions requiring a broader technical foundation. However, these credentials provide hands-on, practical knowledge that's immediately useful for day-to-day tasks.&lt;/p&gt;
 &lt;p&gt;This program has also grown rapidly, so the scope of offerings is likely to expand -- as will industry awareness. Applied Skills are also a great way to validate specific abilities, which can help professionals stand out when applying for specialized roles, promotions or salary increases. Because they're easily shareable on platforms such as LinkedIn, these credentials are convenient for professionals looking to showcase their skills to a wider audience.&lt;/p&gt;
&lt;/section&gt;   
&lt;section class="section main-article-chapter" data-menu-title="Preparing for and completing the online lab assessments"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Preparing for and completing the online lab assessments&lt;/h2&gt;
 &lt;p&gt;Getting started with Applied Skills is straightforward. Microsoft Learn offers learning paths for each skill. There are no prerequisites for these, but related certifications or familiarity with the tools involved can be beneficial for understanding the content and passing the labs, as the skills are generally aimed at intermediate and advanced users.&lt;/p&gt;
 &lt;p&gt;Once you're ready to take the assessment, you will have two hours to complete approximately 12-16 tasks within the interactive lab. The exact passing score varies based on the difficulty of the questions asked. Note that the labs are scored based on the result rather than the methods used, unless specifically stipulated. For example, a lab might include an option to use either a web portal or PowerShell, and the user's choice would have no influence on the lab score.&lt;/p&gt;
 &lt;p&gt;Once the lab is closed, pass/fail grading commences immediately, and you will receive either a pass or fail result with a breakdown of your performance across various areas. This will not show exact answers, but it will suggest follow-up learning to help you improve in weaker areas. This can take up to 24 hours to appear in your Microsoft Learn profile.&lt;/p&gt;
 &lt;p&gt;In summary, Microsoft's Applied Skills program is a practical tool for IT professionals designed to fit into a busy schedule and can help IT teams and managers &lt;a href="https://www.techtarget.com/searchitoperations/feature/The-most-in-demand-tech-skills-for-IT-ops-careers"&gt;keep pace with changing technology&lt;/a&gt; without the commitment of full certification.&lt;/p&gt;
 &lt;p&gt;&lt;i&gt;Dwayne Rendell is a senior technical customer success manager for an Australian cybersecurity MSP. He has more than 15 years of experience in IT and specializes in service delivery, value realization and operations management of digital service portfolios. Dwayne has experience in multiple sectors, including health and government. He holds an MBA from the Australian Institute of Business.&lt;/i&gt;&lt;/p&gt;
&lt;/section&gt;</body>
            <description>Microsoft's Applied Skills help IT pros validate hands-on technical expertise and real-world skills. But what sets these credentials apart from traditional certifications?</description>
            <image>https://cdn.ttgtmedia.com/rms/onlineimages/certification_g1134366943.jpg</image>
            <link>https://www.techtarget.com/searchwindowsserver/tip/Microsoft-Applied-Skills-program-puts-expertise-to-the-test</link>
            <pubDate>Thu, 18 Dec 2025 09:40:00 GMT</pubDate>
            <title>Microsoft Applied Skills program puts expertise to the test</title>
        </item>
        <item>
            <body>&lt;p&gt;Although AD traditionally serves as the central authority for managing users, computers and security within an organization's network, Entra ID provides similar functionalities in the cloud, focusing on managing access to cloud applications and resources.&lt;/p&gt; 
&lt;p&gt;Microsoft hybrid identity gives IT admins the best of both worlds, combining on-premises identity infrastructure with &lt;a href="https://www.techtarget.com/searchsecurity/tip/Top-cloud-IAM-best-practices-to-implement"&gt;cloud-based identity management&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Hybrid identity is a simplified, secure and user-friendly identity and access management (&lt;a href="https://www.techtarget.com/searchsecurity/definition/identity-access-management-IAM-system"&gt;IAM&lt;/a&gt;) system. But it also comes with unique implementation challenges and prerequisites IT admins must thoroughly understand before deploying it for their organization.&lt;/p&gt; 
&lt;p&gt;This article covers the components involved in Microsoft hybrid identity, how to prepare for its deployment and an implementation roadmap for launching hybrid identity for your IT environment.&lt;/p&gt; 
&lt;section class="section main-article-chapter" data-menu-title="What is Microsoft hybrid identity?"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;What is Microsoft hybrid identity?&lt;/h2&gt;
 &lt;p&gt;&lt;i&gt;Hybrid identity&lt;/i&gt; refers to Microsoft's integration of on-premises and cloud-based identity infrastructure and management.&lt;/p&gt;
 &lt;p&gt;This system enables users to use a single identity, such as username and password, to access both on-premises resources managed by AD and cloud resources &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/What-should-admins-know-about-Microsoft-Entra-features"&gt;managed by Entra ID&lt;/a&gt;, formerly Azure AD. For example, users can use the same credentials to log on to local AD resources that they would use for cloud-based applications, such as Microsoft 365 and other SaaS applications.&lt;/p&gt;
 &lt;p&gt;Hybrid identity is commonly used in environments transitioning to the cloud, as it enables coexistence between legacy systems and modern cloud services. It provides several benefits to IT administrators, including centralized IAM and access to enhanced features, such as conditional access and multifactor authentication (MFA) from Entra ID.&lt;/p&gt;
&lt;/section&gt;    
&lt;section class="section main-article-chapter" data-menu-title="Key concepts of Microsoft hybrid identity"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Key concepts of Microsoft hybrid identity&lt;/h2&gt;
 &lt;p&gt;The following components comprise a hybrid identity system:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;&lt;b&gt;On-premises AD.&lt;/b&gt; AD manages user identities, groups and access to internal resources.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Entra ID.&lt;/b&gt; This extends identity capabilities to cloud apps and services.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Entra Connect or Cloud Sync.&lt;/b&gt; These tools synchronize identities between on-premises AD and Entra ID.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Authentication model.&lt;/b&gt; Choose from password hash synchronization (PHS), pass-through authentication (PTA) or &lt;a href="https://www.techtarget.com/searchsecurity/definition/federated-identity-management"&gt;federated authentication&lt;/a&gt; with AD Federation Service (AD FS).&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/hsearlejones_hybridid_1-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/hsearlejones_hybridid_1-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/hsearlejones_hybridid_1-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/hsearlejones_hybridid_1-f.jpg 1280w" alt="A diagram showing how the Entra ID Connect tool syncs user identities between AD and Microsoft Entra ID." height="508" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Entra ID Connect links the on-premises AD with the cloud-based Microsoft Entra ID to let users work with a single identity for seamless access to local and cloud resources.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;p&gt;Microsoft Entra Connect, formerly known as Azure AD Connect, and Microsoft Entra Cloud Sync are two tools used to synchronize on-premises AD with Microsoft Entra ID. Although both achieve similar outcomes -- syncing identities to the cloud -- they differ in architecture, capabilities and use cases.&lt;/p&gt;
 &lt;h3&gt;Microsoft Entra Connect overview&lt;/h3&gt;
 &lt;p&gt;This comprehensive tool, which is installed on an on-premises Windows Server, provides robust sync and authentication features. Key features include the following:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Directory synchronization, including users, groups and passwords.&lt;/li&gt; 
  &lt;li&gt;Password hash sync, pass-through authentication or federation.&lt;/li&gt; 
  &lt;li&gt;Custom filtering, such as by organizational unit or attribute values.&lt;/li&gt; 
  &lt;li&gt;&lt;a href="https://www.techtarget.com/searchwindowsserver/tip/Follow-these-steps-to-remove-the-last-Exchange-Server"&gt;Exchange hybrid configuration&lt;/a&gt; support.&lt;/li&gt; 
  &lt;li&gt;Writeback features, including password, device and group writeback.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;Entra Connect's architecture requires a SQL database and runs as a full server application. It comes with a heavier footprint and requires more ongoing maintenance compared to Entra Cloud Sync. Given this, Entra Connect is best for complex enterprise environments, including those with Exchange hybrid deployments, and scenarios that require writeback capabilities.&lt;/p&gt;
 &lt;h3&gt;Microsoft Entra Cloud Sync overview&lt;/h3&gt;
 &lt;p&gt;This lightweight, cloud-managed agent-based tool is designed for simpler and more scalable synchronization. The following are some of its key features:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Lightweight agent-based sync.&lt;/li&gt; 
  &lt;li&gt;Password hash sync only.&lt;/li&gt; 
  &lt;li&gt;Multiple AD forests supported (with multiple agents).&lt;/li&gt; 
  &lt;li&gt;Managed entirely from the cloud with no on-premises UI.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;Entra Cloud Sync's architecture uses cloud-based configuration and doesn't require a SQL database. It can be easier to deploy and maintain than Entra Connect, which makes it a good fit for modern, cloud-first organizations, including ones with multiple AD forest environments, and scenarios without the need for writeback.&lt;/p&gt;
 &lt;p&gt;&lt;iframe title="Entra Connect vs. Entra Cloud Sync" aria-label="Table" id="datawrapper-chart-uBqFs" src="https://datawrapper.dwcdn.net/uBqFs/1/" scrolling="no" frameborder="0" style="width: 0; min-width: 100% !important; border: none;" height="401" data-external="1"&gt;&lt;/iframe&gt;&lt;/p&gt;
 &lt;p&gt; &lt;script type="text/javascript"&gt;window.addEventListener("message",function(a){if(void 0!==a.data["datawrapper-height"]){var e=document.querySelectorAll("iframe");for(var t in a.data["datawrapper-height"])for(var r,i=0;r=e[i];i++)if(r.contentWindow===a.source){var d=a.data["datawrapper-height"][t]+"px";r.style.height=d}}});&lt;/script&gt; &lt;/p&gt;
 &lt;h3&gt;Authentication models&lt;/h3&gt;
 &lt;p&gt;&lt;b&gt;Password hash synchronization.&lt;/b&gt; With PHS, hashes of user passwords are synced from on-premises AD to Microsoft Entra ID, and the user authenticates directly with Entra ID in the cloud.&lt;/p&gt;
 &lt;p&gt;The advantages of PHS are that it's simple to deploy and manage, and there is no dependency on on-premises servers at logon. It supports single sign-on (&lt;a href="https://www.techtarget.com/searchsecurity/definition/single-sign-on"&gt;SSO&lt;/a&gt;), although there is a sync delay when changing user passwords. Some organizations might choose to use other methods because password hashes are stored in the cloud.&lt;/p&gt;
 &lt;div class="extra-info"&gt;
  &lt;div class="extra-info-inner"&gt;
   &lt;h3 class="splash-heading"&gt;Single sign-on for hybrid identity&lt;/h3&gt; 
   &lt;p&gt;SSO in a hybrid identity environment enables users to access both on-premises and cloud-based applications and resources using a single set of credentials -- typically their AD username and password -- without being prompted to sign in again each time. In a hybrid identity implementation, SSO authenticates the user once, typically at the time of device login using AD credentials. It automatically passes authentication tokens to cloud applications, such as Microsoft 365 or SharePoint Online. Admins can maintain centralized IAM using AD or Entra ID.&lt;/p&gt;
  &lt;/div&gt;
 &lt;/div&gt;
 &lt;p&gt;&lt;b&gt;Pass-through authentication.&lt;/b&gt; In this model, users enter credentials in the cloud, and the authentication request is securely passed to an on-premises agent, which validates it against the local AD instance. The advantages of this method are that no password hashes are stored in the cloud, and the agent is lightweight, making it easier for IT administrators to implement than AD FS. It does require the on-premises infrastructure to be online.&lt;/p&gt;
 &lt;p&gt;&lt;b&gt;Federation.&lt;/b&gt; Microsoft Entra redirects the user to AD FS, an on-premises federation service, for authentication. IT administrators have full control over authentication policies and can implement custom login branding, multifactor options and smart card support. Federation is more complex to deploy and maintain, and it requires multiple servers. However, this authentication method is typically required to satisfy government and regulatory requirements.&lt;/p&gt;
 &lt;p&gt;&lt;iframe title="Compare PHS vs. PTA vs. AD FS for authentication" aria-label="Table" id="datawrapper-chart-X8JJv" src="https://datawrapper.dwcdn.net/X8JJv/3/" scrolling="no" frameborder="0" style="width: 0; min-width: 100% !important; border: none;" height="544" data-external="1"&gt;&lt;/iframe&gt; &lt;script type="text/javascript"&gt;window.addEventListener("message",function(a){if(void 0!==a.data["datawrapper-height"]){var e=document.querySelectorAll("iframe");for(var t in a.data["datawrapper-height"])for(var r,i=0;r=e[i];i++)if(r.contentWindow===a.source){var d=a.data["datawrapper-height"][t]+"px";r.style.height=d}}});&lt;/script&gt; &lt;/p&gt;
&lt;/section&gt;                      
&lt;section class="section main-article-chapter" data-menu-title="Why implement hybrid identity?"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Why implement hybrid identity?&lt;/h2&gt;
 &lt;p&gt;Organizations should implement hybrid identity to bridge the gap between on-premises infrastructure and the cloud. This enables a secure, seamless and scalable identity experience across all environments.&lt;/p&gt;
 &lt;p&gt;Here are some key reasons why hybrid identity is beneficial.&lt;/p&gt;
 &lt;h3&gt;Familiarity for users&lt;/h3&gt;
 &lt;p&gt;The use of a single identity for your organization's users lowers frustration, improves productivity and reduces password fatigue. Users often find that their login experience is improved, as it reduces repeated sign-ins. For example, a user can log into their Windows device using AD credentials and open Outlook or Microsoft Teams. Thanks to Entra ID's SSO option and the user's on-premises identity, access is granted without another login.&lt;/p&gt;
 &lt;h3&gt;Simplified management&lt;/h3&gt;
 &lt;p&gt;Most organizations already use on-premises AD. Hybrid identity incorporates existing AD users, groups and policies without the need to recreate them in the cloud. It simplifies user management, &lt;a href="https://www.techtarget.com/searchsecurity/tip/User-provisioning-and-deprovisioning-Why-it-matters-for-IAM"&gt;provisioning and deprovisioning&lt;/a&gt;, while also ensuring consistent access policies, auditing and role assignments.&lt;/p&gt;
 &lt;h3&gt;Enhanced security&lt;/h3&gt;
 &lt;p&gt;Hybrid identity uses cloud-based conditional access, MFA and risk-based access. It reduces the risk of account compromise from reused or weak passwords. Conditional access policies enable IT administrators to create rules that control how, when and under what conditions users can access corporate resources -- especially cloud apps, such as Microsoft 365. These policies play a key role in &lt;a href="https://www.techtarget.com/searchsecurity/definition/zero-trust-model-zero-trust-network"&gt;zero-trust security&lt;/a&gt; by enforcing the "never trust, always verify" principle. Admins can set specific conditions based on location, device compliance, IP address, the application accessed or user group membership.&lt;/p&gt;
 &lt;p&gt;Conditional access is the gatekeeper of the hybrid identity environment. It analyzes the context of each sign-in and enforces real-time decisions -- allow, block, challenge or restrict access -- to protect corporate data without hindering user productivity.&lt;/p&gt;
&lt;/section&gt;          
&lt;section class="section main-article-chapter" data-menu-title="Planning for hybrid identity"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Planning for hybrid identity&lt;/h2&gt;
 &lt;p&gt;Planning and implementing Microsoft hybrid identity using Entra ID requires understanding your current infrastructure and IAM methods, preparing your environment and carefully deploying it.&lt;/p&gt;
 &lt;p&gt;You must decide which authentication strategy -- PHS, PTA or AD FS -- best suits your organization and its security requirements. Design the identity architecture, including sync scope, domains and forests, and create an implementation roadmap.&lt;/p&gt;
 &lt;p&gt;Implementation requires several technical and organizational prerequisites to ensure a smooth deployment. These cover your on-premises environment, cloud configuration, security planning and infrastructure readiness.&lt;/p&gt;
 &lt;p&gt;The on-premises AD requirements include the following:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;At least one &lt;a href="https://www.techtarget.com/searchwindowsserver/definition/Active-Directory-forest-AD-forest"&gt;AD forest&lt;/a&gt; or domain with a functional level of Windows Server 2008 R2 or later.&lt;/li&gt; 
  &lt;li&gt;A routable User Principal Name suffix. For example, the UPN must be user@company.com instead of user@localdomain.&lt;/li&gt; 
  &lt;li&gt;Consistent and unique user attributes, such as UPN, mail and SAM account name.&lt;/li&gt; 
  &lt;li&gt;Cleanup of stale accounts, duplicates and nonstandard naming conventions.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;The following infrastructure requirements must be in place:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;A dedicated Windows Server to install Microsoft Entra Connect.&lt;/li&gt; 
  &lt;li&gt;Administrative access to both on-premises AD and Entra ID tenant.&lt;/li&gt; 
  &lt;li&gt;Required network ports open for sync and authentication, such as HTTPS, LDAP or Kerberos.&lt;/li&gt; 
  &lt;li&gt;A valid Microsoft Entra ID tenant, either as part of your Microsoft 365 subscription or standalone.&lt;/li&gt; 
  &lt;li&gt;At least one verified custom domain in Entra ID.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;Then, ensure security and compliance readiness with these steps:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Plan to implement MFA.&lt;/li&gt; 
  &lt;li&gt;Define conditional access policies, such as those based on device, location or risk.&lt;/li&gt; 
  &lt;li&gt;Prepare to handle identity protection, user risk detections and reporting.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;Your deployment strategy should incorporate operational and user readiness. Communicate hybrid identity plans to stakeholders, train IT staff and prepare user education materials for any sign-in behavior changes.&lt;/p&gt;
 &lt;p&gt;The following outlines a typical implementation roadmap:&lt;/p&gt;
 &lt;p&gt;&lt;b&gt;Phase 1: Planning&lt;/b&gt;&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Define business goals for hybrid identity.&lt;/li&gt; 
  &lt;li&gt;Choose your authentication model (PHS, PTA or AD FS).&lt;/li&gt; 
  &lt;li&gt;Design identity architecture (sync scope, domains, forests).&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;&lt;b&gt;Phase 2: Preparation&lt;/b&gt;&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Prepare AD with cleanup and UPN standardization.&lt;/li&gt; 
  &lt;li&gt;Prepare server infrastructure for Entra Connect.&lt;/li&gt; 
  &lt;li&gt;Review security and compliance requirements.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;&lt;b&gt;Phase 3: Deployment&lt;/b&gt;&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Install and configure Microsoft Entra Connect.&lt;/li&gt; 
  &lt;li&gt;Configure selected authentication method.&lt;/li&gt; 
  &lt;li&gt;Set up SSO or seamless SSO (optional).&lt;/li&gt; 
  &lt;li&gt;Run initial directory sync (test with pilot users).&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;&lt;b&gt;Phase 4: Testing and validation&lt;/b&gt;&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Validate the following components: 
   &lt;ul class="default-list"&gt; 
    &lt;li&gt;User sign-ins to Microsoft 365 and Entra-protected apps.&lt;/li&gt; 
    &lt;li&gt;Password changes and sync behavior.&lt;/li&gt; 
    &lt;li&gt;MFA and conditional access, if configured.&lt;/li&gt; 
   &lt;/ul&gt; &lt;/li&gt; 
  &lt;li&gt;Monitor logs and sync health.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;&lt;b&gt;Phase 5: Rollout&lt;/b&gt;&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Expand sync scope to include all users/groups.&lt;/li&gt; 
  &lt;li&gt;Communicate changes to end users.&lt;/li&gt; 
  &lt;li&gt;Begin enabling cloud services, such as Teams or SharePoint&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;&lt;b&gt;Phase 6: Optimization&lt;/b&gt;&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Deploy MFA, conditional access and self-service password reset.&lt;/li&gt; 
  &lt;li&gt;Consider group writeback or hybrid device join.&lt;/li&gt; 
  &lt;li&gt;Monitor and fine-tune performance and logs using Microsoft Entra admin center.&lt;/li&gt; 
 &lt;/ul&gt;
&lt;/section&gt;                        
&lt;section class="section main-article-chapter" data-menu-title="Potential issues with on-premises AD"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Potential issues with on-premises AD&lt;/h2&gt;
 &lt;p&gt;Although hybrid identity offers flexibility and control by integrating on-premises AD with Microsoft Entra ID, it also introduces technical and operational challenges that organizations must plan for.&lt;/p&gt;
 &lt;p&gt;&lt;b&gt;AD health issues.&lt;/b&gt; Replication errors, DNS issues or corrupt AD objects can lead to failed synchronization or incomplete user provisioning in Entra ID. Run &lt;span style="font-family: 'courier new', courier, monospace;"&gt;dcdiag&lt;/span&gt;, &lt;span style="font-family: 'courier new', courier, monospace;"&gt;repadmin&lt;/span&gt; and Entra Connect Health checks regularly. Clean up AD objects before sync.&lt;/p&gt;
 &lt;p&gt;&lt;b&gt;Password or authentication inconsistencies.&lt;/b&gt; Password changes might not sync quickly, especially with PHS. If not redundant, PTA agents or AD FS servers can become single points of failure. Clock drift in AD can cause Kerberos or auth token issues. Use redundant agents, ensure accurate time sync and monitor authentication services.&lt;/p&gt;
 &lt;p&gt;&lt;b&gt;Synchronization failures.&lt;/b&gt; Microsoft Entra Connect might fail to sync due to connectivity issues, outdated schema or object attribute mismatches -- especially if UPNs don't match verified domains. Be sure to review sync rules, use consistent UPNs and monitor Entra Connect sync logs.&lt;/p&gt;
 &lt;p&gt;&lt;b&gt;Security gaps.&lt;/b&gt; On-premises AD might not enforce MFA, conditional access or sign-in risk detection. To mitigate security concerns, &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/Using-Azure-AD-conditional-access-for-tighter-security"&gt;use Microsoft Entra conditional access and identity protection&lt;/a&gt; and enforce cloud policies.&lt;/p&gt;
 &lt;p&gt;Hybrid identity is the cornerstone of a secure, flexible and user-friendly IT environment in the cloud era, especially for organizations transitioning from legacy systems.&lt;/p&gt;
 &lt;p&gt;&lt;i&gt;Helen Searle-Jones holds a group head of IT position in the manufacturing sector. She draws on 30 years of experience in enterprise and end-user computing, utilizing cloud and on-premises technologies to enhance IT performance.&lt;/i&gt;&lt;/p&gt;
&lt;/section&gt;</body>
            <description>Microsoft hybrid identity combines on-premises AD resources and cloud-based Entra ID capabilities to create a seamless access experience across environments.</description>
            <image>https://cdn.ttgtmedia.com/rms/onlineimages/cloud_g943065362.jpg</image>
            <link>https://www.techtarget.com/searchwindowsserver/tip/Understand-the-basics-of-Microsoft-hybrid-identity</link>
            <pubDate>Thu, 20 Nov 2025 11:00:00 GMT</pubDate>
            <title>Understand the basics of Microsoft hybrid identity</title>
        </item>
        <item>
            <body>&lt;p&gt;GitHub Copilot has evolved from an autocomplete novelty into a capable, chat-assisted development partner that can accelerate day-to-day scripting for IT professionals.&lt;/p&gt; 
&lt;p&gt;For PowerShell administrators, GitHub Copilot can draft modules and scripts from natural language prompts, refactor legacy Windows PowerShell 5.1 code to PowerShell 7, generate documentation and tests and assist in orchestrating Azure operations.&lt;/p&gt; 
&lt;p&gt;Still, &lt;a href="https://www.techtarget.com/searchenterpriseai/tip/GitHub-Copilot-vs-ChatGPT-How-do-they-compare"&gt;GitHub Copilot is an assistant&lt;/a&gt; -- not an authority. Because it learns from public code and patterns, it can surface outdated APIs or inefficient approaches, so you should verify outputs, require modern module usage and keep security and compliance guardrails in place.&lt;/p&gt; 
&lt;p&gt;When paired with Visual Studio Code (VS Code), GitHub Copilot becomes particularly effective: you describe the intent in comments or chat, and it proposes context‑aware snippets you can accept, edit or reject as you iterate.&lt;/p&gt; 
&lt;section class="section main-article-chapter" data-menu-title="How GitHub Copilot works"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;How GitHub Copilot works&lt;/h2&gt;
 &lt;p&gt;Copilot applies generative AI models trained on public source code to predict and propose the next lines, blocks or entire functions based on your current file, project context and prompts.&lt;/p&gt;
 &lt;p&gt;In VS Code, you can give a descriptive comment or string, such as "what should this script accomplish?", and GitHub Copilot will offer a draft that you can refine. The clearer your intent, constraints and environment details -- PowerShell version, module names and versions, target OS -- the better its suggestions. A grounding in PowerShell helps you steer GitHub Copilot toward correct, efficient scripts and away from deprecated patterns.&lt;/p&gt;
 &lt;p&gt;GitHubCopilot is responsive to feedback in the flow of work. If it suggests an outdated cmdlet or API and you replace it with the modern equivalent, subsequent completions will typically align with your correction.&lt;/p&gt;
 &lt;p&gt;For example, when &lt;a href="https://www.techtarget.com/searchcloudcomputing/tip/Why-and-how-to-create-Azure-service-principals"&gt;drafting an Azure automation script,&lt;/a&gt; GitHub Copilot might initially propose a deprecated &lt;span style="font-family: 'courier new', courier, monospace;"&gt;AzureRM&lt;/span&gt; login cmdlet; using &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Connect‑AzAccount&lt;/span&gt; guides it back to use cmdlets in the current Az module -- also called the Azure PowerShell Account module -- in later suggestions. This adaptability is valuable, but it doesn't eliminate the need for expert review.&lt;/p&gt;
 &lt;p&gt;A few practical tips to keep in mind:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Quality varies with the clarity of your prompts. Explicitly state "target PowerShell 7," specify modules, such as Az.Accounts or Az.Compute, and call out required properties to reduce rework.&lt;/li&gt; 
  &lt;li&gt;Suggestions might draw on patterns that are out of date or suboptimal. Validate correctness, performance and security before adopting them. GitHub Copilot is not a replacement for domain expertise or review processes.&lt;/li&gt; 
  &lt;li&gt;GitHub Copilot learns general coding conventions from public repositories; it doesn't copy your private code unless you explicitly allow it to use your content for product improvements. You can also control whether suggestions may match public code patterns during setup.&lt;/li&gt; 
 &lt;/ul&gt;
&lt;/section&gt;       
&lt;section class="section main-article-chapter" data-menu-title="Prepare to use GitHub Copilot"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Prepare to use GitHub Copilot&lt;/h2&gt;
 &lt;p&gt;A little upfront configuration significantly improves outcomes, especially in enterprise environments.&lt;/p&gt;
 &lt;h3&gt;Choose your plan and enable GitHub Copilot&lt;/h3&gt;
 &lt;ol class="default-list"&gt; 
  &lt;li&gt;You'll need a GitHub account. Enable Copilot from your GitHub settings (Settings &amp;gt; Copilot). Trial options and pricing are available there. Organizations can provision GitHub Copilot for teams with policy controls; confirm current terms before rollout.&lt;/li&gt; 
  &lt;li&gt;During sign‑up, you can choose whether to allow suggestions that may match public code and whether to share your snippets for product improvement. Both settings are optional and should align with your organization's policies.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;h3&gt;Install and configure in VS Code&lt;/h3&gt;
 &lt;ol class="default-list"&gt; 
  &lt;li&gt;Install the GitHub Copilot extension for VS Code and sign in with your GitHub identity; you'll see a Copilot status indicator in the editor once it's active.&lt;/li&gt; 
  &lt;li&gt;Add GitHub Copilot Chat to unlock chat‑based workflows: explain and refactor code, request tests and docs and apply multi‑file changes. This chat‑first loop is often the fastest path to high‑quality results.&lt;/li&gt; 
  &lt;li&gt;Ensure the &lt;a href="https://www.techtarget.com/searchwindowsserver/tutorial/How-to-use-the-PowerShell-extension-for-Visual-Studio-Code"&gt;PowerShell extension for VS Code is installed&lt;/a&gt; so GitHub Copilot works with language‑aware syntax, formatting and debugging.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;h3&gt;Prepare your PowerShell and Azure environment&lt;/h3&gt;
 &lt;ol class="default-list"&gt; 
  &lt;li&gt;Standardize on a supported PowerShell 7.x runtime and keep core modules updated, such as Az modules for Azure. Ask Copilot for PS7‑compatible code and to avoid deprecated cmdlets such as the legacy AzureRM family; make inline corrections if it suggests otherwise so future completions follow suit. Using a centrally defined and distributed container for local development is a good way to ensure everyone is using the same PowerShell version, cmdlets and tools.&lt;/li&gt; 
  &lt;li&gt;Adopt basic quality gates in your workspace, such as PSScriptAnalyzer for linting and Pester for testing, so you can quickly validate GitHub Copilot's output as you iterate.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;h3&gt;Set security and governance guardrails&lt;/h3&gt;
 &lt;ol class="default-list"&gt; 
  &lt;li&gt;For individual use, review the "public code matching" and "content sharing" toggles during setup and choose the most conservative posture that still enables productivity.&lt;/li&gt; 
  &lt;li&gt;For organizations, enforce policies centrally, define data boundaries and decide when to enable repository‑ or workspace‑aware assistance. Treat GitHub Copilot output like any code contribution: scan for secrets, review for least‑privilege patterns and check for module or API deprecations before merging.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;h3&gt;Prime GitHub Copilot with effective prompts&lt;/h3&gt;
 &lt;ol class="default-list"&gt; 
  &lt;li&gt;State the goal, constraints and environment: PowerShell version, OS, modules and performance or security requirements.&lt;/li&gt; 
  &lt;li&gt;Ask explicitly for modern patterns: "Use &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Get‑CimInstance&lt;/span&gt;, not &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Get‑WmiObject,&lt;/span&gt;" "Target &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Connect‑AzAccount,&lt;/span&gt; not &lt;span style="font-family: 'courier new', courier, monospace;"&gt;AzureRM&lt;/span&gt;," "Return structured objects; avoid &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Write‑Host"&lt;/span&gt; and "Include error handling and &lt;span style="font-family: 'courier new', courier, monospace;"&gt;-WhatI&lt;/span&gt;f support." GitHub Copilot responds best to that level of specificity.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;p&gt;With these preparations, GitHub Copilot becomes a dependable accelerator for PowerShell admins: it drafts the first 80% and you apply expert judgment to refine and solidify the result. The feedback you provide guides its next suggestions without losing sight of correctness, security and maintainability.&lt;/p&gt;
 &lt;div class="btt-thumbnailContainer alignLeft"&gt;
  &lt;span class="btt-thumbnailTitle"&gt;GitHub Copilot for PowerShell&lt;/span&gt;
  &lt;a class="btt-thumbnailLink" data-video-id="652487" data-channel-id="18865"&gt;
   &lt;div class="btt-thumbnailImgContainer"&gt;
    &lt;img class="btt-videoBtThumbnail" src="https://cdn.brighttalk.com/ams/california/images/communication/652487/image_1071268.jpg?width=640&amp;amp;height=360" height="169" width="300"&gt;
   &lt;/div&gt;&lt;/a&gt;
  &lt;time class="btt-video-duration" datetime="PT4M56S"&gt;4:56&lt;/time&gt;
 &lt;/div&gt;
 &lt;div class="btt-modal"&gt;
  &lt;div class="btt-modal-content"&gt;&lt;/div&gt;
 &lt;/div&gt;
&lt;/section&gt;              
&lt;section class="section main-article-chapter" data-menu-title="How to write PowerShell with GitHub Copilot"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;How to write PowerShell with GitHub Copilot&lt;/h2&gt;
 &lt;p&gt;GitHub Copilot functions at its best when you provide it with precise intent, a clear execution environment and quality guardrails. &lt;a href="https://www.techtarget.com/searchenterpriseai/tip/Compare-top-AI-coding-tools"&gt;Treat it like a junior pair‑programmer&lt;/a&gt;: you specify the "what" and the constraints; it drafts the how. And together you review, refine and test. GitHub Copilot needs direction from you to understand how it should proceed. Explicit prompts produce markedly better results.&lt;/p&gt;
 &lt;h3&gt;Work iteratively in VS Code&lt;/h3&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Seed with a descriptive comment or a minimal function skeleton -- CmdletBinding, parameters, try/catch, ShouldProcess. GitHub Copilot will propose completions that follow your intent and style.&lt;/li&gt; 
  &lt;li&gt;If a suggestion is close but not perfect, accept it and edit inline. GitHub Copilot's subsequent completions in that file usually follow your corrections, such as switching from AzureRM to Az, or from WMI to CIM.&lt;/li&gt; 
  &lt;li&gt;Use GitHub Copilot Chat to:&lt;/li&gt; 
  &lt;li style="list-style: none;"&gt; 
   &lt;ul class="default-list"&gt; 
    &lt;li&gt;&amp;nbsp;&amp;nbsp;Explain or refactor a block.&lt;/li&gt; 
    &lt;li&gt;&amp;nbsp;&amp;nbsp;Add Pester tests and comment‑based help.&lt;/li&gt; 
    &lt;li&gt;&amp;nbsp;&amp;nbsp;Enforce PSScriptAnalyzer rules.&lt;/li&gt; 
    &lt;li&gt;&amp;nbsp;&amp;nbsp;Request multi‑file edits, such as update a module and its tests.&lt;/li&gt; 
   &lt;/ul&gt; &lt;/li&gt; 
 &lt;/ul&gt;
 &lt;h3&gt;Aim for correctness, performance and maintainability&lt;/h3&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Return rich objects from the pipeline; avoid &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Write-Host&lt;/span&gt; in library code.&lt;/li&gt; 
  &lt;li&gt;Prefer a single, well‑scoped query over per‑item lookups. For example, calling a cmdlet inside a loop when you already have the data is unnecessary and inefficient.&lt;/li&gt; 
  &lt;li&gt;Validate module versions and cmdlet availability. Ask GitHub Copilot to pin or check versions when relevant.&lt;/li&gt; 
  &lt;li&gt;Add error handling and ShouldProcess so you can run with &lt;span style="font-family: 'courier new', courier, monospace;"&gt;-WhatIf&lt;/span&gt; or &lt;span style="font-family: 'courier new', courier, monospace;"&gt;-Confirm&lt;/span&gt; during testing.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;h3&gt;Example: List running services and their logon accounts&lt;/h3&gt;
 &lt;p&gt;Prompt to GitHub Copilot -- as a comment or in chat:&lt;/p&gt;
 &lt;p&gt;"PowerShell 7. Get all running Windows services and show service name, display name and the account the service runs as. Use &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Get-CimInstance&lt;/span&gt; (not &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Get-WmiObject&lt;/span&gt;). Return objects; no &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Write-Host&lt;/span&gt;."&lt;/p&gt;
 &lt;p&gt;Resulting approach -- concise, PS7‑compatible:&lt;/p&gt;
 &lt;p&gt;Query once via CIM and select the properties you need:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;$services = Get-CimInstance -ClassName Win32_Service | Where-Object { $_.State -eq 'Running' }

$services | Select-Object Name, DisplayName, State, StartName
&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;This code avoids per‑service WMI calls and relies on Win32_Service.StartName for the logon account. It also avoids implying properties that don't exist on Get-Service in PS 7.x, such as a UserName property.&lt;/p&gt;
&lt;/section&gt;             
&lt;section class="section main-article-chapter" data-menu-title="Use GitHub Copilot to improve code quality"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Use GitHub Copilot to improve code quality&lt;/h2&gt;
 &lt;p&gt;GitHub Copilot helps you implement PowerShell best practices beyond basic functionality. It can refine a script if you request further enhancements by asking for:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Pester tests covering error conditions.&lt;/li&gt; 
  &lt;li&gt;Comment‑based help and parameter validation attributes.&lt;/li&gt; 
  &lt;li&gt;Remediation of &lt;a href="https://www.techtarget.com/searchwindowsserver/feature/5-PowerShell-tools-to-help-simplify-admin-tasks-and-support"&gt;PSScriptAnalyzer findings&lt;/a&gt;.&lt;/li&gt; 
  &lt;li&gt;Safer patterns, such as credentials via Get-Credential or managed identity; least‑privilege RBAC.&lt;/li&gt; 
  &lt;li&gt;Iterate until the script meets your style and reliability standards, then run tests and a &lt;span style="font-family: 'courier new', courier, monospace;"&gt;-WhatIf&lt;/span&gt; dry run before applying changes.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;Common pitfalls GitHub Copilot can make and how to fix them:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Suggesting deprecated cmdlets or modules, such as &lt;span style="font-family: 'courier new', courier, monospace;"&gt;AzureRM&lt;/span&gt; and &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Get-WmiObject&lt;/span&gt;. Correct them and continue; GitHub Copilot will usually follow your lead in later completions.&lt;/li&gt; 
  &lt;li&gt;Using inefficient loops that re‑query the state on every iteration. Consolidate into a single query and project only the fields you need.&lt;/li&gt; 
  &lt;li&gt;Emitting strings via &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Write-Host&lt;/span&gt; instead of returning objects. Ask GitHub &amp;nbsp;Copilot to output PSCustomObjects or select specific properties.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;By combining clear intent, environment constraints and iterative review, you'll get accurate, PowerShell 7‑friendly and maintainable code from GitHub Copilot: it's much faster than starting from a blank file and safer than accepting the first suggestion at face value.&lt;/p&gt;
&lt;/section&gt;      
&lt;section class="section main-article-chapter" data-menu-title="Examples of PowerShell prompts for GitHub Copilot"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Examples of PowerShell prompts for GitHub Copilot&lt;/h2&gt;
 &lt;p&gt;Below is a practical "prompt pack" you can paste into GitHub Copilot Chat and adapt. Use placeholders, such as &amp;lt;FILE&amp;gt;, &amp;lt;FUNCTION&amp;gt;, &amp;lt;MODULE&amp;gt;, &amp;lt;RESOURCE_GROUP&amp;gt;, &amp;lt;PS_VERSION&amp;gt;, &amp;lt;RULESET&amp;gt; and &amp;lt;TARGET&amp;gt;.&lt;/p&gt;
 &lt;p&gt;Here are some quick tips:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Be explicit about PowerShell version, modules and constraints; GitHub Copilot performs better with clear direction and current APIs, such as PS7, Az modules and &lt;a href="https://www.techtarget.com/searchstorage/definition/Common-Information-Model"&gt;CIM&lt;/a&gt; instead of WMI.&lt;/li&gt; 
  &lt;li&gt;If GitHub Copilot suggests deprecated patterns, such as &lt;span style="font-family: 'courier new', courier, monospace;"&gt;AzureRM&lt;/span&gt; or &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Get-WmiObject&lt;/span&gt;, correct it once; subsequent completions typically follow your change.&lt;/li&gt; 
  &lt;li&gt;Favor single, well-scoped queries and return objects. Avoid per-item re-queries and &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Write-Host&lt;/span&gt; in library code.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;h3&gt;Foundation/constraints priming&lt;/h3&gt;
 &lt;p&gt;"You are my PowerShell pair programmer. Constraints: PowerShell 7.x only; cross-platform safe; avoid legacy cmdlets; avoid &lt;span style="font-family: 'courier new', courier, monospace;"&gt;AzureRM&lt;/span&gt; (use Az modules, C&lt;span style="font-family: 'courier new', courier, monospace;"&gt;onnect-AzAccount)&lt;/span&gt;; return objects (no &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Write-Host&lt;/span&gt;); add error handling (try/catch), parameter validation and &lt;span style="font-family: 'courier new', courier, monospace;"&gt;ShouldProcess&lt;/span&gt; with &lt;span style="font-family: 'courier new', courier, monospace;"&gt;-WhatIf/-Confirm&lt;/span&gt;; follow PSScriptAnalyzer defaults and PowerShell style best practices."&lt;/p&gt;
 &lt;h3&gt;PowerShell 7-only refactor and modernization&lt;/h3&gt;
 &lt;p&gt;"Refactor &amp;lt;FILE&amp;gt; to PowerShell 7-only: replace deprecated cmdlets, ensure cross-platform compatibility, remove &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Write-Host&lt;/span&gt; in favor of pipeline-friendly output, add &lt;span style="font-family: 'courier new', courier, monospace;"&gt;CmdletBinding&lt;/span&gt; and &lt;span style="font-family: 'courier new', courier, monospace;"&gt;ShouldProcess&lt;/span&gt; and include comment-based help. Explain each breaking change and why it's needed for PS7."&lt;/p&gt;
 &lt;h3&gt;PSScriptAnalyzer audit and fixes&lt;/h3&gt;
 &lt;p&gt;"Run PSScriptAnalyzer on &amp;lt;FILE&amp;gt; using default rules (or this custom settings: &amp;lt;RULESET&amp;gt;). List violations with rule IDs and lines, then propose minimal, safe fixes. Apply fixes in an updated version of &amp;lt;FILE&amp;gt;. Where a justified exception is needed, add &lt;span style="font-family: 'courier new', courier, monospace;"&gt;[Diagnostics.CodeAnalysis.SuppressMessage()]&lt;/span&gt; with a rationale in comments."&lt;/p&gt;
 &lt;h3&gt;Generate Pester tests&lt;/h3&gt;
 &lt;p&gt;"Generate Pester v5 tests for &amp;lt;FUNCTION&amp;gt;/&amp;lt;MODULE&amp;gt;: include Arrange/Act/Assert structure, mocks for external calls (filesystem, registry, network, Az cmdlets), tests for &lt;span style="font-family: 'courier new', courier, monospace;"&gt;-WhatIf/-Confirm&lt;/span&gt;, error paths, parameter validation and at least one table-driven test. Target PS7. Output tests in a new file named &amp;lt;FUNCTION&amp;gt;.Tests.ps1 suitable for CI."&lt;/p&gt;
 &lt;h3&gt;Comment-based help and docs&lt;/h3&gt;
 &lt;p&gt;"Add comment-based help to &amp;lt;FUNCTION&amp;gt;: .SYNOPSIS, .DESCRIPTION, .PARAMETER (each), .EXAMPLE (3+ realistic examples), .NOTES, .LINK to docs. Then produce a README snippet describing usage, prerequisites (modules/versions) and examples."&lt;/p&gt;
 &lt;p&gt;"For &amp;lt;MODULE&amp;gt;, generate a CHANGELOG entry for version &amp;lt;TARGET&amp;gt;, summarizing fixes, features and breaking changes, with links to related functions."&lt;/p&gt;
 &lt;h3&gt;Secure-by-default hardening&lt;/h3&gt;
 &lt;p&gt;"Review &amp;lt;FILE&amp;gt; for security issues: remove plaintext secrets, use Get-Credential or managed identity patterns, validate all external inputs, use least-privilege RBAC in examples, &lt;span style="font-family: 'courier new', courier, monospace;"&gt;set $ErrorActionPreference = 'Stop'&lt;/span&gt; inside critical sections and ensure sensitive data is not logged. Provide a diff-like summary of changes."&lt;/p&gt;
 &lt;h3&gt;Azure script modernization and correctness&lt;/h3&gt;
 &lt;p&gt;"Update this Azure script to current Az modules: authenticate with &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Connect-AzAccount,&lt;/span&gt; select subscription/context, capture resource outputs in variables and use supported parameters for &lt;span style="font-family: 'courier new', courier, monospace;"&gt;New-AzResourceGroup&lt;/span&gt;. Replace any &lt;span style="font-family: 'courier new', courier, monospace;"&gt;AzureRM&lt;/span&gt; usage. Ensure idempotent behavior where practical and include tags. Explain any parameter changes due to module updates."&lt;/p&gt;
 &lt;h3&gt;Performance and efficiency review&lt;/h3&gt;
 &lt;p&gt;"Profile the logic in &amp;lt;FILE&amp;gt; for unnecessary loops and redundant cmdlet calls. Consolidate into single queries where possible (e.g., query services once, then project fields). Replace per-item calls with batched or pipeline operations. Return only required properties and avoid materializing unused data. Provide the optimized version and a short rationale for each change."&lt;/p&gt;
 &lt;h3&gt;Refactor for module quality&lt;/h3&gt;
 &lt;p&gt;"Turn &amp;lt;FILE&amp;gt; into a reusable module function: add [CmdletBinding()], [Parameter()] attributes (Mandatory, ValidateSet/Pattern/Range), supports ShouldProcess, pipeline input where appropriate, structured output (PSCustomObject or typed objects), verbose logging via Write-Verbose and comment-based help. Include a public/private function split if needed."&lt;/p&gt;
 &lt;h3&gt;Documentation from code&lt;/h3&gt;
 &lt;p&gt;"&lt;a href="https://www.techtarget.com/searchsoftwarequality/tip/How-to-choose-the-best-Markdown-editor-for-your-use-case"&gt;Generate a Markdown README&lt;/a&gt; for &amp;lt;MODULE&amp;gt; with: overview, installation, required module versions, usage examples for each public function, configuration and environment variables, troubleshooting and a section on security considerations. Cross-link to comment-based help."&lt;/p&gt;
 &lt;h3&gt;Error handling and resiliency&lt;/h3&gt;
 &lt;p&gt;"Add robust error handling to &amp;lt;FUNCTION&amp;gt;: &lt;span style="font-family: 'courier new', courier, monospace;"&gt;set $ErrorActionPreference&lt;/span&gt; within scope, use try/catch with specific exception types, clean up resources in finally and emit actionable error messages. Ensure all external cmdlets use &lt;span style="font-family: 'courier new', courier, monospace;"&gt;-ErrorAction Stop&lt;/span&gt; where appropriate."&lt;/p&gt;
 &lt;h3&gt;Continuous integration-ready outputs&lt;/h3&gt;
 &lt;p&gt;"Produce a CI checklist for this repo: run PSScriptAnalyzer, run Pester v5, verify no secrets committed, format with PowerShell extension settings and fail on analyzer or test errors. Provide a GitHub Actions workflow yaml that runs on push/PR to main."&lt;/p&gt;
 &lt;h3&gt;Targeted property selection and correctness&lt;/h3&gt;
 &lt;p&gt;"For this task, list running services with their logon accounts in PS7 using CIM (not WMI). Avoid looping and re-querying; return &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Name&lt;/span&gt;, &lt;span style="font-family: 'courier new', courier, monospace;"&gt;DisplayName&lt;/span&gt;, &lt;span style="font-family: 'courier new', courier, monospace;"&gt;State&lt;/span&gt;, &lt;span style="font-family: 'courier new', courier, monospace;"&gt;StartName&lt;/span&gt; as objects. Provide the minimal, efficient snippet and a one-line explanation."&lt;/p&gt;
 &lt;h3&gt;Prompt patterns for iterative editing&lt;/h3&gt;
 &lt;p&gt;"Explain what this function does, identify risks and deprecated APIs and propose a safer, PS7-compatible rewrite. Then apply the rewrite."&lt;/p&gt;
 &lt;p&gt;"Propose a small, incremental refactor to improve readability and testability (max 10 lines changed), then show a larger refactor that improves structure (max 50 lines)."&lt;/p&gt;
 &lt;h3&gt;House style and formatting&lt;/h3&gt;
 &lt;p&gt;"Reformat &amp;lt;FILE&amp;gt; to match PowerShell style: 2-space indents, PascalCase for functions, singular nouns for functions, approved verbs, consistent parameter ordering (-Name, -Id, -Path, etc.) and one pipeline per line. Do not alter logic; only formatting and naming where safe."&lt;/p&gt;
 &lt;p&gt;When asking Copilot to modify code, supply the file or selection and say "apply changes to this file" so it proposes an inline edit. If it drifts, restate constraints and correct once. Its next suggestion usually aligns with your guidance.&lt;/p&gt;
&lt;/section&gt;                                     
&lt;section class="section main-article-chapter" data-menu-title="How to get the most out of GitHub Copilot"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;How to get the most out of GitHub Copilot&lt;/h2&gt;
 &lt;p&gt;GitHub Copilot is now a credible accelerator for PowerShell work. It's capable of drafting &lt;a href="https://www.techtarget.com/searchenterpriseai/opinion/Can-AI-write-code-A-developer-experiments-in-two-languages"&gt;scripts from natural language descriptions&lt;/a&gt;, refactoring legacy code and stitching together Azure automation -- so long as you keep an expert's hand on the wheel.&lt;/p&gt;
 &lt;p&gt;For day‑to‑day administration, VS Code combined with GitHub Copilot can collapse hours of boilerplate coding into minutes. Even when GitHub Copilot's first draft isn't perfect, it often gets you most of the way there, translating into meaningful time savings on common tasks.&lt;/p&gt;
 &lt;p&gt;With precise prompts, careful review and routine testing, GitHub Copilot becomes a reliable force multiplier for &lt;a target="_blank" href="https://github.com/orgs/community/discussions/144674" rel="noopener"&gt;scripting&lt;/a&gt;, troubleshooting and Azure orchestration when working under deadline pressure.&lt;/p&gt;
 &lt;p&gt;&lt;i&gt;James Bannan is a principal security consultant with more than 25 years of industry experience, specializing in Microsoft Azure architecture, security and automation. He is a published author and journalist, as well as a former Microsoft MVP and a current Microsoft Certified Trainer.&lt;/i&gt;&lt;/p&gt;
&lt;/section&gt;</body>
            <description>Learn how to work with GitHub Copilot to write scripts, refactor legacy code and streamline Azure automation with best practices in mind.</description>
            <image>https://cdn.ttgtmedia.com/rms/onlineimages/chatbot_g1150454068.jpg</image>
            <link>https://www.techtarget.com/searchwindowsserver/tip/How-to-use-GitHub-Copilot-for-PowerShell-coding-projects</link>
            <pubDate>Tue, 18 Nov 2025 12:46:00 GMT</pubDate>
            <title>Using GitHub Copilot to accelerate PowerShell scripting</title>
        </item>
        <item>
            <body>&lt;p&gt;Network nodes require an IP address configuration that typically includes the IP address, subnet mask, default gateway IP address for the router, name servers and other values.&lt;/p&gt; 
&lt;p&gt;Administrators can manually set this information, resulting in a static configuration. A Dynamic Host Configuration Protocol (DHCP) server can also dynamically provide the information.&lt;/p&gt; 
&lt;p&gt;Generally, servers, routers, network printers and other comparable devices have a static configuration. Workstations, laptops, phones, tablets and other end-user devices receive their configuration using DHCP.&lt;/p&gt; 
&lt;p&gt;Client devices lease their IP address configuration by using the following four-step DORA process:&lt;/p&gt; 
&lt;ol class="default-list"&gt; 
 &lt;li&gt;&lt;b&gt;Discover&lt;/b&gt;. The client broadcasts an attempt to discover a DHCP server.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Offer.&lt;/b&gt; DHCP servers that receive the client broadcast offer an IP address configuration.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Request&lt;/b&gt;. The client formally requests the IP configuration from the first DHCP server to respond.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;Acknowledge&lt;/b&gt;. The DHCP server acknowledges the lease and doesn't offer that same address to another client.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;The client must renew the lease periodically.&lt;/p&gt; 
&lt;p&gt;Now that we've briefly reviewed &lt;a href="https://www.techtarget.com/searchnetworking/tip/Static-IP-vs-dynamic-IP-addresses-Whats-the-difference"&gt;how IP addresses are allocated&lt;/a&gt; and the lease generation process, let's delve into more detail on Windows DHCP server configuration. Follow these steps to manage deployment.&lt;/p&gt; 
&lt;section class="section main-article-chapter" data-menu-title="1. Install DHCP on Windows Server"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;1. Install DHCP on Windows Server&lt;/h2&gt;
 &lt;p&gt;The DHCP service is not automatically installed on Windows Server. It is easy to add, however, using either Server Manager or Windows PowerShell.&lt;/p&gt;
 &lt;p&gt;Ensure that you deploy essential services such as DHCP on the most current version of Windows Server for the most up-to-date features and security enhancements. Older versions of Windows Server do not support DHCP failover and other crucial capabilities.&lt;/p&gt;
 &lt;p&gt;DHCP is a relatively lightweight service, but if the server manages thousands of clients, its DHCP database and log file structure can become cumbersome. Plan the following minimum hardware specifications:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;&lt;b&gt;8GB RAM.&lt;/b&gt; Increase this to 16GB for larger networks.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;120GB SSD.&lt;/b&gt; Storage for logs, DHCP database and the OS. Increase this if the server hosts other services, such as &lt;a href="https://www.techtarget.com/searchwindowsserver/definition/Active-Directory"&gt;Active Directory&lt;/a&gt; (AD) or DNS.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;One 1-gigabit Ethernet network adapter. &lt;/b&gt;Consider implementing a dual network adapter configuration with &lt;a href="https://www.techtarget.com/searchnetworking/tip/Configure-NIC-teaming-in-Windows-Server"&gt;network interface card (NIC) teaming&lt;/a&gt; for redundancy and performance. &amp;nbsp;&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;To add DHCP using Server Manager, select &lt;b&gt;Add Roles and Features&lt;/b&gt;, and then choose &lt;b&gt;DHCP&lt;/b&gt; in the Roles list.&lt;/p&gt;
 &lt;p&gt;To add the DHCP role using the CLI, open Windows PowerShell, and type the following:&lt;/p&gt;
 &lt;pre&gt;&lt;span style="font-family: 'courier new', courier, monospace;"&gt;Install-WindowsFeature DHCP -IncludeManagementTools&lt;/span&gt;&lt;/pre&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/screenshot_install_dhcp_using_windows_powershell.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/screenshot_install_dhcp_using_windows_powershell_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/screenshot_install_dhcp_using_windows_powershell_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/screenshot_install_dhcp_using_windows_powershell.jpg 1280w" alt="Windows PowerShell DHCP installation screenshot" data-credit="Damon Garn" height="137" width="558"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Figure 1. Install the DHCP role by using Windows PowerShell.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;p&gt;The installation takes about one minute to complete.&lt;/p&gt;
 &lt;p&gt;Once admins install the DHCP service, they can manage it by selecting &lt;b&gt;Server Manager &amp;gt; Tools &amp;gt; DHCP&lt;/b&gt;.&lt;/p&gt;
&lt;/section&gt;           
&lt;section class="section main-article-chapter" data-menu-title="2. Authorize DHCP in AD"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;2. Authorize DHCP in AD&lt;/h2&gt;
 &lt;p&gt;You must register Windows-based DHCP servers with AD before they can offer IP address configurations to clients.&lt;/p&gt;
 &lt;p&gt;Right-click on the server node in the DHCP console and select &lt;b&gt;Authorize&lt;/b&gt; to complete this authorization. You need Enterprise Admin privileges to authorize DHCP.&lt;/p&gt;
 &lt;p&gt;Trouble authorizing DHCP in AD often indicates connectivity and replication issues. Use the following troubleshooting steps to correct authorization challenges:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Confirm you have sufficient privileges to authorize the server in AD.&lt;/li&gt; 
  &lt;li&gt;Confirm connectivity to one or more domain controllers.&lt;/li&gt; 
  &lt;li&gt;Verify firewall settings are not blocking Lightweight Active Directory Protocol queries.&lt;/li&gt; 
  &lt;li&gt;Wait a few minutes for AD replication to occur.&lt;/li&gt; 
  &lt;li&gt;Confirm AD replication health.&lt;/li&gt; 
  &lt;li&gt;Check Event Viewer for entries indicating authorization failure, such as Event ID 1046.&lt;/li&gt; 
  &lt;li&gt;Verify DNS functionality and confirm resource records exist for the domain controllers and the DHCP server.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;Windows Server DHCP servers deployed in a workgroup configuration do not need authorization. Windows Server Workgroups are typically 10 or fewer computers, requiring no centralized administration or security. You might find these deployments in small businesses, lab environments or non-essential areas&lt;i&gt;.&lt;/i&gt;&lt;/p&gt;
&lt;/section&gt;      
&lt;section class="section main-article-chapter" data-menu-title="3. Create a scope"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;3. Create a scope&lt;/h2&gt;
 &lt;p&gt;Before building the first pool of available IP addresses, you must plan the deployment. Devices, such as servers, routers and even printers, might have static IP address configurations. Ensure you have identified these addresses and that you allow for them in scope. Many administrators place all statically assigned IP addresses at the front of the IP range. These are not included in the DHCP scope to avoid conflicts.&lt;/p&gt;
 &lt;p&gt;Keep growth and scalability in mind when configuring Windows DHCP servers. DHCP must be able to provide IP addresses as departments, branch locations or network segments expand within the company. Create a scope large enough to support any expected growth. Don't forget about new print devices, temporary or seasonal employees, VMs and business partner computers that join the network.&lt;/p&gt;
 &lt;p&gt;This example design starts with a standard Class C reserved IP address range. It accounts for the static IP addresses assigned to network devices and the dynamically leased IP addresses for client systems:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Scope address range: 192.168.2.0/24.&lt;/li&gt; 
  &lt;li&gt;Static IP addresses: 192.168.2.1 through 192.168.2.25. Be sure to leave some room for additional devices.&lt;/li&gt; 
  &lt;li&gt;Dynamic IP addresses: 192.168.2.26 through 192.168.2.254.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;You also need to decide on additional configuration details, including the following:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;&lt;b&gt;Name and description.&lt;/b&gt; The scope name and an optional description.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Default gateway value&lt;/b&gt;. The IP address of the NIC in the router attached to this network.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Name resolution servers&lt;/b&gt;. The IP address of one or more &lt;a href="https://www.techtarget.com/searchsecurity/tip/The-3-types-of-DNS-servers-and-how-they-work"&gt;DNS servers&lt;/a&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Reservations.&lt;/b&gt; Any IP addresses that are dynamically allocated to specific clients enable those clients to acquire a consistent IP configuration from DHCP.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Lease time.&lt;/b&gt; The period during which the IP address lease is valid. It needs to be renewed at the halfway point of the lease. The default Windows Server DHCP lease duration is eight days.&lt;/li&gt; 
 &lt;/ul&gt;
&lt;/section&gt;       
&lt;section class="section main-article-chapter" data-menu-title="4. Configure and activate the scope"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;4. Configure and activate the scope&lt;/h2&gt;
 &lt;p&gt;Once you have documented the above values, you can configure the scope. Right-click the server node in the DHCP console, and then select &lt;b&gt;New Scope&lt;/b&gt;. A wizard prompts you for the information you chose above. You can change these settings later.&lt;/p&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/screenshot_create_new_dhcp_scope.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/screenshot_create_new_dhcp_scope_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/screenshot_create_new_dhcp_scope_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/screenshot_create_new_dhcp_scope.jpg 1280w" alt="Create a new DHCP scope " data-credit="Damon Garn" height="224" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Figure 2. Create a new DHCP scope.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;p&gt;Once activated, the DHCP server begins responding to DHCP client discover messages by offering IP addresses. Use AD to deactivate the scope, stop or start the DHCP service or deauthorize the DHCP server itself.&lt;/p&gt;
 &lt;p&gt;Windows Server DHCP servers can host &lt;a href="https://www.techtarget.com/searchnetworking/tip/How-to-configure-multiple-DHCP-scopes-on-one-Windows-server"&gt;multiple scopes&lt;/a&gt; to manage various subnets.&lt;/p&gt;
&lt;/section&gt;     
&lt;section class="section main-article-chapter" data-menu-title="5. Manage DNS registration"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;5. Manage DNS registration&lt;/h2&gt;
 &lt;p&gt;DNS links easy-to-remember hostnames to difficult-to-remember IP addresses. You can populate this database in several ways.&lt;/p&gt;
 &lt;p&gt;One method is to configure the DHCP server to create resource records for the client. The DHCP server can create the following:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;&lt;b&gt;A records.&lt;/b&gt; Hostname to IP address.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Pointer records.&lt;/b&gt; IP address to hostname. Also known as PTR records.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Both record types.&lt;/b&gt; A records and pointer records together.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;By default, the DHCP server creates the PTR record, while the client itself registers its A record with DNS.&lt;/p&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/screenshot_configure_dns_options.jpg "&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/screenshot_configure_dns_options_mobile.jpg " class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/screenshot_configure_dns_options_mobile.jpg  960w,https://www.techtarget.com/rms/onlineimages/screenshot_configure_dns_options.jpg  1280w" alt="Screenshot of DNS configuration for DHCP" data-credit="Damon Garn" height="642" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Figure 3. Configure DNS options.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
&lt;/section&gt;      
&lt;section class="section main-article-chapter" data-menu-title="Administrative DHCP tasks"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Administrative DHCP tasks&lt;/h2&gt;
 &lt;p&gt;The DHCP service is simple to configure. But sysadmins often find some additional settings to be useful, among them:&lt;/p&gt;
 &lt;h3&gt;Create client reservations&lt;/h3&gt;
 &lt;p&gt;In some cases, it's useful to allow a client machine to maintain a consistent IP address. While you could set the IP address configuration statically, it's often better to reserve the IP address for the client in DHCP. The client undergoes the DORA process to receive its settings, so values such as router and name resolution servers can still be updated using DHCP.&lt;/p&gt;
 &lt;ol class="default-list"&gt; 
  &lt;li&gt;Use the&lt;span style="font-family: 'courier new', courier, monospace;"&gt; ipconfig /all&lt;/span&gt; command on the client to find the MAC address.&lt;/li&gt; 
  &lt;li&gt;Right-click the &lt;b&gt;Reservations&lt;/b&gt; node in the DHCP Scope on the DHCP server. Choose &lt;b&gt;New Reservation&lt;/b&gt;.&lt;/li&gt; 
  &lt;li&gt;Provide a reservation name, IP address to assign, the client's MAC address and a description that explains why this client needs an unchanging address.&lt;/li&gt; 
  &lt;li&gt;Click &lt;b&gt;Add&lt;/b&gt; to save the configuration.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;p&gt;You can also right-click on existing leases in the DHCP console and select &lt;b&gt;Add to Reservation&lt;/b&gt;.&lt;/p&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/screenshot_reserve_ip_address_for_devcomputer.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/screenshot_reserve_ip_address_for_devcomputer_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/screenshot_reserve_ip_address_for_devcomputer_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/screenshot_reserve_ip_address_for_devcomputer.jpg 1280w" alt="Screenshot of IP address reservation" data-credit="Damon Garn" height="552" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Figure 4. Reserve an IP address for the Dev-Computer.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;h3&gt;Configure DHCP failover&lt;/h3&gt;
 &lt;p&gt;Microsoft introduced &lt;a target="_blank" href="https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/dn338983(v=ws.11)" rel="noopener"&gt;DHCP failover&lt;/a&gt; with Windows Server 2012, more than a decade after the release of the first server OS. However, it appears many administrators are unaware of DHCP failover. Configuration is straightforward and requires no special software.&lt;/p&gt;
 &lt;p&gt;To &lt;a href="https://www.techtarget.com/searchnetworking/tip/Configure-DHCP-failover-for-Windows-Server"&gt;configure DHCP failover&lt;/a&gt;, use the following steps:&lt;/p&gt;
 &lt;ol class="default-list"&gt; 
  &lt;li&gt;Ensure you've installed the DHCP role on both DHCP servers and that each has network connectivity with the other.&lt;/li&gt; 
  &lt;li&gt;Configure a DHCP scope on one of the servers.&lt;/li&gt; 
  &lt;li&gt;Right-click the scope and select &lt;b&gt;DHCP Failover&lt;/b&gt; from the context menu.&lt;/li&gt; 
  &lt;li&gt;Complete the wizard.&lt;/li&gt; 
  &lt;li&gt;Select the second DHCP server and observe that the new scope appears.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/screenshot_configure_dhcp_failover.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/screenshot_configure_dhcp_failover_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/screenshot_configure_dhcp_failover_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/screenshot_configure_dhcp_failover.jpg 1280w" alt="Screenshot of DHCP failover configuration" data-credit="Damon Garn" height="327" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Figure 5. Configure DHCP failover.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;h3&gt;Manage logs&lt;/h3&gt;
 &lt;p&gt;Managing service log files is a standard function for sysadmins. DHCP writes messages to Event Viewer and to text files.&lt;/p&gt;
 &lt;p&gt;Sysadmins can check the system log for general DHCP and network messages. They can find DHCP entries by drilling down to &lt;b&gt;Applications and Services &amp;gt; Microsoft &amp;gt; Windows &amp;gt; DHCP-Server &amp;gt; Microsoft-Windows-DHCP-Server-Events &amp;gt; Operational&lt;/b&gt;.&lt;/p&gt;
 &lt;p&gt;DHCP also generates text-based log files stored at &lt;span style="font-family: 'courier new', courier, monospace;"&gt;C:\Windows\System32\dhcp&lt;/span&gt;. These logs are &lt;a href="https://www.techtarget.com/searchnetworking/tip/Troubleshooting-a-DHCP-server"&gt;useful for troubleshooting&lt;/a&gt;. They can display information on why the server was unable to lease configurations to clients.&lt;/p&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/screenshot_dhcp_text_logs.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/screenshot_dhcp_text_logs_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/screenshot_dhcp_text_logs_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/screenshot_dhcp_text_logs.jpg 1280w" alt="Screenshot of DHCP text log" data-credit="Damon Garn" height="291" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Figure 6. DHCP text logs.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;p&gt;Text file logs are named by day of the week and are overwritten weekly. If you want to retain these logs, you must rename them before the upcoming day of the week can overwrite them.&lt;/p&gt;
 &lt;h3&gt;Manage DHCP lease durations&lt;/h3&gt;
 &lt;p&gt;Maintaining reasonable lease durations is crucial to optimizing DHCP. Shorter lease times help recycle unused IP addresses, which is important in some venues.&lt;/p&gt;
 &lt;p&gt;Begin by considering the type of DHCP environment you're supporting. For example, a coffee shop might provide wireless connectivity to customers. Chances are, these customers will only need to lease an IP address for an hour or less, meaning short lease durations will recycle addresses quickly as customers leave.&lt;/p&gt;
 &lt;p&gt;Business offices, however, would see increased network traffic and server activity with such short lease durations in a relatively unchanging environment. Lease times in these settings would typically be at least one day, and likely far more than that.&lt;/p&gt;
 &lt;p&gt;In addition, transient device types typically require shorter lease durations than more permanent systems, such as workstations. Consider the following lease durations for different types of devices:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;&lt;b&gt;Laptops.&lt;/b&gt; Up to eight hours.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Smartphones.&lt;/b&gt; Up to eight hours.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Tablets.&lt;/b&gt; Up to eight hours.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Workstation.&lt;/b&gt; Eight days. This is the default lease duration for Windows Server DHCP servers.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;VMs.&lt;/b&gt; Varies depending on the VM's use; likely very short.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;Adjust these values to meet your organization's requirements.&lt;/p&gt;
 &lt;h3&gt;Identify conflicting scopes&lt;/h3&gt;
 &lt;p&gt;As more subnets -- and, therefore, more DHCP scopes -- are added to the network, it's imperative that sysadmins accurately document the IP address ranges. Overlapping scopes, where two DHCP servers offer the same IP addresses to clients, result in various&amp;nbsp;network communication issues.&lt;/p&gt;
 &lt;p&gt;Carefully document the following Windows DHCP server configuration settings:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;&lt;b&gt;Static IP addresses.&lt;/b&gt; Manually configured on servers and network devices.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Reserved IP addresses. &lt;/b&gt;Assigned by DHCP to clients that require unchanging addresses.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;IP address usage.&lt;/b&gt; Available versus consumed IP addresses based on network inventory to ensure enough IP addresses exist when adding more clients to the subnet.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;MAC addresses. &lt;/b&gt;DHCP reservations, MAC address filtering and switch troubleshooting.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;blockquote class="main-article-pullquote"&gt;
  &lt;div class="main-article-pullquote-inner"&gt;
   &lt;figure&gt;
    DHCP must be able to provide IP addresses as departments, branch locations or network segments expand within the company. Create a scope large enough to support any expected growth.
   &lt;/figure&gt;
   &lt;i class="icon" data-icon="z"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/blockquote&gt;
 &lt;p&gt;Avoiding conflicting scopes is one reason why Microsoft requires administrators to use AD to authorize DHCP servers. That authorization can only be implemented by enterprise admins, who should have enough broad &lt;a href="https://www.techtarget.com/searchnetworking/definition/network-management"&gt;knowledge of network configuration&lt;/a&gt; to prevent conflicting scopes.&lt;/p&gt;
 &lt;h3&gt;Avoid duplicate IP address offers&lt;/h3&gt;
 &lt;p&gt;One of the most serious misconfigurations is a client computer configured with a static IP address that falls within the DHCP server's assigned IP address range. In that case, the server can offer the IP address to a client because it is unaware of the static IP. This results in an &lt;a href="https://www.techtarget.com/searchnetworking/tip/How-to-avoid-duplicate-IP-addresses-in-a-network"&gt;IP address conflict&lt;/a&gt;.&lt;/p&gt;
 &lt;p&gt;You can configure the Windows DHCP service to ping an IP address before offering it to a client. If the ping returns a response, the DHCP server knows the address is already in use and should not be offered. The server offers a different address to the client.&lt;/p&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/screenshot_configure_conflict_detection_attempts.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/screenshot_configure_conflict_detection_attempts_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/screenshot_configure_conflict_detection_attempts_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/screenshot_configure_conflict_detection_attempts.jpg 1280w" alt="Screenshot of configuring conflict detection attempt" data-credit="Damon Garn" height="281" width="559"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Figure 7. Configure conflict detection attempts.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;p&gt;The ping request occurs between the Discover and Offer steps of the lease generation process. It introduces a significant delay, so only configure this setting if you have a genuine concern about undocumented static IP addresses on client devices.&lt;/p&gt;
 &lt;h3&gt;Implement a maintenance schedule&lt;/h3&gt;
 &lt;p&gt;Keeping your DHCP servers healthy is crucial for maintaining smooth, uninterrupted IP address management. Target these three areas for regular maintenance: Monitoring, optimization and security.&lt;/p&gt;
 &lt;p&gt;Monitor the following areas:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Review status and uptime records regularly.&lt;/li&gt; 
  &lt;li&gt;Audit log files regularly.&lt;/li&gt; 
  &lt;li&gt;Review scope settings to ensure availability.&lt;/li&gt; 
  &lt;li&gt;Review administrative privileges on the server.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;Implement the following performance improvements:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Right-size DHCP scopes for the number of clients.&lt;/li&gt; 
  &lt;li&gt;Adjust lease times depending on scope and client type.&lt;/li&gt; 
  &lt;li&gt;Ensure sufficient quantities of static IP addresses remain available for network devices and servers.&lt;/li&gt; 
  &lt;li&gt;Document all settings and changes.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;Consider the following security settings:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Harden the server and the DHCP service by removing unnecessary privileges and services.&lt;/li&gt; 
  &lt;li&gt;Update the server with the latest security patches.&lt;/li&gt; 
  &lt;li&gt;&lt;a href="https://www.techtarget.com/searchsecurity/tutorial/How-to-conduct-firewall-testing-and-analyze-test-results"&gt;Ensure firewall settings&lt;/a&gt; protect the server from external connections.&lt;/li&gt; 
  &lt;li&gt;Implement MAC filtering to control client leases more effectively.&lt;/li&gt; 
  &lt;li&gt;Scan for &lt;a href="https://www.techtarget.com/searchnetworking/tip/What-is-a-rogue-DHCP-server"&gt;rogue DHCP servers&lt;/a&gt; that might result from misconfiguration or malicious intent.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;Windows DHCP server configuration is straightforward. Make sure you have a solid understanding of the entire network's &lt;a href="https://www.techtarget.com/searchnetworking/answer/What-should-I-know-about-IP-address-management-systems"&gt;IP address configurations&lt;/a&gt; before you begin, and plan your scope around both dynamic and static IP address assignments. Don't forget to create a structured maintenance schedule during your deployment.&lt;/p&gt;
 &lt;p&gt;The DHCP role is not installed by default, so the first step is to add it. From there, create a new scope based on your plan. Add any options, such as DNS and reserved addresses. Review log files regularly. DHCP is simple, but critical for network communication.&lt;/p&gt;
 &lt;p&gt;&lt;i&gt;Damon Garn owns Cogspinner Coaction and provides freelance IT writing and editing services. He has written multiple CompTIA study guides, including the Linux+, Cloud Essentials+ and Server+ guides, and contributes extensively to TechTarget Editorial, The New Stack and CompTIA Blogs.&lt;/i&gt;&lt;/p&gt;
&lt;/section&gt;</body>
            <description>Ensuring your Windows DHCP server is properly configured can be a significant undertaking. Here's what network admins can do to make the job easier.</description>
            <image>https://cdn.ttgtmedia.com/rms/onlineimages/arvr_g1226063726.jpg</image>
            <link>https://www.techtarget.com/searchnetworking/tip/A-guide-to-Windows-DHCP-server-configuration</link>
            <pubDate>Fri, 14 Nov 2025 08:30:00 GMT</pubDate>
            <title>A guide to Windows DHCP server configuration</title>
        </item>
        <item>
            <body>&lt;p&gt;AI took center stage at Microsoft Ignite 2025, this year's installment of the tech giant's annual conference.&lt;/p&gt; 
&lt;p&gt;From Nov. 18-21, conference-goers gathered at San Francisco's Moscone Center for hundreds of live sessions, demonstrations and labs focusing on key topic areas. Key topics this year included cloud and AI platforms, AI-powered security and AI business tools.&lt;/p&gt; 
&lt;p&gt;In a shakeup from years past, Microsoft CEO Satya Nadella did not make an appearance at this year's event. Judson Althoff, CEO of Microsoft's commercial business, delivered the opening keynote -- where he highlighted the company's AI innovations -- alongside senior Microsoft engineering leaders.&lt;/p&gt; 
&lt;p&gt;Dive into our editorial coverage below to catch up on the major announcements and news analysis from this year's Microsoft Ignite conference, and stay tuned for future updates.&lt;/p&gt;</body>
            <description>Our guide to Microsoft Ignite 2025 has everything you need to know about the annual conference, including live news updates, expert analysis and highlights from last year's show.</description>
            <link>https://www.techtarget.com/searchwindowsserver/conference/Microsoft-Ignite-conference-coverage</link>
            <pubDate>Mon, 10 Nov 2025 00:00:00 GMT</pubDate>
            <title>Microsoft Ignite 2025 conference coverage</title>
        </item>
        <item>
            <body>&lt;p&gt;As infrastructure grows, so does complexity. Automation with tools such as Terraform gives IT teams a way to scale more efficiently without adding to operational overhead.&lt;/p&gt; 
&lt;p&gt;The goal of any automated provisioning process, such as using Terraform to configure a Windows Server in Azure, is to &lt;a href="https://www.techtarget.com/searchwindowsserver/tutorial/How-PowerShell-can-automate-Hyper-V-deployments"&gt;automate as many of the configuration tasks&lt;/a&gt; as possible to streamline infrastructure setup. In an AD environment, joining these new servers to the domain is a crucial step to enable management with centralized tools, enforce security and enable governance.&lt;/p&gt; 
&lt;p&gt;This article will explain how to use Terraform to not only provision a Windows VM in Azure but also automatically &lt;a href="https://www.techtarget.com/searchwindowsserver/tutorial/How-to-join-Linux-to-an-Active-Directory-domain"&gt;join it to an on-premises AD domain to&lt;/a&gt; make sure the VM is ready for use immediately. This automation process also includes using Azure Key Vault to perform the server configuration securely.&lt;/p&gt; 
&lt;section class="section main-article-chapter" data-menu-title="How domain-join automation with Terraform works"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;How domain-join automation with Terraform works&lt;/h2&gt;
 &lt;p&gt;The domain-join process is often handled with a configuration management tool, such as Ansible, Puppet, Saltstack or Chef. But, as a popular infrastructure-as-code (IaC) tool, &lt;a href="https://www.techtarget.com/searchitoperations/tutorial/Dive-into-Terraform-basics-with-this-tutorial"&gt;Terraform enables you to describe the infrastructure&lt;/a&gt; in a declarative format and then deploy it with minimal manual effort. This raises the question: Should your configuration management tool handle domain joins, or should your IaC tool take care of it during provisioning?&lt;/p&gt;
 &lt;p&gt;Although Terraform isn’t designed for detailed configuration jobs, such as a domain join, it can use Azure VM extensions for this purpose. Specifically, JsonADDomainExtension can be used to automatically join the VM to the AD domain after deployment. This approach lets you use just Terraform rather than multiple tools to both deploy the VM and execute the domain join to simplify the process and maintain consistency across environments. &amp;nbsp;&lt;/p&gt;
&lt;/section&gt;   
&lt;section class="section main-article-chapter" data-menu-title="Provisioning a Windows VM in Azure with Terraform"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Provisioning a Windows VM in Azure with Terraform&lt;/h2&gt;
 &lt;p&gt;Before configuring the Azure VM extension for the domain join, let's provision the VM with Terraform. Start by defining the Azure provider.&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;provider "azurerm" {
&amp;nbsp; features {}
}&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;Next, attach the VM to a &lt;a href="https://www.techtarget.com/searchnetworking/tip/Introduction-to-IP-addressing-and-subnetting"&gt;subnet with DNS settings&lt;/a&gt; that point to the domain controller and the proper open ports. For this tutorial, we'll assume the configured subnet exists, so we'll import it with a data block.&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;data "azurerm_subnet" "example" {
&amp;nbsp; name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "Subnet Name"
&amp;nbsp; virtual_network_name = "vNet Name"
&amp;nbsp; resource_group_name&amp;nbsp; = var.resource_group_name
}&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;Next, create a network interface card (NIC) and connect it to the Azure subnet, then deploy a Windows Server VM in Azure. The code attaches the VM to the NIC so it can communicate on the private network with the domain controller.&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;resource "azurerm_network_interface" "example" {
&amp;nbsp; name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "${var.name}-nic"
&amp;nbsp; location&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = var.location
&amp;nbsp; resource_group_name = var.resource_group_name
&amp;nbsp; ip_configuration {
&amp;nbsp;&amp;nbsp;&amp;nbsp; name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "internal"
&amp;nbsp;&amp;nbsp;&amp;nbsp; subnet_id&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = data.azurerm_subnet.example.id
&amp;nbsp;&amp;nbsp;&amp;nbsp; private_ip_address_allocation = "Dynamic"
&amp;nbsp; }
}

resource "azurerm_windows_virtual_machine" "example" {
&amp;nbsp; name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = var.name
&amp;nbsp; resource_group_name = var.resource_group_name
&amp;nbsp; location&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = var.location
&amp;nbsp; size&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "Standard_F2"
&amp;nbsp; admin_username&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "adminuser"
&amp;nbsp; admin_password&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = var.admin_password
&amp;nbsp; network_interface_ids = [
&amp;nbsp;&amp;nbsp;&amp;nbsp; azurerm_network_interface.example.id,
&amp;nbsp; ]

&amp;nbsp; os_disk {
&amp;nbsp;&amp;nbsp;&amp;nbsp; caching&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "ReadWrite"
&amp;nbsp;&amp;nbsp;&amp;nbsp; storage_account_type = "Standard_LRS"
&amp;nbsp; }

&amp;nbsp; source_image_reference {
&amp;nbsp;&amp;nbsp;&amp;nbsp; publisher = "MicrosoftWindowsServer"
&amp;nbsp;&amp;nbsp;&amp;nbsp; offer&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "WindowsServer"
&amp;nbsp;&amp;nbsp;&amp;nbsp; sku&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "2025-Datacenter"
&amp;nbsp;&amp;nbsp;&amp;nbsp; version&amp;nbsp;&amp;nbsp; = "latest"
&amp;nbsp; }
}&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;The NIC takes its name from the name of the VM. This naming convention clarifies the association between the NIC and its VM and reduces the number of variables in the Terraform configuration.&lt;/p&gt;
 &lt;p&gt;Next, use the following Terraform code to add the Azure VM extension, JsonADDomainExtension, which automatically joins a Windows VM in Azure to the AD domain:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;resource "azurerm_virtual_machine_extension" "example" {
&amp;nbsp; name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "DomainJoin"
&amp;nbsp; virtual_machine_id&amp;nbsp;&amp;nbsp; = azurerm_windows_virtual_machine.example.id
&amp;nbsp; publisher&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "Microsoft.Compute"
&amp;nbsp; type&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "JsonADDomainExtension"
&amp;nbsp; type_handler_version = "1.3"



&amp;nbsp; settings = &amp;lt;&amp;lt;SETTINGS
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Name": "domain.com",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "OUPath": "OU=Servers,DC=domain,DC=com",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "User": "domain\${var.domain_join_user}",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Restart": "true",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Options": "3"
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp; SETTINGS
&amp;nbsp; protected_settings = &amp;lt;&amp;lt;PROTECTED_SETTINGS
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Password": "${var.domain_join_password}"
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp; PROTECTED_SETTINGS
}&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;This extension is associated with the VM through the &lt;b&gt;virtual_machine_id&lt;/b&gt; property, which references the deployed VM ID.&lt;/p&gt;
 &lt;p&gt;The domain-related settings are in the &lt;b&gt;settings&lt;/b&gt; and &lt;b&gt;protected_settings&lt;/b&gt; sections. For your domain, you &amp;nbsp;must replace or use variables for the following settings:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;&lt;b&gt;domain.com&lt;/b&gt;: Replace with the AD domain name.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;OU=Servers,DC=domain,DC=com&lt;/b&gt;: Replace with the organizational unit (OU) where you want to add the server.&lt;/li&gt; 
  &lt;li&gt;On the &lt;b&gt;User&lt;/b&gt; line, replace &lt;b&gt;domain&lt;/b&gt; with the short name of the login domain.&lt;/li&gt; 
 &lt;/ul&gt;
&lt;/section&gt;             
&lt;section class="section main-article-chapter" data-menu-title="Using Azure Key Vault to securely handle domain-join credentials"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Using Azure Key Vault to securely handle domain-join credentials&lt;/h2&gt;
 &lt;p&gt;It’s important to understand that the previous configuration requires passing the password as a variable. This value needs to either be in a .tfvars file or passed to the Terraform executable as a parameter.&lt;/p&gt;
 &lt;p&gt;There are several ways to accomplish both approaches, but, when working in Azure, the recommendation is to manage the password in &lt;a href="https://www.techtarget.com/searchwindowsserver/definition/Microsoft-Azure-Key-Vault"&gt;Azure Key Vault&lt;/a&gt;. Assuming the identity used to deploy the configuration has read access to secrets in the Azure Key Vault, retrieve the password using Terraform data blocks and pass it to the domain-join extension.&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;data "azurerm_key_vault" "example" {
&amp;nbsp; name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "example-keyvault"
&amp;nbsp; resource_group_name = var.resource_group_name
}

data "azurerm_key_vault_secret" "domain-join-pw" {
&amp;nbsp; name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "domain-join-pw"
&amp;nbsp; key_vault_id = data.azurerm_key_vault.example.id
}

resource "azurerm_virtual_machine_extension" "example" {
&amp;nbsp; name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "DomainJoin"
&amp;nbsp; virtual_machine_id&amp;nbsp;&amp;nbsp; = azurerm_windows_virtual_machine.example.id
&amp;nbsp; publisher&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "Microsoft.Compute"
&amp;nbsp; type&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "JsonADDomainExtension"
&amp;nbsp; type_handler_version = "1.3"

&amp;nbsp; settings = &amp;lt;&amp;lt;SETTINGS
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Name": "domain.com",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "OUPath": "OU=Servers,DC=domain,DC=com",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "User": "domain\${var.domain_join_user}",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Restart": "true",
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Options": "3"
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp; SETTINGS

&amp;nbsp; protected_settings = &amp;lt;&amp;lt;PROTECTED_SETTINGS
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "Password": "${data.azurerm_key_vault_secret.domain-join-pw.value}"|
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp; PROTECTED_SETTINGS
}&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;In the script, the extension references a secret called &lt;b&gt;domain-join-pw&lt;/b&gt; in the Azure Key Vault named &lt;b&gt;example-keyvault&lt;/b&gt;. The code securely retrieves and passes the password to the VM extension using the &lt;b&gt;protected_settings&lt;/b&gt; block to ensure encryption during deployment.&lt;/p&gt;
&lt;/section&gt;     
&lt;section class="section main-article-chapter" data-menu-title="How to test the Azure VM domain join"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;How to test the Azure VM domain join&lt;/h2&gt;
 &lt;p&gt;After running the Terraform configuration and provisioning the VM, verify its domain-join status in the Azure portal.&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Navigate to the VM.&lt;/li&gt; 
  &lt;li&gt;Expand &lt;b&gt;Settings&lt;/b&gt;.&lt;/li&gt; 
  &lt;li&gt;Click on &lt;b&gt;Extensions + applications&lt;/b&gt;.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/howell_terraform_1-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/howell_terraform_1-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/howell_terraform_1-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/howell_terraform_1-f.jpg 1280w" alt="A screenshot of the Azure portal's Extensions + applications section that shows the DomainJoin extension. " height="200" width="559"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Check the appropriate section in the Azure portal to see if the VM successfully joined the Active Directory domain.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;p&gt;Click on the &lt;b&gt;DomainJoin&lt;/b&gt; extension to open a modal window to review its status.&lt;/p&gt;
 &lt;p&gt;If you don’t see the &lt;b&gt;Join completed &lt;/b&gt;message, then the recommendation is to connect to the VM and troubleshoot the domain-join failure using standard Windows diagnostics. Once you have determined the root cause, you might need to adjust DNS or &lt;a href="https://www.techtarget.com/searchcloudcomputing/answer/Compare-Azure-Firewall-vs-NSGs-for-network-security"&gt;network-security groups if you have network-security rules in&lt;/a&gt; place.&lt;/p&gt;
&lt;/section&gt;      
&lt;section class="section main-article-chapter" data-menu-title="Scaling Windows VM deployments with domain join"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Scaling Windows VM deployments with domain join&lt;/h2&gt;
 &lt;p&gt;It's simple enough to deploy multiple domain-joined Windows VMs &lt;a target="_blank" href="https://developer.hashicorp.com/terraform/language/modules" rel="noopener"&gt;using&lt;/a&gt; Terraform modules.&lt;/p&gt;
 &lt;p&gt;The configuration used in earlier examples can be converted into a Terraform module by adding parameters to reduce hardcoded values. After defining the module, you create a new VM by calling the module. The following example shows how to call the module.&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;module "windowsvm-01" {
&amp;nbsp; source&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "./modules/windowsvm"
&amp;nbsp; name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "windowsvm-01"
&amp;nbsp; resource_group_name&amp;nbsp; = "rg-01"
&amp;nbsp; location&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "East US"
&amp;nbsp; admin_pw_secret_name = "admin-pw"
&amp;nbsp; domain_join_user&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "domainuser"
&amp;nbsp; size&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = "Standard_F2"
}&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;To create another VM, copy the module block and update the appropriate values, such as the VM name, resource group or size.&lt;/p&gt;
&lt;/section&gt;     
&lt;section class="section main-article-chapter" data-menu-title="Enlist automation to scale infrastructure securely"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Enlist automation to scale infrastructure securely&lt;/h2&gt;
 &lt;p&gt;Automating Windows VM deployment and domain join not only saves administrators significant time and effort but also ensures consistency with configurations across the domain. The combination of Terraform modules and Azure Key Vault for managing sensitive credentials makes it possible to securely scale this process. This approach reduces the manual work that can introduce errors and &lt;a href="https://www.techtarget.com/searchitoperations/tip/Infrastructure-as-code-principles-How-IaC-works-and-how-to-use-it"&gt;helps enforce IaC best practices.&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;&lt;i&gt;Anthony Howell is an IT strategist with extensive experience in infrastructure and automation technologies. His expertise includes PowerShell, DevOps, cloud computing, and working in both Windows and Linux environments.&lt;/i&gt;&lt;/p&gt;
&lt;/section&gt;</body>
            <description>Streamline the provisioning of Windows VMs in Azure, then securely join them to the on-premises AD domain using Terraform in combination with Azure Key Vault.</description>
            <image>https://cdn.ttgtmedia.com/rms/onlineimages/ai_a264431831.jpg</image>
            <link>https://www.techtarget.com/searchwindowsserver/tutorial/Automating-domain-joins-for-Azure-VMs-with-Terraform</link>
            <pubDate>Thu, 30 Oct 2025 17:05:00 GMT</pubDate>
            <title>Automating domain joins for Azure VMs with Terraform</title>
        </item>
        <item>
            <body>&lt;p&gt;Exchange Online health checks aren't just for routine maintenance but to stay ahead of bigger problems and maintain order in Microsoft's hosted email platform.&lt;/p&gt; 
&lt;p&gt;PowerShell elevates monitoring by automating tasks to cut down on manual work, and helps instill confidence in the system's reliability. A sophisticated script can give a clear view of Exchange Online to see where things are working properly and where help is needed. These insights let you act early to adjust resources or &lt;a href="https://www.techtarget.com/searchwindowsserver/tutorial/Query-event-logs-with-PowerShell-to-find-malicious-activity"&gt;investigate unusual activity&lt;/a&gt;. PowerShell is not just a tool -- it's your frontline defense mechanism.&lt;/p&gt; 
&lt;p&gt;This article will show you how to set up and use PowerShell to automate Exchange Online health checks, detect issues and generate reports to keep the email system running reliably.&lt;/p&gt; 
&lt;section class="section main-article-chapter" data-menu-title="Advantages of using PowerShell to check Exchange Online"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;&lt;strong&gt;Advantages of using PowerShell to check Exchange Online&lt;/strong&gt;&lt;/h2&gt;
 &lt;p&gt;When it comes to monitoring Exchange Online, PowerShell offers multiple benefits:&lt;/p&gt;
 &lt;ol class="default-list"&gt; 
  &lt;li&gt;&lt;b&gt;Automated scheduling. &lt;/b&gt;You can &lt;a href="https://www.techtarget.com/searchwindowsserver/tutorial/Learn-how-to-create-a-scheduled-task-with-PowerShell"&gt;schedule PowerShell scripts&lt;/a&gt; to run at specific intervals, eliminating the need for manual intervention and ensuring consistent oversight.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Detailed system insights.&lt;/b&gt; PowerShell can access key metrics in Exchange Online, such as message tracking logs and mailbox statistics, to reveal anomalies and track usage trends in your Exchange Online infrastructure.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Customized monitoring.&lt;/b&gt; You can tailor scripts for specific locations, such as mailbox growth, user activity or delivery delays, for control over what to monitor and when to trigger alerts.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Reporting features.&lt;/b&gt; You can generate reports for auditing or sharing information with stakeholders.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;p&gt;PowerShell provides comprehensive tools to monitor and manage your Exchange Online environment effectively.&lt;/p&gt;
&lt;/section&gt;    
&lt;section class="section main-article-chapter" data-menu-title="Prerequisites for using PowerShell with Exchange Online"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;&lt;strong&gt;Prerequisites for using PowerShell with Exchange Online&lt;/strong&gt;&lt;/h2&gt;
 &lt;p&gt;Before you can start monitoring Exchange Online using PowerShell, there are a few prerequisites to consider.&lt;/p&gt;
 &lt;p&gt;First, ensure you have the necessary permissions to access and monitor Exchange Online. Typically, this involves being an Exchange Online administrator role member or assigning the necessary Exchange Online management roles to your account.&lt;/p&gt;
 &lt;p&gt;Next, you must install the Exchange Online PowerShell V3 (EXO V3) module to connect to your Exchange Online environment and work within it.&lt;/p&gt;
 &lt;p&gt;Lastly, &lt;a href="https://www.techtarget.com/searchwindowsserver/definition/PowerShell"&gt;develop a basic understanding of PowerShell scripting&lt;/a&gt;. You can find prebuilt scripts online but it's helpful to know how to customize and modify scripts. Learning the basics of PowerShell, such as variables, loops and conditional statements, will enable you to create more advanced monitoring scripts.&lt;/p&gt;
 &lt;p&gt;To use PowerShell with Exchange Online, you must complete the following:&lt;/p&gt;
 &lt;ol class="default-list"&gt; 
  &lt;li&gt;&lt;b&gt;Set up your environment&lt;/b&gt;: You need a compatible Windows environment to use PowerShell with Exchange Online. The recommended OS is Windows 10 or 11.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Install the required software&lt;/b&gt;: 
   &lt;ol style="list-style-type: lower-alpha;" class="default-list"&gt; 
    &lt;li&gt;&lt;b&gt;PowerShell&lt;/b&gt;: Install the latest version of PowerShell. As of publication, PowerShell 7.4 or later is the latest version, but you should download the most recent one. Windows PowerShell 5.1 will also work but Microsoft recommends the newer open source version of PowerShell.&lt;/li&gt; 
    &lt;li&gt;&lt;b&gt;Microsoft .NET Framework&lt;/b&gt;: Exchange Online requires .NET Framework, specifically version 4.7.1 or later.&lt;/li&gt; 
    &lt;li&gt;&lt;b&gt;PowerShellGet and PackageManagement modules&lt;/b&gt;: &lt;a href="https://www.techtarget.com/searchwindowsserver/tutorial/Use-PSResourceGet-to-manage-PowerShell-modules-and-scripts"&gt;These modules&lt;/a&gt; are required for REST API-based connections used by the EXO V3 module.&lt;/li&gt; 
   &lt;/ol&gt; &lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Install the EXO V3 module&lt;/b&gt;: The PowerShell module provides cmdlets for managing Exchange Online. You can install it using the PowerShell command:&amp;nbsp;&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;p&gt;&lt;code&gt;Install-Module -Name ExchangeOnlineManagement&lt;/code&gt;&lt;/p&gt;
 &lt;ol start="4" class="default-list"&gt; 
  &lt;li&gt;&lt;b&gt;Set execution policy:&lt;/b&gt; You might need to set the execution policy in PowerShell to allow the execution of scripts. You can do this using the&amp;nbsp;&lt;span style="font-family: 'courier new', courier, monospace;"&gt;Set-ExecutionPolicy&lt;/span&gt;&amp;nbsp;cmdlet. Be careful when setting this policy, as it can have security implications. A commonly used policy for this purpose is RemoteSigned.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Connect to Exchange Online&lt;/b&gt;: Use the&amp;nbsp;&lt;span style="font-family: 'courier new', courier, monospace;"&gt;Connect-ExchangeOnline&lt;/span&gt;&amp;nbsp;cmdlet to connect to Exchange Online. The system will prompt you to enter your Exchange Online credentials.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;p&gt;As a reminder, always refer to the latest documentation from Microsoft for the most up-to-date instructions. Also, these steps might require administrative privileges. Be sure to understand the implications of each step, especially when changing system settings or execution policies.&lt;/p&gt;
&lt;/section&gt;          
&lt;section class="section main-article-chapter" data-menu-title="Monitor mail flow in Exchange Online with PowerShell"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Monitor mail flow in Exchange Online with PowerShell&lt;/h2&gt;
 &lt;p&gt;Monitoring mail flow in Exchange Online is crucial to ensure that email is sent and received correctly. PowerShell provides several cmdlets that can help you &lt;a href="https://www.techtarget.com/searchwindowsserver/tutorial/How-to-use-PowerShell-for-Exchange-Online-monitoring"&gt;check mail flow&lt;/a&gt; and troubleshoot any issues that might arise. One of the key cmdlets for this work is&amp;nbsp;&lt;span style="font-family: 'courier new', courier, monospace;"&gt;Get-MessageTraceV2&lt;/span&gt;, the replacement for the legacy &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Get-MessageTrace&lt;/span&gt; cmdlet that Microsoft deprecated in September 2025.&lt;/p&gt;
 &lt;p&gt;&lt;span style="font-family: 'courier new', courier, monospace;"&gt;Get-MessageTraceV2&lt;/span&gt; lets you retrieve information about messages sent or received within a specific period. You can filter the results based on various criteria, such as sender, recipient, subject or message status. By regularly running&amp;nbsp;&lt;span style="font-family: 'courier new', courier, monospace;"&gt;Get-MessageTraceV2&lt;/span&gt;&amp;nbsp;and analyzing the results, you can identify any potential mail flow issues and take appropriate actions. The following are examples of using &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Get-MessageTraceV2&lt;/span&gt;.&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;# Retrieve information about messages sent or received in the last 24 hours
Get-MessageTraceV2 `
    -StartDate (Get-Date).AddDays(-1) `
    -EndDate (Get-Date)
# Retrieve messages sent by a specific sender in the last 24 hours
Get-MessageTraceV2 `
    -SenderAddress user@domain.onmicrosoft.com `
    -StartDate (Get-Date).AddDays(-1) `
    -EndDate (Get-Date)

# Retrieve information about messages that failed in the last 24 hours
Get-MessageTraceV2 `
    -DeliveryStatus Failed `
    -StartDate (Get-Date).AddDays(-1) `
    -EndDate (Get-Date)&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;You can use &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Get-MessageTraceV2&lt;/span&gt; to automate checks and export entries based on delivery failures. The following script retrieves the record of the last seven days of failed delivery entries, exports it as a CSV for further review, then disconnects from Exchange Online.&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Connect-ExchangeOnline `
    -UserPrincipalName user@domain.onmicrosoft.com `
    -ShowProgress $true
$endDate = Get-Date
$startDate = $endDate.AddDays(-7)
$failedMessages = Get-MessageTraceV2 `
    -StartDate $startDate `
    -EndDate $endDate | `
    Where-Object { $_.DeliveryStatus -eq "Failed" }
if ($failedMessages) {
    $failedMessages | Export-Csv `
        -Path "C:\Temp\FailedMessages.csv" `
        -NoTypeInformation
} else {
    Write-Host "No failed messages found in the last seven days."
}
Disconnect-ExchangeOnline -Confirm:$false&lt;/code&gt;&lt;/pre&gt;
&lt;/section&gt;      
&lt;section class="section main-article-chapter" data-menu-title="Assess mailbox sizes using PowerShell"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Assess mailbox sizes using PowerShell&lt;/h2&gt;
 &lt;p&gt;In addition to&amp;nbsp;&lt;span style="font-family: 'courier new', courier, monospace;"&gt;Get-MessageTraceV2&lt;/span&gt;, PowerShell also offers other cmdlets such as &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Get-EXOMailboxStatistics&lt;/span&gt;&amp;nbsp;-- the replacement for the &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Get-MailboxStatistic&lt;/span&gt;s cmdlet -- to monitor mailbox usage in Exchange Online.&lt;/p&gt;
 &lt;p&gt;&lt;span style="font-family: 'courier new', courier, monospace;"&gt;Get-EXOMailboxStatistics&lt;/span&gt; provides valuable information about mailbox sizes, item counts and last logon times. By monitoring these metrics, you can proactively address performance issues &lt;a href="https://www.techtarget.com/searchstorage/tip/How-businesses-can-manage-Microsoft-365-storage-space"&gt;and storage limits&lt;/a&gt; that can affect the user's experience.&lt;/p&gt;
 &lt;p&gt;The following are examples of using the command&amp;nbsp;&lt;span style="font-family: 'courier new', courier, monospace;"&gt;Get-EXOMailboxStatistics.&lt;/span&gt;&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;# Get mailbox statistics for a specific user
Get-EXOMailboxStatistics `
    -Identity user@domain.onmicrosoft.com

# Get specific mailbox statistics for a user
Get-EXOMailboxStatistics `
    -Identity user@domain.onmicrosoft.com | `
        Select DisplayName, LastLogonTime, TotalItemSize&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;You can also use &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Get-EXOMailboxStatistics&lt;/span&gt; in a PowerShell script to automate the retrieval of mailboxes, then check whether the total item size exceeds a set threshold.&lt;/p&gt;
 &lt;p&gt;The script exports the list of any mailboxes that exceed the threshold of 10 GB to a CSV file.&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Connect-ExchangeOnline `
    -UserPrincipalName user@domain.onmicrosoft.com `
    -ShowProgress $true

$mailboxStats = Get-EXOMailbox -ResultSize Unlimited | ForEach-Object {
    $stats = Get-EXOMailboxStatistics -Identity $_.UserPrincipalName
    [PSCustomObject]@{
        DisplayName       = $_.DisplayName
	TotalItemSizeMB   = [math]::Round(($stats.TotalItemSize.ToMB()), 0)
        ItemCount         = $stats.ItemCount
        LastLogonTime     = $stats.LastLogonTime
    }
}

$sizeThreshold = 10240  # 10 GB


$largeMailboxes = $mailboxStats | Where-Object {
    $_.TotalItemSizeMB -gt $sizeThreshold
}

if ($largeMailboxes) {
    $largeMailboxes | Export-Csv `
        -Path "C:\Temp\LargeMailboxes.csv" -NoTypeInformation
} else {
    Write-Host "No large mailboxes found."
}&lt;/code&gt;&lt;/pre&gt;
&lt;/section&gt;        
&lt;section class="section main-article-chapter" data-menu-title="Tracking user activities in Exchange Online using PowerShell"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Tracking user activities in Exchange Online using PowerShell&lt;/h2&gt;
 &lt;p&gt;Monitoring user activities on Exchange Online is crucial for security, compliance and troubleshooting purposes. PowerShell provides several cmdlets to monitor user activities and &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/Microsoft-Purview-Audit-helps-IT-flush-out-bad-behavior"&gt;track suspicious or unauthorized actions.&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;The &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Search-MailboxAuditLog&lt;/span&gt; cmdlet was previously used to search mailbox audit logs for specific user activities, such as message deletions, mailbox logins or access by external parties. But Microsoft deprecated this cmdlet in favor of the &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Search-UnifiedAuditLog&lt;/span&gt; cmdlet, which provides a unified view of audit events across Microsoft 365 services.&lt;/p&gt;
 &lt;p&gt;The following script checks for a range of mailbox-related activity by a user.&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;# Search for Exchange mailbox audit events in the last seven days $startDate = (Get-Date).AddDays(-7)
$endDate = Get-Date
Search-UnifiedAuditLog `
  -StartDate $startDate `
  -EndDate $endDate `
  -UserIds "user@domain.com" `
  -RecordType ExchangeMailbox `
  -Operations SendAs, HardDelete, SoftDelete `&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;PowerShell offers other cmdlets optimized for Exchange Online management, such as&lt;br&gt;&lt;span style="font-family: 'courier new', courier, monospace;"&gt;Get-EXOMailboxPermission&lt;/span&gt; and &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Get-EXOMailboxFolderPermission&lt;/span&gt;, which are used to retrieve information about mailbox and folder permissions. These cmdlets help ensure users have the appropriate access rights and privileges to mailboxes and the contents.&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;# Get mailbox permissions for a specific user
Get-EXOMailboxPermission -Identity user@domain.onmicrosoft.com

# Get non-default mailbox permissions for a user
Get-EXOMailboxPermission -Identity user@domain.onmicrosoft.com | `
Where-Object { 
    ($_.IsInherited -eq $false) -and ($_.User -notlike "NT AUTHORITY\SELF")
}

# Get folder permissions for a specific folder in a user's mailbox
Get-EXOMailboxFolderPermission -Identity user@domain.onmicrosoft.com:\Inbox

# Get folder permissions for all folders in a user's mailbox
$mailbox = "user@domain.onmicrosoft.com"
$folders = Get-MailboxFolderStatistics -Identity $mailbox | `
    Select-Object -ExpandProperty FolderPath
foreach ($folder in $folders) {
    Get-EXOMailboxFolderPermission `
        -Identity "$mailbox`:$folder" | `
        Select-Object @{Name='FolderPath';Expression={$folder}}, User, AccessRights
}&lt;/code&gt;&lt;/pre&gt;
&lt;/section&gt;       
&lt;section class="section main-article-chapter" data-menu-title="Generate an Exchange Online report with PowerShell"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Generate an Exchange Online report with PowerShell&lt;/h2&gt;
 &lt;p&gt;Building reports of Exchange Online activities is valuable for auditing, compliance and communication purposes. PowerShell can generate customized reports based on specific criteria and requirements.&lt;/p&gt;
 &lt;p&gt;To build a report of Exchange activities, you can use PowerShell cmdlets such as &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Get-MessageTraceV2,&lt;/span&gt; &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Get-EXOMailboxStatistics&lt;/span&gt; and &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Search-UnifiedAuditLog&lt;/span&gt;. By combining the outputs of these cmdlets and formatting the data using PowerShell's formatting cmdlets, you can create comprehensive reports that include &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/Get-to-know-the-new-Exchange-admin-center-features"&gt;information, such as mail flow statistics&lt;/a&gt;, mailbox sizes and user activities.&lt;/p&gt;
 &lt;p&gt;&amp;nbsp;PowerShell can export the reports in various formats, such as CSV or HTML, to make it easier to share the information with stakeholders or import it into other systems for further analysis. By regularly generating and reviewing these reports, you can learn about the usage and performance of your Exchange Online environment, identify trends or anomalies and make informed decisions to optimize operations.&lt;/p&gt;
 &lt;p&gt;&amp;nbsp;The following example script checks mail flow and mailbox statistics from the last seven days and exports it into a CSV file:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Connect-ExchangeOnline -UserPrincipalName admin@domain.com
$mailboxes = Get-EXOMailbox -ResultSize Unlimited
$report = foreach ($mailbox in $mailboxes) {
    $mailboxStats = Get-EXOMailboxStatistics -Identity $mailbox.UserPrincipalName |
        Select-Object DisplayName, TotalItemSize, ItemCount
    $messageTrace = Get-MessageTraceV2 `
        -RecipientAddress $mailbox.UserPrincipalName `
        -StartDate (Get-Date).AddDays(-7) `
        -EndDate (Get-Date) | Measure-Object | Select-Object -Property Count
    $auditLogs = Search-UnifiedAuditLog `
        -UserIds $mailbox.UserPrincipalName `
        -StartDate (Get-Date).AddDays(-7) `
        -EndDate (Get-Date) `
        -RecordType ExchangeMailbox `
        -Operations SendAs, HardDelete, SoftDelete | Measure-Object | `
        Select-Object -Property Count
    [PSCustomObject]@{
        UserPrincipalName    = $mailbox.UserPrincipalName
        DisplayName          = $mailboxStats.DisplayName
        TotalItemSize        = $mailboxStats.TotalItemSize
        ItemCount            = $mailboxStats.ItemCount
        MessagesLast7Days    = $messageTrace.Count
        AuditLogsLast7Days   = $auditLogs.Count
    }
}
$report | Export-Csv -Path "C:\Temp\ExchangeReport.csv" -NoTypeInformation
Disconnect-ExchangeOnline -Confirm:$false&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;You could also change the PowerShell code to export the report as HTML:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;$report | ConvertTo-Html `
-Title "Exchange Activities Report" `
-Body "&amp;lt;h1&amp;gt;Exchange Online Activities Report&amp;lt;/h1&amp;gt;" | `
Out-File "C:\Temp\ExchangeActivitiesReport.html"&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;You can modify this script further to include other details within the report, such as the failed email delivery for the last seven days.&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Connect-ExchangeOnline -UserPrincipalName admin@domain.com
$mailboxes = Get-EXOMailbox -ResultSize Unlimited
$report = foreach ($mailbox in $mailboxes) {
    $mailboxStats = Get-EXOMailboxStatistics `
        -Identity $mailbox.UserPrincipalName |
        Select-Object DisplayName, TotalItemSize, ItemCount
    $messageTrace = Get-MessageTraceV2 `
        -RecipientAddress $mailbox.UserPrincipalName `
        -StartDate (Get-Date).AddDays(-7) `
        -EndDate (Get-Date) | Measure-Object | Select-Object -Property Count
    $auditLogs = Search-UnifiedAuditLog `
        -UserIds $mailbox.UserPrincipalName `
        -StartDate (Get-Date).AddDays(-7) `
        -EndDate (Get-Date) `
        -RecordType ExchangeMailbox `
        -Operations SendAs, HardDelete, SoftDelete | Measure-Object | Select-Object -Property Count
    [PSCustomObject]@{
        UserPrincipalName    = $mailbox.UserPrincipalName
        DisplayName          = $mailboxStats.DisplayName
        TotalItemSize        = $mailboxStats.TotalItemSize
        ItemCount            = $mailboxStats.ItemCount
        MessagesLast7Days    = $messageTrace.Count
        AuditLogsLast7Days   = $auditLogs.Count
    }
}
$failedMessages = Get-MessageTraceV2 `
    -StartDate (Get-Date).AddDays(-7) `
    -EndDate (Get-Date) | Where-Object { $_.Status -eq "Failed" }
$reportHtml = $report | ConvertTo-Html `
    -Title "Exchange Activities Report" `
    -Body "&amp;lt;h1&amp;gt;Exchange Online Activities Report&amp;lt;/h1&amp;gt;"
$failedMessagesHtml = $failedMessages | ConvertTo-Html `
    -Title "Failed Messages" `
    -Body "&amp;lt;h1&amp;gt;Failed Messages&amp;lt;/h1&amp;gt;" -As List
$finalHtmlReport = $reportHtml + $failedMessagesHtml
$finalHtmlReport | Out-File "C:\Temp\ExchangeActivitiesReport.html"&lt;/code&gt;&lt;/pre&gt;
&lt;/section&gt;          
&lt;section class="section main-article-chapter" data-menu-title="PowerShell automation helps with Exchange Online health checks"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;PowerShell automation helps with Exchange Online health checks&lt;/h2&gt;
 &lt;p&gt;PowerShell is a powerful tool to maintain the health of Exchange Online thanks to its automation, flexibility and extensive reporting capabilities. The EXO V3 module is vital to streamline monitoring tasks, gather valuable insights and proactively address potential issues.&lt;/p&gt;
 &lt;p&gt;&amp;nbsp;Whether it's monitoring mail flow or user activities, PowerShell provides a comprehensive set of cmdlets to help you effectively monitor and manage your Exchange Online infrastructure. Invest your time to learn PowerShell and how to &lt;a target="_blank" href="https://learn.microsoft.com/en-us/powershell/exchange/exchange-online-powershell-v2?view=exchange-ps" rel="noopener"&gt;use&lt;/a&gt; the EXO V3 module to enjoy the benefits of efficient monitoring and management of Exchange Online.&lt;/p&gt;
 &lt;p&gt;&amp;nbsp;&lt;i&gt;Liam Cleary is the founder and owner of SharePlicity, a technology consulting company that helps organizations with internal and external collaboration, document and records management, business process automation, automation tool deployment and security controls and protection. Cleary's areas of expertise include security on the Microsoft 365 and Azure platforms, PowerShell automation and IT administration. Cleary is a Microsoft MVP and a Microsoft Certified Trainer.&lt;/i&gt;&lt;/p&gt;
&lt;/section&gt;</body>
            <description>Learn how to use scripts to streamline Exchange Online monitoring, produce reports and address issues related to mail flow and other key areas before they affect your organization.</description>
            <image>https://cdn.ttgtmedia.com/rms/onlineimages/folder-files13.jpg</image>
            <link>https://www.techtarget.com/searchwindowsserver/tutorial/Checking-Exchange-Online-health-with-PowerShell-automation</link>
            <pubDate>Mon, 27 Oct 2025 00:00:00 GMT</pubDate>
            <title>Checking Exchange Online health with PowerShell automation</title>
        </item>
        <item>
            <body>&lt;p&gt;Traditional storage management in Windows file servers often depends on specialized hardware and relatively inflexible configuration options. These requirements don't fit the storage management needs of today's administrators, who expect highly configurable and easily scaled storage.&lt;/p&gt; 
&lt;p&gt;Windows Storage Spaces offers administrators a software-defined approach with greater flexibility, reliability and scalability. It also provides the following benefits and features:&lt;/p&gt; 
&lt;ul class="default-list"&gt; 
 &lt;li&gt;&lt;a href="https://www.techtarget.com/searchstorage/definition/software-defined-storage"&gt;Software-defined storage&lt;/a&gt; with no specialized hardware, enabling various disk combinations depending on requirements.&lt;/li&gt; 
 &lt;li&gt;Resiliency options for different use cases.&lt;/li&gt; 
 &lt;li&gt;Thin provisioning of disks to avoid wasted or overallocated space.&lt;/li&gt; 
 &lt;li&gt;Native Windows graphical management tools and &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/Top-PowerShell-commands-you-must-know-with-cheat-sheet"&gt;PowerShell cmdlets&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Support for mixed drive types, improving flexibility.&lt;/li&gt; 
 &lt;li&gt;Scalability with support for dynamic resizing.&lt;/li&gt; 
 &lt;li&gt;Redundancy through disk mirroring and/or data parity.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;While parity features sound similar to &lt;a href="https://www.techtarget.com/searchstorage/feature/How-to-choose-and-configure-Windows-Server-RAID-levels"&gt;RAID&lt;/a&gt;, Storage Spaces does not require the dedicated hardware and related support that RAID arrays call for. Storage Spaces more closely resembles Linux's &lt;a href="https://www.techtarget.com/searchStorage/tutorial/Manage-storage-using-Linux-Logical-Volume-Manager"&gt;Logical Volume Manager&lt;/a&gt; in terms of features, flexibility and resiliency.&lt;/p&gt; 
&lt;p&gt;Simple server deployments might still rely on traditional partitioning, but modern Windows servers will almost certainly benefit from the advantages Storage Spaces offers. This article covers the processes to configure, modify and manage Storage Spaces, as well as best practices for using this Windows feature.&lt;/p&gt; 
&lt;section class="section main-article-chapter" data-menu-title="Configure Windows Storage Spaces for storage management"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Configure Windows Storage Spaces for storage management&lt;/h2&gt;
 &lt;p&gt;Configuring Storage Spaces is straightforward once you understand the basic process and terminology. You'll begin by combining the capacity of two or more drives, creating a pool of available space. You then create virtual drives from that space. Partition the virtual drives, applying a file system, assigning a drive letter and configuring other settings. Users can then access the space as available storage in File Explorer.&lt;/p&gt;
 &lt;p&gt;The detailed steps are as follows.&lt;/p&gt;
 &lt;h3&gt;Attach storage devices&lt;/h3&gt;
 &lt;p&gt;Install or attach at least two physical drives. These could be internal, external, USB, Serial Advanced Technology Attachment or Serial-Attached SCSI drives. Back up any data on these disks, as Windows formats them during the configuration process. Note that the drives do not have to be the same type, capacity or speed.&lt;/p&gt;
 &lt;p&gt;After installing the drives, select Server Manager &amp;gt; File and Storage Services &amp;gt; Volumes &amp;gt; Disks. Right-click to bring each disk online so that Windows can work with it.&lt;/p&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/disk-online-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/disk-online-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/disk-online-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/disk-online-f.jpg 1280w" alt="Screenshot of Windows Server Manager showing how to bring connected storage devices online through File and Storage Services." data-credit="Damon Garn" height="330" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Figure 1. Bring storage drives online using Windows Server Manager.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;h3&gt;Create a storage pool&lt;/h3&gt;
 &lt;p&gt;Follow these steps to create a storage pool that aggregates space on the attached drives:&lt;/p&gt;
 &lt;ol class="default-list"&gt; 
  &lt;li&gt;From Server Manager, go to File and Storage Services &amp;gt; Volumes &amp;gt; Storage Pools and open the New Storage Pool Wizard from the Tasks drop-down menu in the Physical Disks pane.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/new-storage-pool-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/new-storage-pool-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/new-storage-pool-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/new-storage-pool-f.jpg 1280w" alt="Screenshot of the Storage Pools settings in Windows Server Manager showing where to locate the New Storage Pool button." data-credit="Damon Garn" height="238" width="559"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Figure 2. Manage multiple physical drives as a single resource by creating a new storage pool.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;ol start="2" class="default-list"&gt; 
  &lt;li&gt;Once the New Storage Pool Wizard opens, click &lt;b&gt;Next&lt;/b&gt; to proceed.&lt;/li&gt; 
  &lt;li&gt;Enter a name and description for the pool and then click &lt;b&gt;Next&lt;/b&gt;.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/name-description-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/name-description-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/name-description-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/name-description-f.jpg 1280w" alt="Screenshot of the New Storage Pool Wizard prompting the user to specify a storage pool name and system." data-credit="Damon Garn" height="371" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Figure 3. The New Storage Pool Wizard requires a name and description for the pool. Then, select which drives to aggregate.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;ol start="4" class="default-list"&gt; 
  &lt;li&gt;Select the physical disks you want to include in the pool. You can configure multiple pools, so you don't need to select every available drive. Click &lt;b&gt;Next&lt;/b&gt;.&lt;/li&gt; 
  &lt;li&gt;Confirm that the selections match your requirements and then click &lt;b&gt;Create&lt;/b&gt;.&lt;/li&gt; 
  &lt;li&gt;After Windows creates the pool, close the interface. Note the option labeled "Create a virtual disk when this wizard closes." Check this box to proceed to the next steps automatically.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;h3&gt;Create a virtual disk&lt;/h3&gt;
 &lt;p&gt;The next task is to carve a virtual disk from the newly created storage pool. You'll use this virtual disk as if it were a physical disk. The following steps outline this process:&lt;/p&gt;
 &lt;ol class="default-list"&gt; 
  &lt;li&gt;Use the Tasks drop-down menu in the Virtual Disks pane to select &lt;b&gt;New Virtual Disk&lt;/b&gt;.&lt;/li&gt; 
  &lt;li&gt;Select the storage pool from which to create the new virtual disk and click &lt;b&gt;OK&lt;/b&gt;.&lt;/li&gt; 
  &lt;li&gt;The New Virtual Disk Wizard opens. Click &lt;b&gt;Next&lt;/b&gt; to proceed.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/new-virtual-disk-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/new-virtual-disk-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/new-virtual-disk-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/new-virtual-disk-f.jpg 1280w" alt="Screenshot of the Storage Pools settings in Windows Server Manager showing where to locate the New Virtual Disk button." data-credit="Damon Garn" height="283" width="559"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Figure 4. After creating the storage pool, create a virtual disk using the New Virtual Disk Wizard.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;ol start="4" class="default-list"&gt; 
  &lt;li&gt;Enter a name and description for the virtual disk and then click &lt;b&gt;Next&lt;/b&gt;.&lt;/li&gt; 
  &lt;li&gt;Configure enclosure awareness if your configuration supports it. Click &lt;b&gt;Next&lt;/b&gt;.&lt;/li&gt; 
  &lt;li&gt;Select a storage layout to define resiliency and then click &lt;b&gt;Next&lt;/b&gt;. There are three layout options: 
   &lt;ol class="default-list"&gt; 
    &lt;li&gt;Simple (no resiliency).&lt;/li&gt; 
    &lt;li&gt;Mirror.&lt;/li&gt; 
    &lt;li&gt;Parity (similar to RAID 5).&lt;/li&gt; 
   &lt;/ol&gt; &lt;/li&gt; 
  &lt;li&gt;Select thin or fixed provisioning to allocate space to the virtual disk and then click &lt;b&gt;Next&lt;/b&gt;.&lt;/li&gt; 
  &lt;li&gt;Specify the size of the new virtual disk. It does not have to consume the entire pool, as you can create multiple virtual disks from a single pool. Click &lt;b&gt;Next&lt;/b&gt;.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/virtual-disk-name-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/virtual-disk-name-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/virtual-disk-name-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/virtual-disk-name-f.jpg 1280w" alt="Screenshot of the New Virtual Disk Wizard prompting the user to specify the size of the virtual disk." data-credit="Damon Garn" height="300" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Figure 5. Specify the size of the new virtual disk. Note that a single pool can have multiple virtual disks, so a single disk does not need to be the size of the entire pool.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;ol start="9" class="default-list"&gt; 
  &lt;li&gt;Confirm that the selections match your requirements and then click &lt;b&gt;Create&lt;/b&gt;.&lt;/li&gt; 
  &lt;li&gt;After Windows creates the virtual disk, you can close the interface. Note the option labeled "Create a volume when this wizard closes." Check this box to proceed to the next steps automatically.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;h3&gt;Create a volume&lt;/h3&gt;
 &lt;p&gt;Think of the virtual disk as a physical disk. You must now create a volume on it using the following process, which resembles traditional partitioning:&lt;/p&gt;
 &lt;ol class="default-list"&gt; 
  &lt;li&gt;Right-click the new virtual disk in the Virtual Disks pane and then select &lt;b&gt;New Volume &lt;/b&gt;to launch the New Volume Wizard.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/new-volume-f.jpg "&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/new-volume-f_mobile.jpg " class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/new-volume-f_mobile.jpg  960w,https://www.techtarget.com/rms/onlineimages/new-volume-f.jpg  1280w" alt="Screenshot of the Storage Pools settings in Windows Server Manager showing where to locate the New Volume button in the Virtual Disks pane." data-credit="Damon Garn" height="357" width="559"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Figure 6. After creating the new virtual disk, access the New Volume Wizard through the Virtual Disks pane.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;ol start="2" class="default-list"&gt; 
  &lt;li&gt;Select the server and virtual disk. Click &lt;b&gt;Next&lt;/b&gt;.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/server-and-disk-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/server-and-disk-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/server-and-disk-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/server-and-disk-f.jpg 1280w" alt="Screenshot of the New Volume Wizard prompting the user to select the server and disk for the new volume." data-credit="Damon Garn" height="312" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Figure 7. Start by choosing a server and disk to host the new volume. 
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;ol start="3" class="default-list"&gt; 
  &lt;li&gt;Choose a size for the new volume. It does not need to consume the entire virtual disk. Click &lt;b&gt;Next&lt;/b&gt; to proceed.&lt;/li&gt; 
  &lt;li&gt;Choose a drive letter or folder path for the mount point. Click &lt;b&gt;Next&lt;/b&gt;.&lt;/li&gt; 
  &lt;li&gt;Select the NTFS or ReFS file system and then choose an allocation unit size and volume label. Click &lt;b&gt;Next&lt;/b&gt; to proceed.&lt;/li&gt; 
  &lt;li&gt;Confirm that the selections match your requirements and then click &lt;b&gt;Create&lt;/b&gt;.&lt;/li&gt; 
  &lt;li&gt;Select &lt;b&gt;Close&lt;/b&gt; to exit the New Volume Wizard.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;p&gt;The wizard finishes by formatting and mounting the volume. It now appears as a drive in File Manager. You can create folders to share on the network or handle the volume just as you would a traditional drive.&lt;/p&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/p-drive-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/p-drive-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/p-drive-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/p-drive-f.jpg 1280w" alt="Screenshot of Windows File Manager showing how a newly created volume appears as a drive in the " data-credit="Damon Garn" height="247" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Figure 8. After creating the new volume, it will appear in File Manager using the drive letter or folder path selected in the New Volume Wizard.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
&lt;/section&gt;                              
&lt;section class="section main-article-chapter" data-menu-title="Modify the storage capacity"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Modify the storage capacity&lt;/h2&gt;
 &lt;p&gt;Adding or removing storage capacity follows a similar procedure to creating a new pool. However, instead of creating new space, you will add it to existing storage. You also have the option to shrink storage. Follow these steps to modify the storage capacity:&lt;/p&gt;
 &lt;ol class="default-list"&gt; 
  &lt;li&gt;Install or connect a new physical drive.&lt;/li&gt; 
  &lt;li&gt;Use the Storage Pools menu to add the new drive to the necessary pool.&lt;/li&gt; 
  &lt;li&gt;Extend the virtual disk to include the new storage space.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/extend-virtual-disk-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/extend-virtual-disk-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/extend-virtual-disk-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/extend-virtual-disk-f.jpg 1280w" alt="Screenshot of the Virtual Disk pane in Windows Server Manager showing where to locate the Extend Virtual Disk button." data-credit="Damon Garn" height="355" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Figure 9. When adding capacity to the storage pool, extend the virtual disk to include the new physical storage drive.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;ol start="4" class="default-list"&gt; 
  &lt;li&gt;Extend the volume/partition using the Disk Management interface to utilize the additional capacity.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;p&gt;Note that the drives do not have to be offline to modify capacity. This feature is essential for busy file servers that need more space but must remain available to users.&lt;/p&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/modify-volume-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/modify-volume-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/modify-volume-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/modify-volume-f.jpg 1280w" alt="Screenshot of the Disk Management interface showing how to modify the volume of a virtual disk." data-credit="Damon Garn" height="223" width="559"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Figure 10. The Disk Management interface enables users to extend, shrink or delete volumes from a virtual disk.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
&lt;/section&gt;       
&lt;section class="section main-article-chapter" data-menu-title="Manage Storage Spaces"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Manage Storage Spaces&lt;/h2&gt;
 &lt;p&gt;There are several interfaces for managing Storage Spaces, including graphical and command-line options, among others.&lt;/p&gt;
 &lt;p&gt;The Server Manager interface offers an easy way to manage storage configurations. Access Storage Spaces by going to Server Manager &amp;gt; File and Storage Services &amp;gt; Storage Pools.&lt;/p&gt;
 &lt;p&gt;&lt;a href="https://www.techtarget.com/searchwindowsserver/tip/Top-PowerShell-disk-management-commands-for-Windows-storage"&gt;Many PowerShell cmdlets exist&lt;/a&gt; for managing storage capacity, including the following:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;&lt;samp&gt;Get-PhysicalDisk&lt;/samp&gt;: List available disks.&lt;/li&gt; 
  &lt;li&gt;&lt;samp&gt;Add-PhysicalDisk&lt;/samp&gt;: Add available disks to a pool.&lt;/li&gt; 
  &lt;li&gt;&lt;samp&gt;New-StoragePool&lt;/samp&gt;: Create a storage pool.&lt;/li&gt; 
  &lt;li&gt;&lt;samp&gt;Get-StoragePool&lt;/samp&gt;: Display storage pool information.&lt;/li&gt; 
  &lt;li&gt;&lt;samp&gt;New-VirtualDisk&lt;/samp&gt;: Create a virtual disk from a storage pool.&lt;/li&gt; 
  &lt;li&gt;&lt;samp&gt;Get-VirtualDisk&lt;/samp&gt;: Display virtual disk information.&lt;/li&gt; 
  &lt;li&gt;&lt;samp&gt;Resize-VirtualDisk&lt;/samp&gt;: Extend the virtual disk onto the newly installed space.&lt;/li&gt; 
  &lt;li&gt;&lt;samp&gt;Resize-Partition&lt;/samp&gt;: Extend the volume onto the extended virtual disk.&lt;/li&gt; 
  &lt;li&gt;&lt;samp&gt;Optimize-StoragePool&lt;/samp&gt;: Rebalances the physical disks in a pool to optimize space and performance.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/get-storagepool-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/get-storagepool-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/get-storagepool-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/get-storagepool-f.jpg 1280w" alt="Screenshot of a Windows PowerShell script running the Get-StoragePool cmdlet." data-credit="Damon Garn" height="129" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Figure 11. The Get-StoragePool cmdlet displays information for all storage pools.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;p&gt;You can create PowerShell scripts to automate storage administration and monitoring.&lt;/p&gt;
 &lt;p&gt;The storage capacity is ready for standard management. You can now configure additional storage features, including &lt;a href="https://www.techtarget.com/searchdatabackup/tutorial/How-to-deploy-Data-Duplication-on-Windows-Server"&gt;data deduplication&lt;/a&gt;, &lt;a href="https://www.techtarget.com/searchdatacenter/tip/Create-file-server-screens-and-quotas-in-FSRM"&gt;File Server Resource Manager&lt;/a&gt; components and Windows Backups.&lt;/p&gt;
&lt;/section&gt;        
&lt;section class="section main-article-chapter" data-menu-title="Monitor Storage Spaces"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Monitor Storage Spaces&lt;/h2&gt;
 &lt;p&gt;Windows logs Storage Spaces information in Event Viewer, including warnings and errors pertaining to physical disks, storage pools and virtual disks. The primary log file is the System log, though you also might find information in the Applications and Services Logs under the StorageManagement and StorageSpaces log folders.&lt;/p&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/event-viewer-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/event-viewer-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/event-viewer-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/event-viewer-f.jpg 1280w" alt="Screenshot of Windows Event Viewer." data-credit="Damon Garn" height="228" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Figure 12. Check Windows Event Viewer for warnings, errors and other events pertaining to Storage Spaces.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;p&gt;Review these logs if you suspect any issues with Storage Spaces.&lt;/p&gt;
 &lt;p&gt;Select the &lt;b&gt;Volumes&lt;/b&gt;, &lt;b&gt;Disk&lt;/b&gt; and &lt;b&gt;Storage Pools&lt;/b&gt; nodes in Server Manager to review status and health information for each component of the storage pool.&lt;/p&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/summary-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/summary-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/summary-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/summary-f.jpg 1280w" alt="Screenshot of Windows Server Manager showing status and health information for the volume component of the storage pool." data-credit="Damon Garn" height="284" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Figure 13. Revisit each component in Server Manager for updated status and health information.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;p&gt;As mentioned above, PowerShell also includes various monitoring and information-gathering cmdlets.&lt;/p&gt;
&lt;/section&gt;       
&lt;section class="section main-article-chapter" data-menu-title="Storage Spaces best practices"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Storage Spaces best practices&lt;/h2&gt;
 &lt;p&gt;Carefully document your Storage Spaces configurations, including any updates and changes to the capacity and drives.&lt;/p&gt;
 &lt;p&gt;Monitor Storage Spaces regularly using the &lt;samp&gt;Get-StoragePool&lt;/samp&gt; and &lt;samp&gt;Get-VirtualDisk&lt;/samp&gt; cmdlets for drive health, capacity information and status. Replace disks and add capacity based on this information.&lt;/p&gt;
 &lt;p&gt;Remember that the resiliency offered by Storage Spaces does not replace &lt;a href="https://www.techtarget.com/searchDataBackup/tutorial/How-to-use-the-Windows-Server-Backup-tool"&gt;regular backups&lt;/a&gt;. Storage Spaces should be only one of several data protection layers.&lt;/p&gt;
 &lt;p&gt;&lt;a href="https://www.techtarget.com/searchwindowsserver/tip/Learn-how-the-Windows-Server-2025-editions-differ"&gt;Modern Windows servers&lt;/a&gt; benefit from Storage Spaces, so begin the process of migrating your data today.&lt;/p&gt;
 &lt;p&gt;&lt;i&gt;Damon Garn owns Cogspinner Coaction and provides freelance IT writing and editing services. He has written multiple CompTIA study guides, including the Linux+, Cloud Essentials+ and Server+ guides, and contributes extensively to Informa TechTarget, The New Stack and CompTIA Blogs.&lt;/i&gt;&lt;/p&gt;
&lt;/section&gt;</body>
            <description>Windows Storage Spaces is an alternative approach to traditional storage management that provides increased flexibility and scalability in a straightforward configuration process.</description>
            <image>https://cdn.ttgtmedia.com/rms/onlineimages/storage_g922017556.jpg</image>
            <link>https://www.techtarget.com/searchitoperations/tutorial/Guide-to-Windows-storage-management-using-Storage-Spaces</link>
            <pubDate>Tue, 21 Oct 2025 13:47:00 GMT</pubDate>
            <title>Guide to Windows storage management using Storage Spaces</title>
        </item>
        <item>
            <body>&lt;p&gt;Upgrading an Active Directory forest to run on Windows Server 2025 isn't overly difficult, but the process requires preparation.&lt;/p&gt; 
&lt;p&gt;In its latest Windows Server release, Microsoft &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/See-whats-coming-in-Windows-Server-2025"&gt;introduced several Active Directory enhancements&lt;/a&gt;, including new features and improved functionality that will appeal to organizations. Before they can implement these features, though, they'll need to migrate their domain controllers to Windows Server 2025.&lt;/p&gt; 
&lt;p&gt;This article provides a walkthrough of the planning required before an AD domain controller migration and then covers the steps involved in performing the actual upgrade.&lt;/p&gt; 
&lt;section class="section main-article-chapter" data-menu-title="Why upgrade Active Directory?"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Why upgrade Active Directory?&lt;/h2&gt;
 &lt;p&gt;One major development in Windows Server 2025 is the increased database page size. Since the days of Windows 2000, Active Directory has relied on an Extensible Storage Engine database with an 8 KB page size. While this might have been fine 25 years ago, today the page size limitations hinder overall AD scalability. Microsoft has removed these limitations by increasing the page size to 32 KB. Additionally, AD now takes advantage of &lt;a href="https://www.techtarget.com/whatis/definition/NUMA-non-uniform-memory-access"&gt;non-uniform memory access&lt;/a&gt; nodes and can support up to 64 CPU cores.&lt;/p&gt;
 &lt;p&gt;Microsoft has also taken steps to improve AD security. As an example, the lightweight directory access protocol used by Active Directory now supports TLS version 1.3. Similarly, Active Directory blocks legacy Security Account Manager Remote Procedure Call protocols in favor of more secure alternatives, such as Kerberos. The Microsoft Learn website offers a &lt;a target="_blank" href="https://learn.microsoft.com/en-us/windows-server/get-started/whats-new-windows-server-2025" rel="noopener"&gt;full list&lt;/a&gt; of the latest AD enhancements.&lt;/p&gt;
&lt;/section&gt;   
&lt;section class="section main-article-chapter" data-menu-title="Prepare for your domain controller migration"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Prepare for your domain controller migration&lt;/h2&gt;
 &lt;p&gt;Before upgrading your &lt;a href="https://www.techtarget.com/searchwindowsserver/definition/domain-controller"&gt;domain controllers&lt;/a&gt; to Windows Server 2025, take the following steps to help ensure a smooth and successful migration.&lt;/p&gt;
 &lt;h3&gt;Assess replication process&lt;/h3&gt;
 &lt;p&gt;The first step involves checking Active Directory to make sure the domain controllers are properly replicating with one another and that the replication process is healthy. This step will also need to be performed again later as part of the migration process. To check the replication status, open PowerShell and enter the command &lt;samp&gt;RepAdmin /ReplSummary&lt;/samp&gt;. Make sure there are no replication errors, as shown in Figure 1.&lt;/p&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/bposey_adupgrade_1-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/bposey_adupgrade_1-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/bposey_adupgrade_1-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/bposey_adupgrade_1-f.jpg 1280w" alt="Screenshot of Windows PowerShell displaying information generated by the RepAdmin tool." data-credit="Brien Posey" height="295" width="559"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Figure 1. Check for replication errors by using the RepAdmin tool.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;h3&gt;Create an Active Directory backup&lt;/h3&gt;
 &lt;p&gt;This backup should be done at the last minute to ensure capture of all the latest AD changes. Practice restoring your backups to a lab environment so that you can test their integrity. This process helps familiarize the recovery process in case anything goes wrong.&lt;/p&gt;
 &lt;h3&gt;Audit legacy protocols, applications&lt;/h3&gt;
 &lt;p&gt;Evaluate NT LAN Manager usage throughout your organization. NTLM is a legacy protocol that you should ideally phase out as part of the upgrade process. However, you might still have legacy applications that require NTLM, which might force you to continue using the protocol.&lt;/p&gt;
 &lt;h3&gt;Evaluate hardware requirements&lt;/h3&gt;
 &lt;p&gt;These requirements are relatively modest: 1.4 GHz 64-bit CPU; 2 GB of RAM, or 4 GB as recommended for the Desktop Experience; and 32 GB of storage.&lt;/p&gt;
 &lt;p&gt;You should also review the hardware that your existing domain controllers currently use, since domain controllers will almost always require more than just the minimum hardware. This would be a good time to assess whether your existing hardware allocations are sufficient or if you need to allocate more hardware to your domain controllers.&lt;/p&gt;
 &lt;h3&gt;Consider raising functional levels&lt;/h3&gt;
 &lt;p&gt;Finally, decide whether you want to upgrade to the latest domain and forest &lt;a href="https://www.techtarget.com/searchwindowsserver/definition/Active-Directory-functional-levels"&gt;functional levels&lt;/a&gt;. Prior to Windows Server 2025, the highest available functional level was Windows Server 2016. Upgrading to the Windows Server 2025 domain functional level lets you take advantage of all the latest enhancements, but you cannot perform the upgrade until all of the domain controllers within the domain are running Windows Server 2025.&lt;/p&gt;
 &lt;p&gt;Note that upgrading the domain functional level is a one-way operation. Once you upgrade the functional level, you will no longer be able to deploy domain controllers running older versions of Windows.&lt;/p&gt;
 &lt;p&gt;The same basic concept also applies to forest functional level upgrades. Raising the forest functional level to Windows Server 2025 requires all of your domains to be operating at the Windows Server 2025 domain functional level. Once again, this is a one-way operation; once you raise the forest functional level, you can no longer deploy domains at lower functional levels.&lt;/p&gt;
 &lt;p&gt;The importance of having a good AD backup increases exponentially when upgrading functional levels. It's a good idea to create a new one just before raising a functional level.&lt;/p&gt;
 &lt;div class="btt-thumbnailContainer"&gt;
  &lt;span class="btt-thumbnailTitle"&gt;Plan Your Domain Controller Migration to Windows Server 2025&lt;/span&gt;
  &lt;a class="btt-thumbnailLink" data-video-id="652475" data-channel-id="18865"&gt;
   &lt;div class="btt-thumbnailImgContainer"&gt;
    &lt;img class="btt-videoBtThumbnail" src="https://cdn.brighttalk.com/ams/california/images/communication/652475/image_1059089.png?width=640&amp;amp;height=360"&gt;
   &lt;/div&gt;&lt;/a&gt;
  &lt;time class="btt-video-duration" datetime="PT14M40S"&gt;14:40&lt;/time&gt;
 &lt;/div&gt;
 &lt;div class="btt-modal"&gt;
  &lt;div class="btt-modal-content"&gt;&lt;/div&gt;
 &lt;/div&gt;
&lt;/section&gt;                  
&lt;section class="section main-article-chapter" data-menu-title="Domain controller migration, step by step"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Domain controller migration, step by step&lt;/h2&gt;
 &lt;p&gt;Once all the prep work has been completed, it's time for the actual domain controller migration. While you can perform an in-place upgrade from Windows Server 2012 R2 or newer Windows Server OSes, the following steps will be for a clean installation onto physical or virtual hardware, as this is usually the preferred option.&lt;/p&gt;
 &lt;h3&gt;1. Install the OS and Domain Services&lt;/h3&gt;
 &lt;p&gt;The first step is to install Windows Server 2025. You will need to join the machine to the AD domain where it will eventually serve as a domain controller before continuing. Take this opportunity to install any available updates.&lt;/p&gt;
 &lt;p&gt;With the OS ready to go, next you will need to install &lt;a href="https://www.techtarget.com/searchwindowsserver/definition/Microsoft-Active-Directory-Domain-Services-AD-DS"&gt;Active Directory Domain Services&lt;/a&gt;. From the GUI, open Server Manager and then choose the &lt;b&gt;Add Roles and Features&lt;/b&gt; command from the Manage menu. Work your way through the wizard until you reach the Roles screen. Here, you will need to select the Active Directory Domain Services role. When prompted, be sure to install any required dependency services.&lt;/p&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/bposey_adupgrade_2-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/bposey_adupgrade_2-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/bposey_adupgrade_2-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/bposey_adupgrade_2-f.jpg 1280w" alt="Screenshot of the Add Roles and Features Wizard showing the server roles selection screen in Server Manager." data-credit="Brien Posey" height="400" width="559"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Figure 2. Install the Active Directory Domain Services role from Server Manager.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;h3&gt;2. Deploy DNS services&lt;/h3&gt;
 &lt;p&gt;Although not technically a requirement, consider where you plan to host the DNS services. Active Directory cannot function without DNS. As such, there is a strong possibility that some of your legacy domain controllers are also functioning as DNS servers. If you are completely doing away with these legacy servers, then you will need to deploy DNS elsewhere.&lt;/p&gt;
 &lt;p&gt;One option is to run the DNS services on your new domain controllers. You can do so by selecting the DNS Server checkbox, shown in Figure 2. You will also need to install the dependency features when prompted. If you are migrating DNS to a new server, remember to modify the IP address configuration used throughout your organization so that it points to the new DNS server.&lt;/p&gt;
 &lt;h3&gt;3. Promote new domain controllers&lt;/h3&gt;
 &lt;p&gt;When the role deployment process is complete, click on the &lt;b&gt;Promote This Server to a Domain Controller&lt;/b&gt; link. This will launch the Deployment Configuration Wizard. Select the option to add a new domain controller to an existing domain and then verify that the correct domain is selected. Click &lt;b&gt;Next&lt;/b&gt;, and the following screen will ask you to select the capabilities for the new domain controller. Unless you are &lt;a href="https://www.techtarget.com/searchwindowsserver/tutorial/Deploy-a-read-only-domain-controller-for-security-speed"&gt;deploying a read-only domain controller&lt;/a&gt;, select the default options. While you are at it, you will need to enter and confirm a Directory Services Restore password. Click &lt;b&gt;Next&lt;/b&gt; until you complete the wizard. At that point, the server will be configured to act as a domain controller. A reboot is required at the completion of this process.&lt;/p&gt;
 &lt;p&gt;When the reboot is complete, give your new domain controller some time to receive copies of all the objects that currently exist within your Active Directory. Before moving forward, check the replication health using the same method discussed earlier. Make sure that AD replication is functioning properly and the initial replication process is complete before proceeding. If you encounter replication errors, verify that DNS name resolution is working properly and that all the domain controller clocks are correct.&lt;/p&gt;
 &lt;h3&gt;4. Deprovision legacy domain controllers&lt;/h3&gt;
 &lt;p&gt;If you plan to deprovision your legacy domain controllers, it's a good idea to &lt;a href="https://www.techtarget.com/searchwindowsserver/tutorial/How-to-transfer-FSMO-roles-with-PowerShell"&gt;transfer Flexible Single Master Operation (FSMO) roles&lt;/a&gt;. The role transfer should occur automatically as part of the deprovisioning process, but transferring roles ahead of time can help avoid any surprises. The easiest way to do this is to open an elevated PowerShell session and enter the following command:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Move-ADDirectoryServerOperationMasterRole -Identity $env:COMPUTERNAME -OperationMasterRole 0,1,2,3,4 -Confirm:$False&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;This command, shown in Figure 3, will transfer all of the operation master roles to your new domain controller. If you only wish to transfer some of the roles, you can change the numbers listed at the end of the command. Each of these numbers represents a role:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;0: Primary domain controller emulator.&lt;/li&gt; 
  &lt;li&gt;1: Relative identifier master.&lt;/li&gt; 
  &lt;li&gt;2: Infrastructure master.&lt;/li&gt; 
  &lt;li&gt;3: Schema master.&lt;/li&gt; 
  &lt;li&gt;4: Domain naming master.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/bposey_adupgrade_3-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/bposey_adupgrade_3-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/bposey_adupgrade_3-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/bposey_adupgrade_3-f.jpg 1280w" alt="Screenshot of Windows PowerShell displaying a command that transfers FSMO roles to the local system." data-credit="Brien Posey" height="344" width="559"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Figure 3. Use PowerShell to transfer all FSMO roles to your new domain controller.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;p&gt;You can verify that the roles have been successfully transferred with the &lt;samp&gt;netdom query fsmo&lt;/samp&gt; command.&lt;/p&gt;
 &lt;p&gt;The next step in the process is to begin deprovisioning your legacy domain controllers. The exact steps involved will vary slightly depending on the version of Windows Server in use. At a high level, however, the deprovisioning process involves opening Server Manager and removing the AD Domain Services role.&lt;/p&gt;
 &lt;p&gt;&lt;i&gt;Brien Posey is a former 22-time Microsoft MVP and a commercial astronaut candidate. In his more than 30 years in IT, he has served as a lead network engineer for the U.S. Department of Defense and a network administrator for some of the largest insurance companies in America.&lt;/i&gt;&lt;/p&gt;
&lt;/section&gt;</body>
            <description>Windows Server 2025 offers a slew of new Active Directory features, but users must migrate their domain controllers before they can realize the benefits.</description>
            <image>https://cdn.ttgtmedia.com/rms/onlineimages/security_a244600171.jpg</image>
            <link>https://www.techtarget.com/searchwindowsserver/tip/Plan-your-domain-controller-migration-to-Windows-Server-2025</link>
            <pubDate>Fri, 17 Oct 2025 14:28:00 GMT</pubDate>
            <title>Plan your domain controller migration to Windows Server 2025</title>
        </item>
        <item>
            <body>&lt;p&gt;When you learn to write PowerShell functions, you might start by solving a specific problem. But as your projects grow more complex, adding flexibility to your scripts will help in the future. &amp;nbsp;&lt;/p&gt; 
&lt;p&gt;As you use PowerShell functions more and &lt;a href="https://searchwindowsserver.techtarget.com/Comprehensive-PowerShell-guide-for-new-and-seasoned-admins"&gt;gain more scripting experience&lt;/a&gt;, you'll see ways the function would be more useful if it had the versatility to solve the same problem but in a slightly differently way. Learning how to use default values in parameters makes your code both able to adapt to different situations and simpler to understand. This article will explain how to set default values to make your scripts smarter while showing you how to avoid common pitfalls that can introduce issues or unnecessary complexity. &amp;nbsp;&lt;/p&gt; 
&lt;section class="section main-article-chapter" data-menu-title="Introduction to default parameter values"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Introduction to default parameter values&lt;/h2&gt;
 &lt;p&gt;A parameter default value is the value given to a parameter if an explicit value isn’t specified. For example, if &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/Top-PowerShell-commands-you-must-know-with-cheat-sheet"&gt;you run Get-ChildItem&lt;/a&gt; without any parameters, it defaults to using your current working directory as if you had executed Get-ChildItem -Path .\.&lt;/p&gt;
 &lt;p&gt;Another example is using the Copy-Item cmdlet to copy a file. If you don't specify a value to the Destination parameter, then PowerShell automatically copies the item to the current working directory. These two commands produce the same result of copying the file to the same directory where the command is executed:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Copy-Item -Path C:\path\file.txt&lt;/code&gt;&lt;/pre&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Copy-Item -Path C:\path\file.txt -Destination .\&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;As a PowerShell user, you have the power to define default parameters for both functions that you write and functions that you consume.&lt;/p&gt;
 &lt;h3&gt;Define default values&lt;/h3&gt;
 &lt;p&gt;PowerShell lets users define default values for parameters in two ways:&lt;/p&gt;
 &lt;ol class="default-list"&gt; 
  &lt;li&gt;In the function by the function author.&lt;/li&gt; 
  &lt;li&gt;In a script or interactively by a user.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;p&gt;In the &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/Understanding-the-parameters-of-Windows-PowerShell-functions"&gt;param block of a function&lt;/a&gt;, any parameter can declare a default value by using the assignment operator, which is the equal sign, and specifying a value. For example:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Function Test-DefaultValues {
&amp;nbsp;&amp;nbsp;&amp;nbsp; [CmdletBinding()]
&amp;nbsp;&amp;nbsp;&amp;nbsp; param (
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;[string]$String = "Default String"
&amp;nbsp;&amp;nbsp;&amp;nbsp; )
&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host $String
}&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;The code gives the $String parameter a default value of "Default String." Running this function without parameters will generate the output that text&lt;b&gt;.&lt;/b&gt;&lt;/p&gt;
 &lt;p&gt;You can also use the subexpression operator $() to execute PowerShell code to assign a default value. In the following example, the function calculates how many days there are until Friday:&lt;br&gt;&lt;br&gt;&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Function Test-DefaultValues {
&amp;nbsp;&amp;nbsp;&amp;nbsp; [CmdletBinding()]
&amp;nbsp;&amp;nbsp;&amp;nbsp; param (
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [int]$DaysUntilFriday = $(switch ($([DateTime]::Now.DayOfWeek)) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Monday' { 4 }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Tuesday' { 3 }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Wednesday' { 2 }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Thursday' { 1 }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Friday' { 0 }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Saturday' { 6 }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Sunday' { 5 }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; })
&amp;nbsp;&amp;nbsp;&amp;nbsp; )
&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "There are $DaysUntilFriday days until Friday."
}&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;If you run this function with no parameters and enter Test-DefaultValues on the command line on a Monday, then the output will show: &lt;b&gt;There are 4 days until Friday.&amp;nbsp; &lt;/b&gt;&amp;nbsp;&lt;/p&gt;
 &lt;div class="btt-thumbnailContainer"&gt;
  &lt;span class="btt-thumbnailTitle"&gt;Try default values in PowerShell parameters for flexibility&lt;/span&gt;
  &lt;a class="btt-thumbnailLink" data-video-id="652814" data-channel-id="18865"&gt;
   &lt;div class="btt-thumbnailImgContainer"&gt;
    &lt;img class="btt-videoBtThumbnail" src="https://cdn.brighttalk.com/ams/california/images/communication/652814/image_1059819.png?width=640&amp;amp;height=360"&gt;
   &lt;/div&gt;&lt;/a&gt;
  &lt;time class="btt-video-duration" datetime="PT4M48S"&gt;4:48&lt;/time&gt;
 &lt;/div&gt;
 &lt;div class="btt-modal"&gt;
  &lt;div class="btt-modal-content"&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/section&gt;                 
&lt;section class="section main-article-chapter" data-menu-title="Using $PSDefaultParameterValues for user-defined defaults"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Using $PSDefaultParameterValues for user-defined defaults&lt;/h2&gt;
 &lt;p&gt;Default parameter values can also be defined not only by the author of the function but also by the user. PowerShell has a built-in &lt;a target="_blank" href="https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_parameters_default_values?view=powershell-7.5" rel="noopener"&gt;variable&lt;/a&gt; called $PSDefaultParameterValues that lets users specify default values for parameters across cmdlets, functions and scripts.&lt;/p&gt;
 &lt;p&gt;The $PSDefaultParameterValues variable is &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/These-PowerShell-script-examples-help-tidy-up-code"&gt;a hashtable&lt;/a&gt; with extra validation. The key must follow the CommandName:ParameterName format. The value assigned to the key will be the default value for that parameter. For example, if you use the Test-DefaultValues function with a new parameter, then you can set the default value for that function with the same syntax used to edit hashtables:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;$PSDefaultParameterValues['Test-DefaultValues:WriteWelcomeMessage'] = $false&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;To test the function to see how PowerShell handles default values, set a default value for a switch parameter:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Function Test-DefaultValues {
&amp;nbsp;&amp;nbsp;&amp;nbsp; [CmdletBinding()]
&amp;nbsp;&amp;nbsp;&amp;nbsp; param (
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [switch]$WriteWelcomeMessage = $true
&amp;nbsp;&amp;nbsp;&amp;nbsp; )
&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($WriteWelcomeMessage) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Welcome!"
&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "No welcome message."
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
}&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;When executed without setting the $PSDefaultParameterValues variable, the output is &lt;b&gt;Welcome!&lt;/b&gt;&lt;/p&gt;
 &lt;p&gt;If you set the $PSDefaultParameterValues variable, the output is &lt;b&gt;No welcome message.&lt;/b&gt;&lt;/p&gt;
 &lt;p&gt;This shows user-defined default values via the $PSDefaultParameterValues variable have higher priority over defaults defined in the function.&lt;/p&gt;
 &lt;p&gt;You can define parameter values more broadly using the asterisk wildcard in $PSDefaultParameterValues to apply default values to multiple commands that match a pattern. For example, to automatically pass the Verbose switch to all cmdlets that start with Get-, use the following: &amp;nbsp;&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;$PSDefaultParameterValues['Get-*:Verbose'] = $true&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;The result ensures any Get- command will run in verbose mode by default.&lt;/p&gt;
 &lt;p&gt;It's also possible to scope parameters to specific modules, assuming the module uses a standard naming convention. For example, to specify a set of properties to all Get-Mg* &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/Whats-new-in-Microsoft-Graph-PowerShell-v2"&gt;commands in the Microsoft.Graph module,&lt;/a&gt; you can use:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;$PSDefaultParameterValues['Get-Mg*:Properties'] = @(
&amp;nbsp;&amp;nbsp;&amp;nbsp; 'displayName',
&amp;nbsp;&amp;nbsp;&amp;nbsp; 'id',
&amp;nbsp;&amp;nbsp;&amp;nbsp; 'userPrincipalName',
&amp;nbsp;&amp;nbsp;&amp;nbsp; 'mail',
&amp;nbsp;&amp;nbsp;&amp;nbsp; 'accountEnabled'
)&lt;/code&gt;&lt;/pre&gt;
 &lt;h3&gt;Mandatory vs. optional vs. conditional parameters&lt;/h3&gt;
 &lt;p&gt;When writing an advanced function in PowerShell, parameters are optional by default. You can make a parameter mandatory by adding the Mandatory attribute. PowerShell will prompt the user if a mandatory parameter isn't provided.&lt;/p&gt;
 &lt;p&gt;When &lt;a target="_blank" href="https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_parameter_sets?view=powershell-7.5" rel="noopener"&gt;using&lt;/a&gt; parameter sets, parameters can be conditional. It's important to understand how default values operate with the optional, mandatory and conditional types.&lt;/p&gt;
 &lt;p&gt;In the previous examples, all the parameters in the Test-DefaultValues function were optional because they had no Mandatory attribute. Even though the parameters were essential to the function's operation, default values allowed the function to run without user input. This is similar to how the Path parameter in Get-ChildItem or the Destination parameter in Copy-Item works.&lt;/p&gt;
 &lt;p&gt;If you mark a parameter as Mandatory, then you can't specify a default value. For example, if you test this function, then you'll still get a prompt to supply a value for $String even though it has a default value because the Mandatory attribute overrides default value behavior:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Function Test-DefaultValues {
&amp;nbsp;&amp;nbsp;&amp;nbsp; [CmdletBinding()]
&amp;nbsp;&amp;nbsp;&amp;nbsp; param (
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Parameter(Mandatory)]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [string]$String = "Default String"
&amp;nbsp;&amp;nbsp;&amp;nbsp; )
&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host $String
}&lt;/code&gt;&lt;/pre&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/ahowell_pwshdefault_1-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/ahowell_pwshdefault_1-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/ahowell_pwshdefault_1-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/ahowell_pwshdefault_1-f.jpg 1280w" alt="A command window shows the results of PowerShell script." height="140" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;If a parameter is marked as mandatory, it cannot be assigned a default value. The user must provide an input if the function is called.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;p&gt;If you develop the function in &lt;a href="https://www.techtarget.com/searchwindowsserver/tutorial/How-to-use-the-PowerShell-extension-for-Visual-Studio-Code"&gt;Visual Studio Code with the PowerShell extension&lt;/a&gt;, then the PSScriptAnalyzer will underline $String as a warning because assigning a default value to a Mandatary parameter goes against best practices&lt;/p&gt;
 &lt;p&gt;Default values work the same way within parameter sets as they do outside of them. If an optional parameter inside of the parameter set has a default value, then that value will be used when the function is called.&lt;/p&gt;
 &lt;p&gt;If a Mandatory parameter inside of the parameter set has a default value, then PowerShell will ignore it and prompt the user for input. This can cause confusion, especially when PowerShell tries to infer which parameter set to use.&lt;/p&gt;
 &lt;p&gt;Consider the following example:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Function Test-DefaultValues {
&amp;nbsp;&amp;nbsp;&amp;nbsp; [CmdletBinding()]
&amp;nbsp;&amp;nbsp;&amp;nbsp; param (
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Parameter(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ParameterSetName = "Default"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [string]$String,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Parameter(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ParameterSetName = "Custom"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [string]$CustomString = "Custom String Value"
&amp;nbsp;&amp;nbsp;&amp;nbsp; )
&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($PSCmdlet.ParameterSetName -eq "Default") {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $String = "Default String Value"
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; else {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $String = $CustomString
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host $String
}&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;It might appear PowerShell would choose the Custom parameter set because $CustomString has a default value, but PowerShell will output an error message. PowerShell can't determine which parameter set to use when no arguments are passed and a Mandatory parameter exists without a clear default set&lt;/p&gt;
 &lt;p&gt;To resolve this, declare a default parameter set inside the CmdletBinding block:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Function Test-DefaultValues {
&amp;nbsp;&amp;nbsp;&amp;nbsp; [CmdletBinding(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DefaultParameterSetName = "Custom"
&amp;nbsp;&amp;nbsp;&amp;nbsp; )]&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;With that change, PowerShell will default to the Custom parameter set.&lt;/p&gt;
 &lt;h3&gt;Using default values makes parameters more useful&amp;nbsp;&lt;/h3&gt;
 &lt;p&gt;To use PowerShell to generate passwords, then you can write a simple function to make a moderately complex 12-character password:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Function New-Password {
&amp;nbsp;&amp;nbsp;&amp;nbsp; [char[]]$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&amp;amp;*()'
&amp;nbsp;&amp;nbsp;&amp;nbsp; (1..12 | ForEach-Object {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $chars | Get-Random -Count 1
&amp;nbsp;&amp;nbsp;&amp;nbsp; }) -join ''
}&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;Running the function will produce a reasonably secure password, such as &lt;b&gt;6Qh%2MVDkUP6&lt;/b&gt;.&lt;/p&gt;
 &lt;p&gt;However, this is a single-purpose function with no flexibility. To improve it, add a Length parameter with a sensible default value:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Function New-Password {
&amp;nbsp;&amp;nbsp;&amp;nbsp; param (
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [int]$Length = 12
&amp;nbsp;&amp;nbsp;&amp;nbsp; )
&amp;nbsp;&amp;nbsp;&amp;nbsp; [char[]]$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&amp;amp;*()'
&amp;nbsp;&amp;nbsp;&amp;nbsp; (1..$Length | ForEach-Object {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $chars | Get-Random -Count 1
&amp;nbsp;&amp;nbsp;&amp;nbsp; }) -join ''
}&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;Now, you can customize the password length without compromising the sensible default value:&lt;br&gt;&lt;b&gt;New-Password -Length 30&lt;/b&gt;&lt;/p&gt;
 &lt;p&gt;This command will output a password, such as &lt;b&gt;apIA!vcp0d0sQ%gIl5IrMhM2S1YG1).&lt;/b&gt;&lt;/p&gt;
 &lt;p&gt;To make the password generation function more versatile, you can add support for additional scenarios, such as making a simple password:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Function New-Password {
&amp;nbsp;&amp;nbsp;&amp;nbsp; [CmdletBinding()]
&amp;nbsp;&amp;nbsp;&amp;nbsp; param (
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [int]$Length = 12,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [switch]$Simple
&amp;nbsp;&amp;nbsp;&amp;nbsp; )
&amp;nbsp;&amp;nbsp;&amp;nbsp; [char[]]$simpleChars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
&amp;nbsp;&amp;nbsp;&amp;nbsp; [char[]]$complexChars = '!@#$%^&amp;amp;*()'
&amp;nbsp;&amp;nbsp;&amp;nbsp; $chars = if ($Simple) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $simpleChars
&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $simpleChars + $complexChars
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; (1..$Length | ForEach-Object {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $chars | Get-Random -Count 1
&amp;nbsp;&amp;nbsp;&amp;nbsp; }) -join ''
}&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;Then run the command:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;New-Password -Length 20 -Simple&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;This will output a simple password of 20 characters, such as &lt;b&gt;zsB1AmdOmTwk0LT3ysgx.&lt;/b&gt;&lt;/p&gt;
 &lt;p&gt;Add a parameter set to let the user input a custom set of characters:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Function New-Password {
&amp;nbsp;&amp;nbsp;&amp;nbsp; [CmdletBinding(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DefaultParameterSetName = 'default'
&amp;nbsp;&amp;nbsp;&amp;nbsp; )]
&amp;nbsp;&amp;nbsp;&amp;nbsp; param (
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Parameter(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ParameterSetName = 'default'
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Parameter(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ParameterSetName = 'customChars'
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [int]$Length = 12,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Parameter(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ParameterSetName = 'default'
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [switch]$Simple,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Parameter(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mandatory,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ParameterSetName = 'customChars'
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [char[]]$CustomChars
&amp;nbsp;&amp;nbsp;&amp;nbsp; )
&amp;nbsp;&amp;nbsp;&amp;nbsp; [char[]]$simpleChars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
&amp;nbsp;&amp;nbsp;&amp;nbsp; [char[]]$complexChars = '!@#$%^&amp;amp;*()'
&amp;nbsp;&amp;nbsp;&amp;nbsp; $chars = if ($PSCmdlet.ParameterSetName -eq 'customChars') {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $CustomChars
&amp;nbsp;&amp;nbsp;&amp;nbsp; } elseif ($Simple) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $simpleChars
&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $simpleChars + $complexChars
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; (1..$Length | ForEach-Object {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $chars | Get-Random -Count 1
&amp;nbsp;&amp;nbsp;&amp;nbsp; }) -join ''
}&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;Run the command:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;New-Password -Length 25 -CustomChars 'abc123!@#'&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;PowerShell will output a 25-character password using only the specified characters, such as &lt;b&gt;bc1ca3@cc323acb2b22bc!ac3&lt;/b&gt;.&lt;/p&gt;
 &lt;p&gt;All these additions don't take away from our original goal to run New-Password without parameters to generate a reasonably secure, 12-character password.&lt;/p&gt;
&lt;/section&gt;                                                 
&lt;section class="section main-article-chapter" data-menu-title="Default value helps handle remote and local connections"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Default value helps handle remote and local connections&lt;/h2&gt;
 &lt;p&gt;Another practical PowerShell technique is to write a function that works on local and remote computers. To capture the machine name, write a function that uses a ComputerName parameter and assign it a default value that corresponds to the local machine.&lt;/p&gt;
 &lt;p&gt;In this example, the function &lt;a href="https://searchwindowsserver.techtarget.com/tip/Filter-and-query-Windows-event-logs-with-PowerShell"&gt;searches through the event logs&lt;/a&gt; of the local machine and returns all events that are failed login attempts (event ID 4648).&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Function Get-ExplicitLogins {
&amp;nbsp;&amp;nbsp;&amp;nbsp; Get-WinEvent -FilterHashtable @{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LogName = 'Security'
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Id = 4648
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
}&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;To make the function more useful, add a ComputerName parameter and set its default value to the local computer name.&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Function Get-ExplicitLogins {
&amp;nbsp;&amp;nbsp;&amp;nbsp; param (
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [string]$ComputerName = $env:COMPUTERNAME
&amp;nbsp;&amp;nbsp;&amp;nbsp; )
&amp;nbsp;&amp;nbsp;&amp;nbsp; Get-WinEvent -ComputerName $ComputerName -FilterHashtable @{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LogName = 'Security'
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Id = 4648
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
}&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;You can call the&lt;b&gt; &lt;/b&gt;Get-ExplicitLogins function without any parameters and to query the local computer.&lt;/p&gt;
 &lt;p&gt;To &lt;a href="https://www.techtarget.com/searchwindowsserver/tutorial/PowerShell-7-remoting-expands-management-horizons"&gt;specify a remote computer&lt;/a&gt;, pass the function to a computer name:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Get-ExplicitLogins -ComputerName 'Test-PC01'&lt;/code&gt;&lt;/pre&gt;
 &lt;h3&gt;Smart defaults for complex functions&lt;/h3&gt;
 &lt;p&gt;"Smart defaults" is a common concept in software development that refers to building functions that are useful even when no parameters are given. It's helpful to consider them when writing PowerShell functions that might be used by other people, especially someone who is less familiar with PowerShell.&lt;/p&gt;
 &lt;p&gt;An excellent example of this concept is the Out-File cmdlet. &lt;a href="https://www.techtarget.com/searchwindowsserver/feature/Editing-content-with-Windows-PowerShell"&gt;This cmdlet lets you save output to a file&lt;/a&gt;. One of its parameters is Encoding, which controls text formatting in the file. If PowerShell required the user to always specify the encoding, that would be a frustrating experience. Instead, PowerShell uses default encoding automatically when one isn't specified.&lt;/p&gt;
 &lt;h3&gt;Common mistakes when working with default values&lt;/h3&gt;
 &lt;p&gt;As with all scripting in PowerShell, it's possible to make mistakes while using default values. Here are some common pitfalls and how to avoid them:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;&lt;b&gt;Overly broad definitions in &lt;/b&gt;&lt;b&gt;$PSDefaultParameterValues&lt;/b&gt;. It is quite common to set default values using the $PSDefaultParameterValues variable in a PowerShell profile so they load every time you open PowerShell. If you happen to set a broad default value, such as setting the Property parameter on all Get-Mg* cmdlets, then you might run into some unexpected behavior and forget that a default value had been set.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Performance loss from complex default values&lt;/b&gt;. Avoid elaborate scripts to generate default values, particularly when they involve external systems. For example, you could write a function that &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/How-to-fix-Active-Directory-account-lockouts-with-PowerShell"&gt;interacts with AD&lt;/a&gt; and each default value requires a separate call to AD to populate. This can significantly reduce performance and should be avoided except where needed.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Hardcoding credentials&lt;/b&gt;. It's always a pain to type in credentials, especially on the days that require remoting into lots of different servers. One workaround is to set a default value for the Credential parameter in New-PSSession. If you choose to do that, use a secure method to retrieve your password rather than hardcoding it. The same goes for setting any authentication parameters for any other modules.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Unintentionally superseding important settings&lt;/b&gt;. Be sure to fully understand any default values that you choose to use, especially as a user of a cmdlet or function. Some cmdlets were designed to run a certain way with no provided value; overriding that can break expected behavior.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Introducing unnecessary complexity&lt;/b&gt;. The example of the New-Password function shows how trying to support multiple scenarios makes it harder to maintain a function. Consider breaking down a complex function into multiple simple ones, such as New-SimplePassword and New-ComplexPassword.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;&lt;i&gt;Anthony Howell is an IT strategist with extensive experience in infrastructure and automation technologies. His expertise includes PowerShell, DevOps, cloud computing, and working in both Windows and Linux environments.&lt;/i&gt;&lt;/p&gt;
&lt;/section&gt;</body>
            <description>Learn how to build PowerShell functions that work in multiple scenarios and stay easy to manage, even as your scripts grow more complex.</description>
            <image>https://cdn.ttgtmedia.com/rms/onlineimages/toolGearArrow_g103332398.jpg</image>
            <link>https://www.techtarget.com/searchwindowsserver/tutorial/Try-default-values-in-PowerShell-parameters-for-flexibility</link>
            <pubDate>Thu, 09 Oct 2025 00:00:00 GMT</pubDate>
            <title>See PowerShell parameter default values in action</title>
        </item>
        <item>
            <body>&lt;p&gt;Conditional access policies have become a cornerstone to secure organizational resources within Microsoft Entra and have formed a crucial part of Microsoft's zero-trust security model.&lt;/p&gt; 
&lt;p&gt;These policies act as gatekeepers, ensuring only authorized users can access sensitive data and applications under the right conditions. However, &lt;a href="https://www.techtarget.com/searchwindowsserver/tutorial/Build-your-knowledge-of-Azure-AD-conditional-access-policies"&gt;managing these policies&lt;/a&gt; can become challenging as organizations implement increasingly complex security measures. Administrators often face the daunting task of predicting how multiple policies interact, which could lead to unintended access blocks or security gaps.&lt;/p&gt; 
&lt;p&gt;The What If tool in the Microsoft Entra admin center simulates policy scenarios and previews how policies will behave. This discovery process helps admins adjust configurations and prevent conflicts between policies or overly restrictive access controls.&lt;/p&gt; 
&lt;section class="section main-article-chapter" data-menu-title="Overview of conditional access policies"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Overview of conditional access policies&lt;/h2&gt;
 &lt;p&gt;Microsoft designed its zero-trust security model to protect customer resources in an increasingly complex threat landscape. Unlike traditional security models that rely on perimeter defenses, zero-trust assumes that every access request, whether from inside or outside the network, is a potential threat. This model requires continuous verification of user identity, device health and other risk factors before granting access to resources.&lt;/p&gt;
 &lt;p&gt;Microsoft has adopted the zero-trust approach to provide robust security for its cloud services, including Microsoft Entra, the umbrella term for the company's cloud-based identity and access management offering. The What If tool is part of Microsoft Entra ID -- formerly Azure Active Directory -- which manages identity and access through conditional access policies.&lt;/p&gt;
 &lt;p&gt;By implementing a &lt;a href="https://www.techtarget.com/searchsecurity/definition/zero-trust-model-zero-trust-network"&gt;zero-trust model&lt;/a&gt;, organizations can ensure that only authenticated and authorized users can access their resources, regardless of location or device. This approach is crucial in today's work environment, where remote access and mobile devices have become the norm.&lt;/p&gt;
&lt;/section&gt;    
&lt;section class="section main-article-chapter" data-menu-title="Role of conditional access policies"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Role of conditional access policies&lt;/h2&gt;
 &lt;p&gt;Conditional access policies are an essential part of Microsoft's zero-trust strategy. They provide access controls to enforce the company's "verify explicitly" principle. Administrators use the policies to set specific conditions that users must meet to access resources.&lt;/p&gt;
 &lt;p&gt;By combining assignments and access controls, admins can create a layered security model that adapts to the context of each access request. This approach ensures the system grants access based not only on the user's identity but also on their location, their device and the risk level associated with the sign-in attempt.&lt;/p&gt;
 &lt;p&gt;For instance, an organization can establish a policy mandating &lt;a href="https://www.techtarget.com/searchsecurity/tip/Multifactor-authentication-Examples-and-strategic-use-cases"&gt;multifactor authentication (MFA) for users&lt;/a&gt; accessing sensitive data outside the corporate network. Another policy might restrict access from countries where the organization doesn't have operations. Admins can customize the adaptable policies to meet an organization's security needs, providing precise control over resource access.&lt;/p&gt;
&lt;/section&gt;    
&lt;section class="section main-article-chapter" data-menu-title="Types of assignments and access controls in policies"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Types of assignments and access controls in policies&lt;/h2&gt;
 &lt;p&gt;There are two main components to creating or editing a policy in the Microsoft Entra admin center: assignments -- formerly called conditions -- and access controls.&lt;/p&gt;
 &lt;p&gt;Assignments define the conditions under which a conditional access policy applies. These include:&lt;/p&gt;
 &lt;ul type="disc" class="default-list"&gt; 
  &lt;li&gt;&lt;b&gt;Users or groups:&lt;/b&gt; Admins can target policies at specific users, groups or organizational roles.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Locations:&lt;/b&gt; Configure policies to apply based on geographic location or IP range.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Device platforms and state:&lt;/b&gt; Control access based on whether the device is hybrid-joined, compliant or meets specific security requirements.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Cloud apps or actions&lt;/b&gt; Apply policies to specific cloud apps or user actions within those apps.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Risk levels:&lt;/b&gt; &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/What-should-admins-know-about-Microsoft-Entra-features"&gt;Integrate with Microsoft Entra ID Protection to enforce policies&lt;/a&gt; based on user or sign-in risk levels. Using Microsoft Purview adaptive protection also checks for insider risk.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;Access controls determine the actions taken when the policy applies:&lt;/p&gt;
 &lt;ul type="disc" class="default-list"&gt; 
  &lt;li&gt;&lt;b&gt;Grant controls:&lt;/b&gt; Define user requirements for access, such as requiring MFA, a compliant device or a &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/Understand-the-basics-of-Microsoft-hybrid-identity"&gt;Microsoft Entra hybrid-joined device&lt;/a&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Session controls:&lt;/b&gt; Managing user sessions to protect sensitive data by applying app-enforced restrictions, enabling session monitoring with Microsoft Defender for Cloud Apps, setting sign-in frequency and configuring persistent browser session behavior.&lt;/li&gt; 
 &lt;/ul&gt;
&lt;/section&gt;      
&lt;section class="section main-article-chapter" data-menu-title="Challenges in working with conditional access policies"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Challenges in working with conditional access policies&lt;/h2&gt;
 &lt;p&gt;One of the main hurdles administrators face when working with conditional access policies is the inherent complexity and the potential for unintended interactions between policies. As organizations grow and their security needs evolve, they often end up with numerous policies to address specific scenarios.&lt;/p&gt;
 &lt;p&gt;Although each policy might work well in isolation, the interaction between multiple policies can create unexpected results. For example, a policy requiring &lt;a href="https://www.techtarget.com/searchwindowsserver/tutorial/How-to-track-Office-365-guest-users"&gt;MFA for external users&lt;/a&gt; might conflict with another policy that blocks access from specific geographic locations. When these policies overlap, predicting the exact outcome of a user's access attempt can be difficult.&lt;/p&gt;
 &lt;p&gt;This complexity increases with the number of assignments and access controls applied across different policies. Assignments combined with access controls and understanding how these interact during an access attempt is challenging. It often leads to policies becoming too restrictive and inadvertently blocking legitimate access or too lenient and exposing resources to security risks.&lt;/p&gt;
&lt;/section&gt;    
&lt;section class="section main-article-chapter" data-menu-title="Difficulty in foreseeing outcomes"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Difficulty in foreseeing outcomes&lt;/h2&gt;
 &lt;p&gt;Due to the layered nature of conditional access policies, predicting how they will affect user access can be difficult. Even experienced administrators can find it challenging to anticipate the results of policy interactions, especially when dealing with complex configurations.&lt;/p&gt;
 &lt;p&gt;Factors such as these compound this difficulty:&lt;/p&gt;
 &lt;ul type="disc" class="default-list"&gt; 
  &lt;li&gt;&lt;b&gt;Multiple assignments:&lt;/b&gt; Policies often contain several assignments, such as requiring a compliant device and the user to be in a specific group, which makes it difficult to predict combined behavior.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Order of enforcement:&lt;/b&gt; Unlike firewall rules with a clear execution order, conditional access policies undergo a joint evaluation in which all policies must be satisfied and can sometimes lead to unpredictable results.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Dynamic signals:&lt;/b&gt; Conditional access policies can include dynamic elements, such as user risk levels and device compliance status, which change over time. It adds another layer of complexity to predicting a policy's behavior in any given situation.&lt;/li&gt; 
 &lt;/ul&gt;
&lt;/section&gt;    
&lt;section class="section main-article-chapter" data-menu-title="Introducing the What If tool"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Introducing the What If tool&lt;/h2&gt;
 &lt;p&gt;Testing and troubleshooting conditional access policies is challenging because live testing carries risks, such as locking out admins or users. Traditional methods are time-consuming and prone to errors and lack immediate feedback after policy changes, making it difficult to prevent security incidents and unintended disruptions.&lt;/p&gt;
 &lt;p&gt;Admins require improved tools that offer instant feedback and replicate outcomes to find conflicts before they affect users. The What If tool assists this work by simulating sign-in scenarios for a user or &lt;a href="https://www.techtarget.com/searchcloudcomputing/tip/Why-and-how-to-create-Azure-service-principals"&gt;service principal&lt;/a&gt; to troubleshoot conditional access policies. This simulation capability is crucial for understanding the potential issues of policies before implementing them, reducing the risk of unintended access issues or security gaps.&lt;/p&gt;
 &lt;p&gt;The primary purpose of the What If tool is to:&lt;/p&gt;
 &lt;ul type="disc" class="default-list"&gt; 
  &lt;li&gt;&lt;b&gt;Predict policy outcomes:&lt;/b&gt; By simulating different sign-in scenarios, administrators can see which conditional access policies apply and the resulting access decisions.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Troubleshoot issues:&lt;/b&gt; When users experience unexpected access issues, the What If tool can help pinpoint the policy or combination of policies causing the problem.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Refine policies:&lt;/b&gt; The tool shows how policies apply and why to help admins readjust configurations.&lt;/li&gt; 
 &lt;/ul&gt;
&lt;/section&gt;     
&lt;section class="section main-article-chapter" data-menu-title="Benefits of using the What If tool"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Benefits of using the What If tool&lt;/h2&gt;
 &lt;p&gt;The What If tool offers several advantages for managing and optimizing conditional access policies:&lt;/p&gt;
 &lt;ul type="disc" class="default-list"&gt; 
  &lt;li&gt;&lt;b&gt;Risk-free testing:&lt;/b&gt; Administrators can simulate different scenarios and see the potential outcomes without the risk of disrupting user access or exposing resources.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Immediate Feedback:&lt;/b&gt; The tool provides instant feedback which policies apply to identify and address issues quickly.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Proactive troubleshooting:&lt;/b&gt; The What If tool helps resolve potential conflicts before enabling policies to maintain a seamless user access experience.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Detailed analysis:&lt;/b&gt; Get a report listing applicable policies and the resulting access decision for refining policy configurations.&lt;/li&gt; 
 &lt;/ul&gt;
&lt;/section&gt;   
&lt;section class="section main-article-chapter" data-menu-title="How the What If tool works"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;How the What If tool works&lt;/h2&gt;
 &lt;p&gt;The What If tool simulates an access request based on specific parameters set by the administrator. Here's how it functions:&lt;/p&gt;
 &lt;ol type="1" start="1" class="default-list"&gt; 
  &lt;li&gt;&lt;b&gt;User selection:&lt;/b&gt; The administrator selects a user or group to run the simulation, such as a user with access issues or a group to test broader policy implications.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Scenario setup:&lt;/b&gt; The admin specifies the sign-in conditions to simulate, such as the target resource, device platform, identity and location. This enables testing a wide range of scenarios, from standard access attempts to more complex situations involving multiple scenarios.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Policy evaluation:&lt;/b&gt; The What If tool evaluates enabled or report-only conditional access policies against the specified scenario. It determines which policies would apply and what the resulting access decision would be, including grant, block or require MFA.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Report generation:&lt;/b&gt; The tool generates a report showing the simulation's outcome, including the policies that apply and required controls, policies that don't apply and why and any app filters with custom security attributes.&lt;/li&gt; 
 &lt;/ol&gt;
&lt;/section&gt;   
&lt;section class="section main-article-chapter" data-menu-title="How to use the What If tool for troubleshooting policies"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;How to use the What If tool for troubleshooting policies&lt;/h2&gt;
 &lt;p&gt;The What If tool simulation process is straightforward and provides valuable insights into how policies will behave in various scenarios.&lt;/p&gt;
 &lt;h3&gt;Accessing the What If tool&lt;/h3&gt;
 &lt;ol type="1" start="1" class="default-list"&gt; 
  &lt;li&gt;Sign in to the Microsoft Entra admin center with admin privileges.&lt;/li&gt; 
  &lt;li&gt;Go to Entra ID&amp;gt;Conditional Access&amp;gt;Policies&lt;b&gt; &lt;/b&gt;to manage all conditional access policies.&lt;/li&gt; 
  &lt;li&gt;Click What If and set up the simulation, adding the conditions to check, such as client app, device platform and identity.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/lcleary_whatif_1-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/lcleary_whatif_1-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/lcleary_whatif_1-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/lcleary_whatif_1-f.jpg 1280w" alt="An image showing a highlighted area around the words " height="37" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Open the What If tool from the conditional access section in the Microsoft Entra admin center. 
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;h3&gt;Setting up a simulation&lt;/h3&gt;
 &lt;ol type="1" start="1" class="default-list"&gt; 
  &lt;li&gt;Choose the identity to test. Click &lt;b&gt;"No user or service principal selected&lt;/b&gt;" and use the search box to find the user or service principal.&lt;/li&gt; 
  &lt;li&gt;Specify the conditions to test. Required conditions include identity, target resource, device platform and client app. Optional conditions are sign-in risk, location, user action or authentication context, device state and authentication strength. &amp;nbsp;&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;h3&gt;Running the simulation&lt;/h3&gt;
 &lt;ol type="1" start="1" class="default-list"&gt; 
  &lt;li&gt;After setting up the desired scenario, click &lt;b&gt;What If&lt;/b&gt; to run the simulation. The tool checks the selected user or service principal against enabled or report-only conditional access policies.&lt;/li&gt; 
  &lt;li&gt;The What If tool provides an evaluation report once the simulation completes, which includes:&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;ol type="1" start="2" class="default-list"&gt; 
  &lt;ul type="disc" class="default-list"&gt; 
   &lt;li&gt;&lt;b&gt;Applicable policies&lt;/b&gt;: A list of all the conditional access policies that apply to the specified scenario.&lt;/li&gt; 
  &lt;/ul&gt; 
 &lt;/ol&gt;
 &lt;ol type="1" start="2" class="default-list"&gt; 
  &lt;ul type="disc" class="default-list"&gt; 
   &lt;li&gt;&lt;b&gt;Policy outcome&lt;/b&gt;: The outcome for each policy, such as grant access, block access or require MFA.&lt;/li&gt; 
  &lt;/ul&gt; 
 &lt;/ol&gt;
 &lt;ol type="1" start="2" class="default-list"&gt; 
  &lt;ul type="disc" class="default-list"&gt; 
   &lt;li&gt;&lt;b&gt;Overall decision&lt;/b&gt;: Indicates the final decision for the access attempt based on the combined evaluation of all pertinent policies.&lt;/li&gt; 
  &lt;/ul&gt; 
 &lt;/ol&gt;
 &lt;h3&gt;Understanding the report&lt;/h3&gt;
 &lt;p&gt;The What If report details how conditional access policies apply in the specified scenario. Critical sections of the report include:&lt;/p&gt;
 &lt;ul type="disc" class="default-list"&gt; 
  &lt;li&gt;&lt;b&gt;Policy evaluation&lt;/b&gt;: Lists each policy evaluated, showing whether it did or didn't apply, and the enforced action.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Policy details&lt;/b&gt;: The report provides detailed information for each applicable policy, including the grant controls and session controls it evaluated.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;App filters&lt;/b&gt;: Shows if a policy uses custom security attributes for filtering apps.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Non-applicable policies: &lt;/b&gt;What If will list any policies in scenarios when the first condition isn't met with an explainer.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Classic policies indicator: &lt;/b&gt;Lists if legacy conditional access policies exist in the environment.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/lcleary_whatif_2-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/lcleary_whatif_2-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/lcleary_whatif_2-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/lcleary_whatif_2-f.jpg 1280w" alt="A screenshot showing the details of a conditional access policy in Microsoft Entra." height="79" width="558"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;The conditional access policy in Microsoft Entra requiring multifactor authentication for Microsoft partners and vendors shows as active and without filters.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/lcleary_whatif_3-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/lcleary_whatif_3-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/lcleary_whatif_3-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/lcleary_whatif_3-f.jpg 1280w" alt="A screenshot showing the details of two conditional access policies in Microsoft Entra ID." height="89" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Two conditional access policies in Microsoft Entra ID related to sign-in and user risk are in report-only mode with no filters applied.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;p&gt;To enhance the process, enable the &lt;b&gt;Enhanced 'What if' evaluation experience &lt;/b&gt;for further details when evaluating the policies.&lt;/p&gt;
 &lt;h3&gt;Make changes based on the What If report&lt;/h3&gt;
 &lt;ul type="disc" class="default-list"&gt; 
  &lt;li&gt;&lt;b&gt;Identify and resolve conflicts&lt;/b&gt;: Use the report to &lt;a target="_blank" href="https://learn.microsoft.com/en-us/entra/identity/conditional-access/howto-conditional-access-insights-reporting" rel="noopener"&gt;identify&lt;/a&gt; conflicting policies that might lead to unintended access blocks or overly lenient access. Adjust the assignments to ensure a clear and intended access path.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Test before implementation&lt;/b&gt;: Before changing conditional access policies, use the What If tool to simulate the new configuration, evaluating the changes' effect and verifying that they will produce the desired results.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Refine policies&lt;/b&gt;: Based on the simulation results, adjust policies to align with security objectives. For example, if a policy requiring MFA doesn't trigger as expected, change the assignments to ensure they apply to the right users and intended scenarios.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;h3&gt;Tips for effective use&lt;/h3&gt;
 &lt;ul type="disc" class="default-list"&gt; 
  &lt;li&gt;&lt;b&gt;Regular testing&lt;/b&gt;: Use the What If tool often to validate policies, especially after creating new ones or modifying existing ones to find issues before they affect users.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Test a variety of scenarios&lt;/b&gt;: To make policies resilient and comprehensive, don't just test typical access scenarios. Simulate a range of conditions, including high-risk situations and edge cases.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Document findings&lt;/b&gt;: Record the simulations and findings for future troubleshooting and to explain policy decisions to stakeholders.&lt;/li&gt; 
 &lt;/ul&gt;
&lt;/section&gt;                     
&lt;section class="section main-article-chapter" data-menu-title="Remove doubt with the What If tool"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Remove doubt with the What If tool&lt;/h2&gt;
 &lt;p&gt;In Microsoft's zero-trust security model, conditional access policies are key to securing access to organizational resources. The What If tool provides a safe and efficient way to check policies to help admins identify and resolve conflicts and optimize access controls.&lt;/p&gt;
 &lt;p&gt;Incorporating the What If tool into a regular policy management routine helps prevent misconfigurations, enhances the organization's security and ensures policies work as expected. By using this tool, admins can confidently navigate the complexities of conditional access policies, ensuring they provide the intended level of protection without compromising user productivity.&lt;/p&gt;
 &lt;p&gt;&lt;i&gt;Liam Cleary is the founder and owner of SharePlicity, a technology consulting company that helps organizations with internal and external collaboration, document and records management, business process automation, automation tool deployment, and security controls and protection. Cleary's areas of expertise include security on the Microsoft 365 and Azure platforms, PowerShell automation, and IT administration. Cleary is a Microsoft MVP and a Microsoft Certified Trainer.&lt;/i&gt;&lt;/p&gt;
 &lt;p&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;/section&gt;</body>
            <description>Admins should employ regular use of this simulation tool to ensure conditional access policies have no conflicts and avoid access problems that can slow down users.</description>
            <image>https://cdn.ttgtmedia.com/rms/onlineimages/location_g1202864734.jpg</image>
            <link>https://www.techtarget.com/searchwindowsserver/tip/Test-conditional-access-with-Microsoft-Entra-ID-What-If-tool</link>
            <pubDate>Wed, 08 Oct 2025 10:00:00 GMT</pubDate>
            <title>Test conditional access with Microsoft Entra ID What If tool</title>
        </item>
        <item>
            <body>&lt;p&gt;Managing PowerShell resources is a critical task for administrators, who must ensure that scripts and modules are up to date and correctly configured across environments.&lt;/p&gt; 
&lt;p&gt;With the release of PSResourceGet, Microsoft has improved upon the original PowerShellGet module by producing a modernized approach to &lt;a href="https://www.techtarget.com/searchITOperations/video/Automate-PowerShell-scripts-for-self-healing-IT-infrastructure"&gt;managing PowerShell resources&lt;/a&gt;. This article looks at some of PowerShellGet's limitations, the problems solved by PSResourceGet and its key capabilities, and practical examples of how to use PSResourceGet in daily workflows.&lt;/p&gt; 
&lt;section class="section main-article-chapter" data-menu-title="Problems that PSResourceGet Solves"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Problems that PSResourceGet Solves&lt;/h2&gt;
 &lt;p&gt;As useful as PowerShellGet has been, PSResourceGet was developed to address several key issues, including:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;&lt;b&gt;Complexity and performance issues&lt;/b&gt;. Microsoft designed PowerShellGet with a provider model that relied on the PackageManagement module, which led to bottlenecks and added complexity in managing dependencies.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Usability and extensibility.&lt;/b&gt; Because it was based on an older codebase, PowerShellGet was neither user-friendly nor easy to extend, making bug fixes and implementing new features difficult.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Compatibility concerns&lt;/b&gt;. Because it was written in PowerShell, keeping PowerShellGet &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/Why-you-should-consider-an-upgrade-from-PowerShell-51-to-7"&gt;compatible with all supported versions of PowerShell&lt;/a&gt; was a challenge.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;By rewriting PowerShellGet's replacement in C# and removing its dependency on PackageManagement, PSResourceGet offers a more efficient and maintainable approach.&lt;/p&gt;
&lt;/section&gt;    
&lt;section class="section main-article-chapter" data-menu-title="PSResourceGet capabilities"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;PSResourceGet capabilities&lt;/h2&gt;
 &lt;p&gt;As the new package manager for PowerShell, PSResourceGet is a comprehensive tool to manage all types of PowerShell artifacts available from repositories, including modules, scripts, &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/See-whats-new-in-Desired-State-Configuration-v3"&gt;Desired State Configuration resources&lt;/a&gt; and role capabilities.&lt;/p&gt;
 &lt;p&gt;For each resource type, PSResourceGet lets administrators:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Install, update and remove resources.&lt;/li&gt; 
  &lt;li&gt;Manage dependencies automatically.&lt;/li&gt; 
  &lt;li&gt;Manage repositories that provide resources.&lt;/li&gt; 
  &lt;li&gt;Search repositories for resources.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;All capabilities are exposed in the module through cmdlets.&lt;/p&gt;
&lt;/section&gt;     
&lt;section class="section main-article-chapter" data-menu-title="Benefits of PSResourceGet"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Benefits of PSResourceGet&lt;/h2&gt;
 &lt;p&gt;Now that we've covered the purpose of PSResourceGet and its capabilities, let's cover the advantages of using PSResourceGet over PowerShellGet.&lt;/p&gt;
 &lt;h3&gt;Improved performance&lt;/h3&gt;
 &lt;p&gt;The most significant and immediate benefit of PSResourceGet is speed. For example, the following script compares the search performance of both modules:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Measure-Command {
&amp;nbsp;&amp;nbsp;&amp;nbsp; Find-Module -Name Microsoft.PowerShell.PSResourceGet
} | Select-Object TotalSeconds
Measure-Command {
&amp;nbsp;&amp;nbsp;&amp;nbsp; Find-PSResource -Name Microsoft.PowerShell.PSResourceGet
} | Select-Object TotalSeconds&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;After running these commands a few times, PSResourceGet typically executes twice as fast as PowerShellGet. Results can vary depending on the testing environment, including the host machine and internet connection.&lt;/p&gt;
 &lt;h3&gt;Compatibility&lt;/h3&gt;
 &lt;p&gt;To maintain compatibility with previous versions of PowerShellGet, Microsoft released a &lt;a href="https://github.com/PowerShell/PowerShellGet/tree/master"&gt;compatibility module&lt;/a&gt; designed to accept commands in the same syntax as PowerShellGet and call the equivalent PSResourceGet commands. This approach lets administrators continue running scripts that use PowerShellGet syntax while also benefiting from PSResourceGet enhancements.&lt;/p&gt;
 &lt;h3&gt;Maintainability and extensibility&lt;/h3&gt;
 &lt;p&gt;Although this might not be immediately noticeable for most users, one goal for PSResourceGet was to build a module that could easily implement changes based on customer feedback. From the start, the codebase was written to be clean and efficient so Microsoft could quickly address bugs and feature requests.&lt;/p&gt;
&lt;/section&gt;          
&lt;section class="section main-article-chapter" data-menu-title="Using PSResourceGet"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Using PSResourceGet&lt;/h2&gt;
 &lt;p&gt;To start using PSResourceGet, you might have to install it. For all versions of PowerShell prior to 7.4, PSResourceGet isn't included by default, so we will use PowerShellGet's Install-Module cmdlet for the installation:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Install-Module -Name Microsoft.PowerShell.PSResourceGet&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;After installation, you can verify by importing it, running a command from the module or simply listing the commands in the module:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Get-Command -Module Microsoft.PowerShell.PSResourceGet&lt;/code&gt;&lt;/pre&gt;
 &lt;h3&gt;Managing repositories&lt;/h3&gt;
 &lt;p&gt;A repository is a location to publish PowerShell resources and retrieve them. The most well-known is the PowerShell Gallery. Using PSResourceGet, you can find the currently configured repositories:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Get-PSResourceRepository&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;By default, PowerShell only includes the PowerShell Gallery. To add other repositories, such as an internal private repository hosted in GitHub Packages, use the following code:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;$splat = @{
&amp;nbsp;&amp;nbsp;&amp;nbsp; Name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 'GitHubOrg'
&amp;nbsp;&amp;nbsp;&amp;nbsp; Uri&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 'https://nuget.pkg.github.com/&amp;lt;GitHubOrg&amp;gt;/index.json'
&amp;nbsp;&amp;nbsp;&amp;nbsp; Trusted&amp;nbsp; = $true
&amp;nbsp;&amp;nbsp;&amp;nbsp; Priority = 10
}
Register-PSResourceRepository @splat&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;In this case, the script designates the repository as trusted and assigns it to a higher priority than the PowerShell Gallery.&lt;/p&gt;
 &lt;p&gt;You can verify the change by rerunning Get-PSResourceRepository.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/ahowell_psresourceget_1-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/ahowell_psresourceget_1-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/ahowell_psresourceget_1-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/ahowell_psresourceget_1-f.jpg 1280w" alt="A command window shows a PowerShell command used to list repositories registered for use with PSResourceGet." height="103" width="559"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Re-run the Get-PSResourceRepository command after registering a GitHub repository as a trusted source for PowerShell resources.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;p&gt;To see the full list of supported repository types, you can refer to &lt;a href="https://learn.microsoft.com/en-us/powershell/gallery/powershellget/supported-repositories?view=powershellget-3.x"&gt;Microsoft's documentation.&lt;/a&gt;&lt;/p&gt;
 &lt;h3&gt;Installing modules&lt;/h3&gt;
 &lt;p&gt;The most common use for PSResourceGet is to install modules. This is very similar to using Install-Module, but instead use:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Install-PSResource -Name Microsoft.Graph&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;If you want a specific version, PSResourceGet has a lot more flexibility than PowerShellGet. The Version parameter accepts any valid Nuget version &lt;a target="_blank" href="https://learn.microsoft.com/en-us/nuget/concepts/package-versioning?tabs=semver20sort#version-ranges" rel="noopener"&gt;range&lt;/a&gt;, while PowerShellGet required three version parameters. For example, to install an exact version, use the following command:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Install-PSResource -Name Microsoft.Graph -Version 2.21.0&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;To specify a version range, such as greater than 1.5 but less than 2.0, you can use:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Install-PSResource -Name Microsoft.Graph -Version '[1.5,2.0)'&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;To validate your version range, use Find-PSResource.&lt;/p&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/ahowell_psresourceget_2-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/ahowell_psresourceget_2-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/ahowell_psresourceget_2-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/ahowell_psresourceget_2-f.jpg 1280w" alt="A command window runs a PowerShell command to find a module between a specific version range.
" height="242" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;The command checks for versions of the Microsoft.Graph module that are at least version 1.5 but less than version 2.0.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;p&gt;PSResourceGet will install the latest version listed in the provided range.&lt;/p&gt;
 &lt;h3&gt;Installing modules across several servers&lt;/h3&gt;
 &lt;p&gt;To ensure the entire environment has the appropriate modules installed, you can use PSResourceGet through PowerShell remoting. For example, to manage Windows updates, you might want to install the PSWindowsUpdate module. The following script -- which requires PowerShell v7 because it uses the&lt;b&gt; &lt;/b&gt;&lt;a href="https://www.techtarget.com/searchwindowsserver/tutorial/PowerShell-ForEach-Object-cmdlet-picks-up-speed"&gt;Parallel parameter of Foreach-Object&lt;/a&gt; -- retrieves a list of servers from Active Directory and then installs the module remotely:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Get-ADComputer -Filter 'OperatingSystem -like "*Server*"' | ForEach-Object -ThrottleLimit 5 -Parallel {
&amp;nbsp;&amp;nbsp;&amp;nbsp; Invoke-Command -ComputerName $_.Name -ScriptBlock {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Install-Module -Name Microsoft.PowerShell.PSResourceGet -Confirm:$false -Force
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Install-PSResource -Name PSWindowsUpdate -Confirm:$false
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
}&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;The script will install PSResourceGet if it isn't installed with Install-Module, then it will install PSWindowsUpdate with Install-PSResource.&lt;/p&gt;
 &lt;h3&gt;Browse from the command line&lt;/h3&gt;
 &lt;p&gt;Because PSResourceGet is so much faster than PowerShellGet, browsing the PowerShell Gallery from the command line makes more sense. For example, if you know there's a &lt;a href="https://www.techtarget.com/searchwindowsserver/tutorial/Reveal-Windows-file-server-permissions-with-PowerShells-help"&gt;module to import Excel files&lt;/a&gt; but can't remember the name, you can search for it:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Find-PSResource -Name '*Excel'&lt;/code&gt;&lt;/pre&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/ahowell_psresourceget_3-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/ahowell_psresourceget_3-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/ahowell_psresourceget_3-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/ahowell_psresourceget_3-f.jpg 1280w" alt="A command window with a PowerShell command that searches for resources using a wildcard.
" height="142" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Use the Find-PSResource command to search for PowerShell resources in the registered repositories with 'Excel' at the end of the name.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;p&gt;This command returns several modules, one of which is ImportExcel. To see the full metadata for the module, query it directly:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Find-PSResource -Name 'ImportExcel' | fl *&lt;/code&gt;&lt;/pre&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/ahowell_psresourceget_4-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/ahowell_psresourceget_4-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/ahowell_psresourceget_4-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/ahowell_psresourceget_4-f.jpg 1280w" alt="A command window that shows a PowerShell command to display a module's metadata.
" height="330" width="559"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Execute a search to that displays all the metadata for the ImportExcel module.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;p&gt;The output shows important information, such as the ProjectUri property, which you can use to verify it is the proper module.&lt;/p&gt;
&lt;/section&gt;                                    
&lt;section class="section main-article-chapter" data-menu-title="PSResourceGet offers scalability and reliability"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;PSResourceGet offers scalability and reliability&lt;/h2&gt;
 &lt;p&gt;PSResourceGet offers improved package management in PowerShell, providing &lt;a href="https://www.techtarget.com/searchwindowsserver/tutorial/Try-these-PowerShell-Start-Job-examples-for-more-efficiency"&gt;better speed&lt;/a&gt; and reliability. By directly addressing user feedback and the issues with PowerShellGet, PSResourceGet presents a more streamlined and efficient approach to reduce time spent on repetitive tasks and allow more time to focus on automation and scripting.&lt;/p&gt;
 &lt;p&gt;&lt;i&gt;Anthony Howell is an IT strategist with extensive experience in infrastructure and automation technologies. His expertise includes PowerShell, DevOps, cloud computing, and working in both Windows and Linux environments.&lt;/i&gt;&lt;/p&gt;
&lt;/section&gt;</body>
            <description>The updated package manager for PowerShell improves performance, simplifies module management and streamlines repository handling to free up time for automation tasks.</description>
            <image>https://cdn.ttgtmedia.com/rms/onlineimages/keyboard_g1077903946.jpg</image>
            <link>https://www.techtarget.com/searchwindowsserver/tutorial/Use-PSResourceGet-to-manage-PowerShell-modules-and-scripts</link>
            <pubDate>Tue, 07 Oct 2025 15:42:00 GMT</pubDate>
            <title>Use PSResourceGet to manage PowerShell modules and scripts</title>
        </item>
        <item>
            <body>&lt;p&gt;Managing storage capacity is one of the most crucial parts of system administration. PowerShell offers administrators many options for investigating and configuring storage options. This article examines the most useful cmdlets for viewing storage information, creating new storage space or removing unneeded storage capacity.&lt;/p&gt; 
&lt;p&gt;Shell environments offer administrators two advantages:&lt;/p&gt; 
&lt;ol class="default-list"&gt; 
 &lt;li&gt;Command-line commands are often quicker to enter and run than browsing through multiple windows and consoles in mouse-driven environments.&lt;/li&gt; 
 &lt;li&gt;Commands can be added to scripts, enabling you to schedule automated tasks.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;You certainly have the option of running individual commands directly from the PowerShell console. However, you might find it more efficient to script your configurations as part of a larger &lt;a href="https://www.techtarget.com/searchitoperations/definition/Infrastructure-as-Code-IAC"&gt;infrastructure-as-code&lt;/a&gt; initiative. Keep this option in mind as you review the cmdlets below.&lt;/p&gt; 
&lt;section class="section main-article-chapter" data-menu-title="PowerShell syntax review"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;PowerShell syntax review&lt;/h2&gt;
 &lt;p&gt;Recall that PowerShell uses a verb-noun syntax to specify tasks. These two combined elements are called &lt;i&gt;cmdlets&lt;/i&gt; and form the basis of PowerShell administration. Various cmdlets recognize different parameters that specify objects, names or other values. PowerShell is logical, powerful and flexible, enabling plenty of administrative options for managing services, such as storage.&lt;/p&gt;
 &lt;p&gt;Consider the sample cmdlet &lt;samp&gt;Get-Disk -FriendlyName "DataDisk"&lt;/samp&gt;. Here, the verb is &lt;samp&gt;Get&lt;/samp&gt;, the noun is &lt;samp&gt;Disk&lt;/samp&gt; and the parameter is &lt;samp&gt;-FriendlyName "DataDisk"&lt;/samp&gt;.&lt;/p&gt;
&lt;/section&gt;   
&lt;section class="section main-article-chapter" data-menu-title="Gather storage information with PowerShell"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Gather storage information with PowerShell&lt;/h2&gt;
 &lt;p&gt;Your first administrative task will be displaying information about existing storage. You could examine files and directories or individual disks, partitions or volumes. Regardless, start by reviewing the &lt;a href="https://www.techtarget.com/searchstorage/feature/How-to-choose-and-configure-Windows-Server-RAID-levels"&gt;current storage configuration&lt;/a&gt;.&lt;/p&gt;
 &lt;p&gt;Displaying information with PowerShell almost always involves using the &lt;samp&gt;Get&lt;/samp&gt; verb. Attach this verb to the various storage nouns to display the relevant information.&lt;/p&gt;
 &lt;p&gt;Use the following cmdlets to display this information:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;&lt;samp&gt;Get-Disk&lt;/samp&gt; displays disk information, including disk number, friendly name, total size, health status and bus type. This cmdlet is essential for identifying the disk.&lt;/li&gt; 
  &lt;li&gt;&lt;samp&gt;Get-Partition&lt;/samp&gt; displays information about the disk's physical partitions, partition numbers and sizes. It shows greater detail at the physical level than &lt;samp&gt;Get-Volume&lt;/samp&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;samp&gt;Get-Volume&lt;/samp&gt; displays volume information, including logical volumes, drive letters, file systems and available space. It provides greater detail at the logical level than &lt;samp&gt;Get-Partition&lt;/samp&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;samp&gt;Get-PSDrive&lt;/samp&gt; displays information on drive shares mapped on the system.&lt;/li&gt; 
  &lt;li&gt;&lt;samp&gt;Get-PhysicalDisk&lt;/samp&gt; displays physical storage devices attached to the system, including hard disk and solid-state drives.&lt;/li&gt; 
  &lt;li&gt;&lt;samp&gt;Get-VirtualDisk&lt;/samp&gt; displays information about virtual disks across all storage pools, including name, size and status.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;Begin by establishing what kind of information you need. For example, if you need data on physical disk structures, focus on &lt;samp&gt;Get-Partition&lt;/samp&gt; and &lt;samp&gt;Get-Disk&lt;/samp&gt;. If you need logical volume information, use &lt;samp&gt;Get-Volume&lt;/samp&gt;.&lt;/p&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/dgarn_stcmdlet_1-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/dgarn_stcmdlet_1-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/dgarn_stcmdlet_1-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/dgarn_stcmdlet_1-f.jpg 1280w" alt="A PowerShell window showing execution of a storage-related command." height="171" width="559"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Use the Get-Disk cmdlet to gather basic but necessary disk information.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;h3&gt;Display or test for files and directories&lt;/h3&gt;
 &lt;p&gt;What if you need to gather information on the data stored on a device rather than about the device itself? Several cmdlets display directory and file information.&lt;/p&gt;
 &lt;p&gt;One of the most useful cmdlets for checking drive content is &lt;samp&gt;Test-Path&lt;/samp&gt;. This cmdlet confirms whether all parts of a given path are true, letting you know whether particular directories or files exist. This information could be &lt;a href="https://www.techtarget.com/searchitoperations/video/Create-a-PowerShell-script-for-Windows-PATH-variable-cleanup"&gt;relevant when creating scripts&lt;/a&gt; because you might want to test for data before removing a partition or back up data before changing drive configurations. &lt;samp&gt;Test-Path&lt;/samp&gt; returns &lt;samp&gt;$true&lt;/samp&gt; if the given path exists or &lt;samp&gt;$false&lt;/samp&gt; if not. Use these results to direct your script to take different actions depending on whether specific files exist.&lt;/p&gt;
 &lt;p&gt;Consider the example &lt;samp&gt;Test-Path&lt;/samp&gt; &lt;samp&gt;-Path "C:\projects\2025projects\projectfile.docx&lt;/samp&gt;. This cmdlet confirms all objects along the path, including the subdirectories and file. Use wildcards to broaden the match criteria.&lt;/p&gt;
 &lt;p&gt;The &lt;samp&gt;Get-ChildItem&lt;/samp&gt; cmdlet is a more comprehensive way to display directories and files. Without a &lt;samp&gt;-Path&lt;/samp&gt; parameter, it will show the current folder's contents. Add &lt;samp&gt;-Path C: projects&lt;/samp&gt; to show the contents of the specified folder. Add the &lt;samp&gt;-Recurse&lt;/samp&gt; option to drill down into child folders. This gives you &lt;samp&gt;Get-ChildItem -Path "C:\projects" -Recurse&lt;/samp&gt;.&lt;/p&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/dgarn_stcmdlet_2-f.jpg "&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/dgarn_stcmdlet_2-f_mobile.jpg " class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/dgarn_stcmdlet_2-f_mobile.jpg  960w,https://www.techtarget.com/rms/onlineimages/dgarn_stcmdlet_2-f.jpg  1280w" alt="A PowerShell window that shows command execution." height="194" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Use the Get-ChildItem cmdlet to list files and folders on storage devices.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;p&gt;This is a handy way of discovering what information is stored in a particular location before you destroy data with a repartition or reformat cmdlet.&lt;/p&gt;
&lt;/section&gt;              
&lt;section class="section main-article-chapter" data-menu-title="Manage new storage space"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Manage new storage space&lt;/h2&gt;
 &lt;p&gt;Your investigation of the system's storage could reveal unused and available storage space on existing disks. &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/Using-Diskpart-to-create-extend-or-delete-a-disk-partition"&gt;You can create partitions&lt;/a&gt; or volumes in this space and then format them with a file system, probably NTFS.&lt;/p&gt;
 &lt;p&gt;After you physically install the disk in the system, use the &lt;samp&gt;Get-Disk&lt;/samp&gt; cmdlet to identify the &lt;samp&gt;&amp;lt;DiskNumber&amp;gt;&lt;/samp&gt; value. This identifier lets you work with the specified disk using the other cmdlets.&lt;/p&gt;
 &lt;p&gt;Use the following steps to deploy your new storage:&lt;/p&gt;
 &lt;ol class="default-list"&gt; 
  &lt;li&gt;&lt;b&gt;Initialize the disk.&lt;/b&gt; Use &lt;samp&gt;Initialize-Disk -Number &amp;lt;DiskNumber&amp;gt; -PartitionStyle GPT&lt;/samp&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Create a new disk partition.&lt;/b&gt; Use &lt;samp&gt;New-Partition -DiskNumber &amp;lt;DiskNumber&amp;gt; -UseMaximumSize -AssignDriveLetter&lt;/samp&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Format the partition.&lt;/b&gt; Use &lt;samp&gt;Format-Volume -DriveLetter &amp;lt;DriveLetter&amp;gt; -FileSystem NTFS -NewFileSystemLabel "Projects" -Confirm:$false&lt;/samp&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Confirm all drive settings.&lt;/b&gt; Use &lt;samp&gt;Get-Volume -DriveLetter &amp;lt;DriveLetter&amp;gt;&lt;/samp&gt;.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;p&gt;Manually run these commands or automate them in a PowerShell script.&lt;/p&gt;
 &lt;h3&gt;Manage storage space with a script&lt;/h3&gt;
 &lt;p&gt;Use the above cmdlets to generate a PowerShell script using an editor &lt;a href="https://www.techtarget.com/searchwindowsserver/tutorial/How-to-use-the-PowerShell-extension-for-Visual-Studio-Code"&gt;such as Microsoft Visual Studio Code&lt;/a&gt;. Here is a sample script snippet to build from. It uses the &lt;samp&gt;$disk&lt;/samp&gt; variable to identify the storage device.&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;# Identify the newly installed disk

$disk = Get-Disk | Where-Object PartitionStyle -eq 'RAW'

# Initialize the new disk

Initialize-Disk -InputObject $disk -PartitionStyle GPT

# Create a new disk partition using all available space and assign it the next available drive letter

$partition = New-Partition -DiskNumber $disk.Number -UseMaximumSize -AssignDriveLetter

# Format the new volume with the NTFS filesystem and label it Projects

Format-Volume -DriveLetter $partition.DriveLetter -FileSystem NTFS -NewFileSystemLabel "Projects" -Confirm:$false

Consider adding the following redirect instructions when you run the script command (assume the script is named new_disk.ps1):

.\new_disk.ps1 &amp;gt; new-disk.log *&amp;gt;&amp;amp;1&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;This option redirects standard output and error streams into the specified &lt;samp&gt;new-disk.log&lt;/samp&gt; log file, which is helpful for troubleshooting.&lt;/p&gt;
&lt;/section&gt;          
&lt;section class="section main-article-chapter" data-menu-title="Remove old storage space"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Remove old storage space&lt;/h2&gt;
 &lt;p&gt;Perhaps your investigation of the system's storage space revealed data, partitions or volumes that are no longer necessary. Removing these resources using PowerShell is as straightforward as adding them.&lt;/p&gt;
 &lt;p&gt;With the various storage nouns -- &lt;samp&gt;disk, partition, volume&lt;/samp&gt;, etc. -- you'll use the standard deletion verbs, primarily &lt;samp&gt;Remove&lt;/samp&gt; and &lt;samp&gt;Clear&lt;/samp&gt;.&lt;/p&gt;
 &lt;p&gt;Here are a few sample cmdlets for removing storage resources:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;To delete the partition, making any stored data unavailable, use &lt;samp&gt;Remove-Partition -DiskNumber &amp;lt;DiskNumber&amp;gt; -PartitionNumber &amp;lt;PartitionNumber&amp;gt;&lt;/samp&gt;.&lt;/li&gt; 
  &lt;li&gt;To remove volumes as identified by drive letter, use &lt;samp&gt;Remove-Volume -DriveLetter &amp;lt;DriveLetter&amp;gt;.&lt;/samp&gt;&lt;/li&gt; 
  &lt;li&gt;To remove all partition information and uninitialize the disk, use &lt;samp&gt;Clear-Disk -Number &amp;lt;DiskNumber&amp;gt; -RemoveData&lt;/samp&gt;.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;Be very careful to &lt;a href="https://www.techtarget.com/searchdatabackup/feature/The-7-critical-backup-strategy-best-practices-to-keep-data-safe"&gt;back up all data&lt;/a&gt; before using these cmdlets to remove disk settings. Recovering lost data after running these cmdlets will be difficult or impossible. Also, think carefully before scripting disk deletions. It can be very easy to accidentally delete data as an automated process removes the storage space.&lt;/p&gt;
&lt;/section&gt;      
&lt;section class="section main-article-chapter" data-menu-title="Conclusion"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Conclusion&lt;/h2&gt;
 &lt;p&gt;Managing Windows Server storage space is a common administrator task, and PowerShell makes that job easier. Running manual commands in the PowerShell console is usually faster than browsing through graphical wizard interfaces, but the true benefit of CLI environments is scripting.&lt;/p&gt;
 &lt;p&gt;Use the cmdlets in this article to investigate, create and remove storage configurations. Write PowerShell scripts to automate these processes, especially the investigation and creation tasks.&lt;/p&gt;
 &lt;p&gt;Check your standard processes today to see whether scripting storage space management with PowerShell could improve your workflows.&lt;/p&gt;
 &lt;p&gt;&lt;i&gt;Damon Garn owns Cogspinner Coaction and provides freelance IT writing and editing services. He has written multiple CompTIA study guides, including the Linux+, Cloud Essentials+ and Server+ guides, and contributes extensively to Informa TechTarget, The New Stack and CompTIA Blogs.&lt;/i&gt;&lt;/p&gt;
&lt;/section&gt;</body>
            <description>These PowerShell cmdlets and scripts simplify Windows Server storage management by displaying existing storage information and creating or removing disk resources.</description>
            <image>https://cdn.ttgtmedia.com/rms/onlineimages/storage_g539954410.jpg</image>
            <link>https://www.techtarget.com/searchwindowsserver/tip/Top-PowerShell-disk-management-commands-for-Windows-storage</link>
            <pubDate>Mon, 06 Oct 2025 11:26:00 GMT</pubDate>
            <title>Top PowerShell disk management commands for Windows storage</title>
        </item>
        <item>
            <body>&lt;p&gt;If you run the same commands every time you launch the PowerShell console, consider modifying your PowerShell profile for a better overall experience.&lt;/p&gt; 
&lt;p&gt;The PowerShell profile loads your settings whenever you launch PowerShell to customize the environment to your needs. You define your settings as a PowerShell script, making the process straightforward. This article will explain the concepts behind the PowerShell profile, how to edit it for the various PowerShell consoles -- &lt;a href="https://www.techtarget.com/searchwindowsserver/definition/PowerShell"&gt;PowerShell&lt;/a&gt;, Windows PowerShell, Visual Studio Code (VS Code), Integrated Scripting Environment (ISE) -- and several useful additions to incorporate to enhance your workflow and avoid potential issues.&lt;/p&gt; 
&lt;section class="section main-article-chapter" data-menu-title="What is the PowerShell profile?"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;What is the PowerShell profile?&lt;/h2&gt;
 &lt;p&gt;The PowerShell profile is simply a PowerShell script that runs every time you launch PowerShell, except when you launch PowerShell with the &lt;b&gt;-NoProfile &lt;/b&gt;flag. The location of the profile varies depending on several conditions:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;The version of PowerShell (Windows PowerShell vs PowerShell)&lt;/li&gt; 
  &lt;li&gt;Is the profile for all users or the current user?&lt;/li&gt; 
  &lt;li&gt;Is the profile host application specific? (ISE, VS Code, etc)&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;The following lists are directories. The names of the profile scripts depend on the host application.&lt;/p&gt;
 &lt;p&gt;For all users, the profile is located here:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Windows PowerShell: $PSHOME\&lt;/li&gt; 
  &lt;li&gt;PowerShell:&lt;/li&gt; 
  &lt;li&gt;Windows: $PSHOME\&lt;/li&gt; 
  &lt;li&gt;Linux: /usr/local/Microsoft/powershell/7/&lt;/li&gt; 
  &lt;li&gt;macOS: /usr/local/Microsoft/powershell/7/&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;For specific users, the profile is located here:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Windows PowerShell: $HOME\Documents\WindowsPowerShell\&lt;/li&gt; 
  &lt;li&gt;PowerShell&lt;/li&gt; 
  &lt;li&gt;Windows: $HOME\Documents\PowerShell\&lt;/li&gt; 
  &lt;li&gt;Linux: ~/.config/powershell/&lt;/li&gt; 
  &lt;li&gt;macOS: ~/.config/powershell/&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;In these directories, you can have several valid profile files. The difference between the profiles is based on the host application that launches PowerShell. For this tutorial, we will use the ISE and VS Code as examples for hosts:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;All hosts: profile.ps1&lt;/li&gt; 
  &lt;li&gt;ISE: Microsoft.PowerShellISE_profile.ps1&lt;/li&gt; 
  &lt;li&gt;VS Code: Microsoft.VSCode_profile.ps1&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;If a user launches PowerShell in VS Code, the following profiles could run on Windows:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;All users, all hosts: $PSHOME\profile.ps1&lt;/li&gt; 
  &lt;li&gt;All users, VS Code: $PSHOME\Microsoft.VSCode_profile.ps1&lt;/li&gt; 
  &lt;li&gt;Current user, all hosts: $HOME\profile.ps1&lt;/li&gt; 
  &lt;li&gt;Current user, VS Code: $HOME\Microsoft.VSCode_profile.ps1&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;If any of the files don't exist, PowerShell skips that profile.&lt;/p&gt;
&lt;/section&gt;             
&lt;section class="section main-article-chapter" data-menu-title="How to access the PowerShell profile"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;How to access the PowerShell profile&lt;/h2&gt;
 &lt;p&gt;The easiest way to access PowerShell's profile is through PowerShell itself. There's no need to remember any of the listed paths because they are all stored in a variable called &lt;b&gt;$Profile&lt;/b&gt;.&lt;/p&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/ahowell_psprofile_image1-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/ahowell_psprofile_image1-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/ahowell_psprofile_image1-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/ahowell_psprofile_image1-f.jpg 1280w" alt="A PowerShell command line window shows the location of the PowerShell profile." height="85" width="557"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;To locate the PowerShell profile, enter the $Profile variable to show the path.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;p&gt;In this case, the username is hidden.&lt;/p&gt;
 &lt;p&gt;You'll notice that the only path displayed is the current user's PowerShell host application profile. Thankfully the &lt;b&gt;$Profile&lt;/b&gt; variable has some additional properties to show us the other paths. We can find those properties by piping the variable to &lt;b&gt;Get-Member&lt;/b&gt;:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;$Profile | Get-Member -MemberType NoteProperty&lt;/code&gt;&lt;/pre&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/ahowell_psprofile_image2-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/ahowell_psprofile_image2-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/ahowell_psprofile_image2-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/ahowell_psprofile_image2-f.jpg 1280w" alt="A PowerShell command line window shows the properties of the $Profile variable." height="129" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Use the Get-Member cmdlet to find the properties associated with the $Profile variable.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;p&gt;Therefore, if we want to find the path for the AllUsersAllHosts profile, we can do so with:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;$Profile.AllUsersAllHosts&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;On our system, the result is C:\Program Files\PowerShell\7\profile.ps1 for the path. Because the file is in the Program Files hierarchy and we can't edit that without administrative permissions, let's instead focus on the CurrentUserCurrentHost profile with:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;$Profile.CurrentUserCurrentHost&lt;/code&gt;&lt;/pre&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/ahowell_psprofile_image3-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/ahowell_psprofile_image3-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/ahowell_psprofile_image3-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/ahowell_psprofile_image3-f.jpg 1280w" alt="A PowerShell command line window shows the location of the CurrentUserCurrentHost profile script." height="130" width="559"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Find the location of the CurrentUserCurrentHost profile script.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;p&gt;If we want to edit that script, we can call VS Code directly:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;code $Profile.CurrentUserCurrentHost&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;This will launch VS Code and open that file.&lt;/p&gt;
&lt;/section&gt;               
&lt;section class="section main-article-chapter" data-menu-title="Ideas of things to add to your profile"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Ideas of things to add to your profile&lt;/h2&gt;
 &lt;p&gt;Since the profile is so flexible, you could do many different things with it. Let's look at a few that I've found useful over the years.&lt;/p&gt;
 &lt;h3&gt;Add OS awareness to profile&lt;/h3&gt;
 &lt;p&gt;Not all commands work the same way across the OSes that PowerShell supports, so we need logic to separate different commands. Fortunately, PowerShell makes this very easy with some built-in variables that will all exist cross-platform:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;$IsWindows is true when running on Windows&lt;/li&gt; 
  &lt;li&gt;$IsLinux is true when running on Linux&lt;/li&gt; 
  &lt;li&gt;$IsMacOS is true when running on MacOS&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;if ($IsWindows) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; # do Windows stuff
} elseif ($IsLinux) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; # do Linux stuff
} elseif ($IsMacOS) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; # do MacOS stuff
}&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;The following suggestions will contain some examples of how to write profile code for multiple platforms.&lt;/p&gt;
 &lt;div class="btt-thumbnailContainer"&gt;
  &lt;span class="btt-thumbnailTitle"&gt;How to find and customize your PowerShell profile&lt;/span&gt;
  &lt;a class="btt-thumbnailLink" data-video-id="652455" data-channel-id="18865"&gt;
   &lt;div class="btt-thumbnailImgContainer"&gt;
    &lt;img class="btt-videoBtThumbnail" src="https://cdn.brighttalk.com/ams/california/images/communication/652455/image_1059040.png?width=640&amp;amp;height=360"&gt;
   &lt;/div&gt;&lt;/a&gt;
  &lt;time class="btt-video-duration" datetime="PT5M59S"&gt;5:59&lt;/time&gt;
 &lt;/div&gt;
 &lt;div class="btt-modal"&gt;
  &lt;div class="btt-modal-content"&gt;&lt;/div&gt;
 &lt;/div&gt;
 &lt;h3&gt;Customize your prompt&lt;/h3&gt;
 &lt;p&gt;PowerShell allows you to run a script every time the prompt loads, which is every time you run a command. If you aren't already familiar with customizing your prompt, I highly encourage you to do additional research to see some cool prompts folks have blogged about. This article will only cover a very basic example.&lt;/p&gt;
 &lt;p&gt;For instance, if we wanted to place the cursor on the line below the path and display the # symbol if we are running as administrator on Windows or as root on Linux, we could do something like:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Function Prompt {
&amp;nbsp;&amp;nbsp;&amp;nbsp; $endChar = '&amp;gt;'
&amp;nbsp;&amp;nbsp;&amp;nbsp; # check if running as admin
&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($IsWindows) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If (([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $endChar = '#'
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; } elseif ($IsLinux) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((id -u) -eq 0) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $endChar = '#'
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; "$PWD`nPS$endchar"
}&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;Since we want this to run every time PowerShell loads, put it in your profile.&lt;/p&gt;
 &lt;h3&gt;Load a PowerShell module and set default properties&lt;/h3&gt;
 &lt;p&gt;A mistake I regularly make is to use a module that requires authentication before authenticating. Some modules are slick and remind you to authenticate, while others throw a cryptic error. Regardless, if it is a module you use frequently, consider adding the authentication steps to your profile.&lt;/p&gt;
 &lt;p&gt;Let's &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/Whats-new-in-Microsoft-Graph-PowerShell-v2"&gt;use the Microsoft.Graph module&lt;/a&gt; as an example. It allows you to authenticate using cached credentials, so, assuming you have previously authenticated, you can simply add the following to your profile:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Connect-MgGraph&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;Though one of the quirks of the Microsoft.Graph.Users module is that returning multiple properties of users requires specifying even the default properties. We can work around this by building a variable in our profile:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;$graphUserProps = @(
&amp;nbsp;&amp;nbsp;&amp;nbsp; 'BusinessPhones',
&amp;nbsp;&amp;nbsp;&amp;nbsp; 'DisplayName',
&amp;nbsp;&amp;nbsp;&amp;nbsp; 'GivenName',
&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Id',
&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Mail',
&amp;nbsp;&amp;nbsp;&amp;nbsp; 'PreferredLanguage',
&amp;nbsp;&amp;nbsp;&amp;nbsp; 'Surname',
&amp;nbsp;&amp;nbsp;&amp;nbsp; 'UserPrincipalName'
)&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;And then whenever we need additional properties for a Graph user, we can reference that variable and add additional properties:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Get-MgUser -UserId &amp;lt;upn&amp;gt; -Select ($graphUserProps + 'AccountEnabled','UsageLocation')&lt;/code&gt;&lt;/pre&gt;
 &lt;h3&gt;Manage PowerShell module versions&lt;/h3&gt;
 &lt;p&gt;If you have a particular module that you want to keep up to date, you can run version checks in your profile or run the Update-PSResource or Update-Module command on every launch. Since you may end up managing many modules or modules that are large themselves, we could initiate this part of the profile in a ThreadJob:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;$modulesToUpdate = @('az', 'microsoft.graph')
$null = Start-ThreadJob -Name "Update modules" -ArgumentList $modulesToUpdate {
&amp;nbsp;&amp;nbsp;&amp;nbsp; param([string[]]$modulesToUpdate)
&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach ($module in $modulesToUpdate) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Update-PSResource -Name $module -Force -Confirm:$false
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
}&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;Since this example &lt;a href="https://www.techtarget.com/searchwindowsserver/tutorial/Try-these-PowerShell-Start-Job-examples-for-more-efficiency"&gt;runs as a ThreadJob&lt;/a&gt;, the modules will update in the background without slowing your profile.&lt;/p&gt;
 &lt;h3&gt;Add security features&lt;/h3&gt;
 &lt;p&gt;Since your PowerShell profile will load every time you run, this is a great place to enable some security features.&lt;/p&gt;
 &lt;p&gt;For example, if &lt;a href="https://www.techtarget.com/searchwindowsserver/tutorial/PowerShell-7-remoting-expands-management-horizons"&gt;your organization uses Just Enough Administration (JEA),&lt;/a&gt; you can pre-emptively set up some JEA sessions:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;$jeaDcSession = New-PSSession -ComputerName 'DC01' -ConfigurationName 'JEA_DC'
Import-PSSession -Session $jeaDcSession -Prefix 'JEADC'&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;Then, if you wanted to see what commands were imported, you could run:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Get-JEADCCommand&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;Another use case is for unlocking secret vaults. If you &lt;a href="https://www.techtarget.com/searchwindowsserver/tutorial/Working-with-PowerShell-Secret-Management-and-Secret-Vault"&gt;use the Secrets Management module&lt;/a&gt;, you can unlock your most-used vault in your profile:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Unlock-SecretVault -Name VaultName -Password (Read-Host -AsSecureString)&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;However, this will prompt you for the vault password on every run.&lt;/p&gt;
 &lt;p&gt;If your infosec team requires you to log all your PowerShell activity for ingestion into your company's SIEM, you could even add transcript logging to your profile:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Start-Transcript -OutputDirectory C:\Path\To\SIEM\Directory&lt;/code&gt;&lt;/pre&gt;
 &lt;h3&gt;Adding aliases and argument completers&lt;/h3&gt;
 &lt;p&gt;Another excellent use case for the PowerShell profile is adding aliases. If you work a lot in PowerShell interactively, then aliases can save quite a bit of typing. If we go back to the previous Microsoft.Graph example, you could shorten &lt;b&gt;Get-MgUser&lt;/b&gt; to &lt;b&gt;gmu&lt;/b&gt;:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;New-Alias -Name gmu -Value Get-MgUser&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;However, one of my favorite aliases is for the Kubernetes command line tool kubectl. I alias it to the letter k:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;New-Alias -Name k -Value kubectl&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;Kubectl &lt;a target="_blank" href="https://kubernetes.io/docs/tasks/tools/install-kubectl-windows/#enable-shell-autocompletion" rel="noopener"&gt;includes&lt;/a&gt; a PowerShell argument completer -- the function that offers dynamic hints for parameter values for commands to speed up coding. If &lt;a href="https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/compare-Kubernetes-kubectl-vs-kubelet-when-to-use"&gt;you use kubectl&lt;/a&gt; a lot, that is an excellent addition to your profile.&lt;/p&gt;
 &lt;h3&gt;Load custom functions&lt;/h3&gt;
 &lt;p&gt;A lot of times, you may find yourself writing one-off functions to help with your work. They may not feel worth adding to a module, but they help you get your work done. So after you have them in source control, your profile can dot-source them all to load them when you load PowerShell:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;. C:\path\to\Function.ps1&lt;/code&gt;&lt;/pre&gt;
 &lt;h3&gt;Apply environment awareness&lt;/h3&gt;
 &lt;p&gt;If you have hosts with standard names or an easy way to identify what environment a host is in, you can make environment-aware adjustments to PowerShell. For example, you could force the background to be red when you are in production.&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;if ($IsWindows) {
&amp;nbsp;&amp;nbsp;&amp;nbsp; if ($env:COMPUTERNAME -like 'prod-*') {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Host.UI.RawUI.BackgroundColor = 'DarkRed'
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
}&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;Or you could even update the window title, giving another layer of warning:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;$Host.ui.RawUI.WindowTitle = "POWERSHELL in PRODUCTION"&lt;/code&gt;&lt;/pre&gt;
 &lt;h3&gt;Ways to sync a PowerShell profile&lt;/h3&gt;
 &lt;p&gt;Once you've perfected your profile, you won't see those customizations when you hop onto another system. To solve that, we can introduce some profile synchronization.&lt;/p&gt;
 &lt;p&gt;A common and easy fix is to use a file-syncing application, such as OneDrive. Be sure to enable the Documents folder redirection to sync your profile. If you do this, also be aware that your modules will also be synced, which could introduce latency unless you configure your Documents folder to be stored locally on your device. Whenever you import a module, OneDrive will download the files associated with the module.&lt;/p&gt;
 &lt;p&gt;A better approach would be to store your profile in a place that is easily accessible. If you work in a corporate environment, this could be on a file server or even an Azure File share. Then, any time you launch PowerShell on a new machine, you just need to copy the profile onto your local system:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;Copy-Item Z:\share\home\profile.ps1 ~\Documents\PowerShell\Profile.ps1&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;This approach also has the advantage of being supported on servers where installing an application such as OneDrive is prohibited.&lt;/p&gt;
 &lt;p&gt;Another method is to use a GitHub &lt;a target="_blank" href="https://docs.github.com/en/get-started/writing-on-github/editing-and-sharing-content-with-gists/creating-gists" rel="noopener"&gt;gist&lt;/a&gt; to make the profile available for download. Gists are publicly available, so only use this method if your profile contains no private information, such as information about your internal environment.&lt;/p&gt;
 &lt;p&gt;An excellent example of using a gist to sync your PowerShell profile is the from Steve Lee, the principal software engineer manager of the PowerShell development team from Microsoft. &lt;a target="_blank" href="https://gist.github.com/SteveL-MSFT/a208d2bd924691bae7ec7904cab0bd8e" rel="noopener"&gt;His profile&lt;/a&gt; uses a comment to identify the published version:&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;# Version 1.2.13&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;He also includes logic that compares the version in the local profile with the public version. If the public profile version is greater, then the profile will be downloaded and made available the next time PowerShell launches.&lt;/p&gt;
 &lt;p&gt;The following code downloads a PowerShell profile from a gist and saves it as the local PowerShell profile.&lt;/p&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;$gist = Invoke-RestMethod https://api.github.com/gists/a208d2bd924691bae7ec7904cab0bd8e
$gist.files."profile.ps1".content | Out-File ~\Documents\PowerShell\Profile.ps1&lt;/code&gt;&lt;/pre&gt;
 &lt;p&gt;These are just a few examples of how to customize your PowerShell profile. Experiment with some of these suggestions and incorporate them to optimize and simplify your workflow when working with this automation tool.&lt;/p&gt;
 &lt;p&gt;&lt;i&gt;Anthony Howell is an IT strategist with extensive experience in infrastructure and automation technologies. His expertise includes PowerShell, DevOps, cloud computing, and working in both Windows and Linux environments.&lt;/i&gt;&lt;/p&gt;
&lt;/section&gt;</body>
            <description>Give a more streamlined approach to PowerShell by learning how to customize your PowerShell profile to optimize workflows, enhance security and adapt to different environments.</description>
            <image>https://cdn.ttgtmedia.com/rms/onlineimages/container_g1294273513.jpg</image>
            <link>https://www.techtarget.com/searchwindowsserver/tutorial/How-to-find-and-customize-your-PowerShell-profile</link>
            <pubDate>Tue, 16 Sep 2025 10:37:00 GMT</pubDate>
            <title>How to find and customize your PowerShell profile</title>
        </item>
        <item>
            <pubDate>Fri, 12 Sep 2025 08:32:00 GMT</pubDate>
            <title>Azure Arc guide for Microsoft admins</title>
        </item>
        <item>
            <body>&lt;p&gt;If you're looking for a safe space to build your expertise with Azure Arc and Microsoft's cloud offerings, there's a ready-made option available.&lt;/p&gt; 
&lt;p&gt;Jumpstart ArcBox for IT Pros is a purpose-built, ready-to-deploy sandbox environment that provides IT professionals with a practical, hands-on introduction to Azure Arc and hybrid cloud technologies. Designed by Microsoft engineers, Jumpstart ArcBox delivers a pre-configured set of VMs and resources to simulate real-world scenarios across on-premises, edge and multi-cloud environments. For IT pros tasked with &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/Guide-to-Windows-Server-Hybrid-Administrator-certification"&gt;managing hybrid infrastructure&lt;/a&gt;, Jumpstart ArcBox offers a controlled yet realistic platform to experiment, test, and build confidence in using Azure Arc to manage both Windows and Linux servers, and SQL workloads. This article will explain the deployment process for Jumpstart ArcBox and how to work within the environment to build your understanding of Azure Arc.&lt;/p&gt; 
&lt;section class="section main-article-chapter" data-menu-title="Why use Jumpstart ArcBox for IT Pros?"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Why use Jumpstart ArcBox for IT Pros?&lt;/h2&gt;
 &lt;p&gt;One of the standout benefits of Jumpstart ArcBox is the ability to gain experience with complex enterprise technologies without needing to provision or configure the underlying infrastructure from scratch. IT professionals can &lt;a href="https://www.techtarget.com/searchwindowsserver/tutorial/Azure-Arc-setup-tips-for-on-premises-server-management"&gt;explore key capabilities, such as Azure Arc-enabled servers&lt;/a&gt;, policy enforcement and Azure Monitor integration. This arrangement eliminates the barriers typically associated with setting up hybrid environments, such as hardware dependencies, security configurations and networking complexities, allowing learners to focus on mastering the tools and workflows that matter most in real-world deployments.&lt;/p&gt;
 &lt;p&gt;Jumpstart ArcBox also serves as a valuable training and enablement resource for organizations and IT teams. Whether onboarding new team members, conducting internal workshops or evaluating Azure Arc capabilities before production rollout, Jumpstart ArcBox provides a consistent, replicable learning experience. It bridges the skills gap by accelerating familiarity with hybrid management tools and gives IT pros the confidence to support evolving infrastructure strategies that blend on-premises systems with the flexibility of the cloud.&lt;/p&gt;
 &lt;p&gt;In addition to Jumpstart ArcBox for IT Pros, Microsoft also offers other tailored sandbox deployments: a full ArcBox deployment for a complete hybrid cloud experience, ArcBox for DevOps designed for DevOps engineers and ArcBox for DataOps for data professionals.&lt;/p&gt;
&lt;/section&gt;    
&lt;section class="section main-article-chapter" data-menu-title="How to deploy Jumpstart ArcBox for IT Pros"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;How to deploy Jumpstart ArcBox for IT Pros&lt;/h2&gt;
 &lt;p&gt;Microsoft designed Jumpstart ArcBox to be self-sufficient. If you've ever set up a lab environment for Arc before, chances are that you've had to make use of physical hardware. Jumpstart ArcBox for IT Pros &lt;a href="https://www.techtarget.com/searchitoperations/tip/Understand-hardware-support-for-virtualization"&gt;uses nested virtualization&lt;/a&gt;: Hyper-V VMs that run inside the Azure VM are the "on-premises" systems registered as Arc-enabled servers. All you need is an Azure subscription to provision the entire lab environment.&lt;/p&gt;
 &lt;p&gt;Before you start, there are a few prerequisites to check:&lt;/p&gt;
 &lt;ol type="1" start="1" class="default-list"&gt; 
  &lt;li&gt;While you don't need hardware to run the lab, you need a system to trigger the deployment and access the lab environment. Anything capable of running a terminal and a browser should be fine. There are no OS requirements.&lt;/li&gt; 
  &lt;li&gt;Install the latest version of Azure CLI, which is cross-platform, so you can install it on Windows, Linux -- including Windows Subsystem for Linux (WSL) -- and macOS.&lt;/li&gt; 
  &lt;li&gt;Check that you can deploy to one of the supported Azure regions. Not every region supports all the features needed to run Jumpstart ArcBox, so check the online &lt;a target="_blank" href="https://jumpstart.azure.com/azure_jumpstart_arcbox/faq" rel="noopener"&gt;documentation&lt;/a&gt; and ensure you can access one of the supported datacenters.&lt;/li&gt; 
  &lt;li&gt;Check the vCPU quota for the desired region. Jumpstart ArcBox for IT Pros uses eight DSv5 vCPUs, so ensure you have sufficient capacity. You can request a quota increase for the specific region, which usually only takes a few minutes to fulfill.&lt;/li&gt; 
  &lt;li&gt;Using the &lt;b&gt;az provider register&lt;/b&gt; command, you'll need to register the following Resource Providers in your Azure subscription:&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;ol class="default-list"&gt; 
  &lt;li style="list-style: none;"&gt; 
   &lt;ol class="default-list"&gt; 
    &lt;li style="list-style: none;"&gt; 
     &lt;ol style="list-style-type: lower-alpha;" class="default-list"&gt; 
      &lt;li&gt;Microsoft.Compute&lt;/li&gt; 
      &lt;li&gt;Microsoft.HybridCompute&lt;/li&gt; 
      &lt;li&gt;Microsoft.GuestConfiguration&lt;/li&gt; 
      &lt;li&gt;Microsoft.AzureArcData&lt;/li&gt; 
      &lt;li&gt;Microsoft.OperationsManagement&lt;/li&gt; 
      &lt;li&gt;Microsoft.Insights&lt;/li&gt; 
      &lt;li&gt;Microsoft.HybridConnectivity&lt;/li&gt; 
     &lt;/ol&gt; &lt;/li&gt; 
   &lt;/ol&gt; &lt;/li&gt; 
 &lt;/ol&gt;
 &lt;p&gt;To deploy Jumpstart ArcBox for IT Pros, there are a couple of approaches, and both of them start from the official documentation &lt;a target="_blank" href="https://jumpstart.azure.com/azure_jumpstart_arcbox/ITPro" rel="noopener"&gt;page&lt;/a&gt;:&lt;/p&gt;
 &lt;ol type="1" start="1" class="default-list"&gt; 
  &lt;li&gt;Navigate to &lt;b&gt;Deployment Option 1: Azure portal&lt;/b&gt; and click the &lt;b&gt;Deploy to Azure&lt;/b&gt; button to start a deployment using the ARM templates for ArcBox, which are stored in the relevant GitHub repository. Because the repository is public, all templates and parameter files are referenced via URLs to allow a complete deployment.&lt;b&gt; &lt;/b&gt;You only need to provide values for the required parameters that can't be automatically populated, such as the tenant ID and a &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/How-to-work-with-the-new-Windows-LAPS-feature"&gt;password for the local Windows administrator&lt;/a&gt;. The system automatically populates other parameters with default values from the parameters file, but they can be customized. For example, you can modify the automatic shutdown time, specify an email recipient for the shutdown notifications or and whether or not to make use of Azure Spot Pricing. Once you've made the necessary edits, select &lt;b&gt;Review and create&lt;/b&gt;, confirm the details and the deployment is submitted.&lt;/li&gt; 
  &lt;li&gt;The second option is to pull down the GitHub repository and deploy from a local workstation. In the official documentation, scroll down to &lt;b&gt;Deployment Option 2: Bicep deployment&lt;/b&gt;, and you'll see the git command to clone down the repository. The files you're looking for are contained in the &lt;b&gt;./azure_arc/azure_jumpstart_ArcBox/bicep&lt;/b&gt; folder. The main file to edit is the &lt;b&gt;main.bicepparam&lt;/b&gt; file -- this is the parameters file which passes values to the &lt;b&gt;main.bicep&lt;/b&gt; deployment template. As with the portal-based deployment, the main values you need to provide are for the &lt;b&gt;tenantID&lt;/b&gt; and &lt;b&gt;windowsAdminPassword&lt;/b&gt; parameters, but you can add additional parameters to the file to overwrite the default values in the main template. Just keep the syntax consistent, for example &lt;b&gt;param autoShutdownTime = '1200'&lt;/b&gt;. The online documentation lists the available parameters you can adjust, or you can look inside the &lt;b&gt;main.bicep &lt;/b&gt;file at the different configured parameters. Once done, you have a few options for deployment:&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;ol style="list-style-type: lower-alpha;" class="default-list"&gt; 
  &lt;li&gt;Start by creating a new Azure Resource Group in the region to deploy ArcBox. For example, &lt;b&gt;az group create --name "ArcBox-rg" --location "eastus"&lt;/b&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href="https://www.techtarget.com/searchcloudcomputing/tip/Why-and-how-to-create-Azure-service-principals"&gt;Deploy using Azure CLI&lt;/a&gt; with the following command: &lt;b&gt;az deployment group create -g "ArcBox-rg" -f "main.bicep" -p "main.bicepparam"&lt;/b&gt;&lt;/li&gt; 
  &lt;li&gt;Deploy using Azure PowerShell with the following command: &lt;b&gt;New-AzResourceGroupDeployment -Name ArcBox -ResourceGroupName "ArcBox-rg" -TemplateFile "./main.bicep" -TemplateParameterFile "./main.bicepparam"&lt;/b&gt;&lt;/li&gt; 
  &lt;li&gt;Deploy directly from a supported application, such as VSCode. To do this, ensure you have the relevant Azure and Bicep extensions installed, then right-click the &lt;b&gt;main.bicepparam&lt;/b&gt; file and select &lt;b&gt;Show Deployment Pane&lt;/b&gt;. This gives a step-by-step UI for submitting the deployment to Azure and tracking it to completion.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;p&gt;The first deployment option via the Azure portal gets you up and running faster, but if you think you'll run the deployment multiple times, then the second option is preferred. The portal-based deployment option doesn't store any of the parameter values, so you'll have to re-enter them each time. Using a &lt;a href="https://www.techtarget.com/searchitoperations/tutorial/How-to-use-Git-to-save-PowerShell-scripts"&gt;local copy of the GitHub repository&lt;/a&gt; means that your parameter values are saved, so you don't need to provide them for each deployment. Just be careful to avoid committing sensitive data to the parameters file and then committing it to an online repository. You won't have access to push to the original Microsoft repository, so you can't do that accidentally, but it's still worth being careful.&lt;/p&gt;
&lt;/section&gt;         
&lt;section class="section main-article-chapter" data-menu-title="Post-deployment configuration and access for ArcBox lab"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Post-deployment configuration and access for ArcBox lab&lt;/h2&gt;
 &lt;p&gt;Once the template deployment is complete, go to the Azure portal and navigate to the Azure Resource Group that you specified for the ArcBox deployment. You'll see a list of various resources, but nothing specifically related to Azure Arc, because there's a fully automated post-deployment process running on the &lt;b&gt;ArcBox-Client VM&lt;/b&gt;. This was triggered by an Azure VM script extension, which runs the &lt;b&gt;./azure_arc/azure_jumpstart_ArcBox/artifacts/Bootstrap.ps1&lt;/b&gt; script. This, in turn, executes additional configuration scripts depending on the type of ArcBox provisioned.&lt;/p&gt;
 &lt;p&gt;Connect to the &lt;b&gt;ArcBox-Client VM&lt;/b&gt; to see the ongoing configuration process.&lt;b&gt; &lt;/b&gt;By default, there's no inbound connectivity, so we need to open a port in the &lt;b&gt;ArcBox-NSG&lt;/b&gt; Network Security Group. Go to the NSG resource, navigate to Settings&amp;gt;Inbound security rules and select &lt;b&gt;Add&lt;/b&gt;. Choose the following configuration options:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Source&amp;gt;My IP Address&lt;/li&gt; 
  &lt;li&gt;Service&amp;gt;RDP&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;Leave all the other settings as the default. Select &lt;b&gt;Add&lt;/b&gt; to create the new rule, which opens TCP port 3389 to the target VM, but only from the detected public IP address. If the IP address changes in the future or you want to connect from a different location, you'll need to update the rule with the new IP address. You can also turn off the rule when you're not planning to connect to the VM by changing the action from &lt;b&gt;Allow&lt;/b&gt; to &lt;b&gt;Deny&lt;/b&gt;. If you're uncomfortable with opening the RDP port, a deployment option &lt;a href="https://www.techtarget.com/searchcloudcomputing/tip/How-to-protect-VMs-with-Azure-Bastion-hosts"&gt;includes an Azure Bastion instance&lt;/a&gt; that gives a connection to the VM via a hosted jumphost. However, this is an always-on service, so Azure Bastion will keep incurring running costs even if the VM is turned off.&lt;/p&gt;
 &lt;p&gt;Once done, navigate to the &lt;b&gt;ArcBox-Client VM&lt;/b&gt; and select &lt;b&gt;Connect&lt;/b&gt;. Download the RDP file, and you can connect to the VM via any application that supports Remote Desktop Protocol. The username and password are whatever you specified in the deployment. Once connected, you should see a PowerShell window that is running several predetermined configuration scripts to set the VM up to host multiple VMs acting as your pseudo on-premises lab. These are the systems that will be automatically registered with Azure Arc. This post-deployment process can take up to 45 minutes to complete, and the VM will log you out at least once.&lt;/p&gt;
 &lt;p&gt;If you turn the VM off or set it to auto-shutdown, then the VM will likely have a different public IP address when it is restarted. You'll need to retrieve this when reconnecting.&lt;/p&gt;
 &lt;p&gt;Once complete, the desktop wallpaper will change to the official JumpStart logo, and there'll be a BgInfo box in the corner showing you how many functional tests were executed, how many passed and how many failed. Open Hyper-V Manager and you'll see five VMs: two Windows, two Linux and one SQL. Lastly, go back to the resource group in the Azure portal and refresh to see the new resources -- these are the newly deployed VMs now registered with Azure Arc. Your JumpStart lab is complete.&lt;/p&gt;
&lt;/section&gt;        
&lt;section class="section main-article-chapter" data-menu-title="How to interact with Jumpstart ArcBox for IT Pros"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;How to interact with Jumpstart ArcBox for IT Pros&lt;/h2&gt;
 &lt;p&gt;You can interact with the Jumpstart ArcBox for IT Pros lab environment from any system, but the &lt;b&gt;ArcBox-Client VM&lt;/b&gt; is the best option. This dedicated VM includes:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;required binaries and necessary tools;&lt;/li&gt; 
  &lt;li&gt;System Managed Identity configuration to authenticate to Azure services; and&lt;/li&gt; 
  &lt;li&gt;required permissions to interact with Arc-enabled resources.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;To work in the lab, use Azure CLI to remote to one of the Linux servers. From within the VM, start by opening up a terminal session, then:&lt;/p&gt;
 &lt;ol type="1" start="1" class="default-list"&gt; 
  &lt;li&gt;Start typing &lt;b&gt;Get-ChildItem env:&lt;/b&gt; to get a list of all the environment variables available to the PowerShell session. There are many custom ones which define the lab environment, such as &lt;b&gt;mssqlmiName&lt;/b&gt; and &lt;b&gt;resourceGroup&lt;/b&gt;, that help with passing values into administrative commands.&lt;/li&gt; 
  &lt;li&gt;Type in &lt;b&gt;az account show&lt;/b&gt; to demonstrate Azure CLI is already installed and authenticated to Azure using the VM's managed identity.&lt;/li&gt; 
  &lt;li&gt;Enter the following PowerShell commands:&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;$serverName = "ArcBox-Ubuntu-01"
$localUser = "jumpstart"
az arc ssh --resource-group $env:resourceGroup --name $serverName --local-user $localUser&lt;/code&gt;&lt;/pre&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li style="list-style: none;"&gt; 
   &lt;ol style="list-style-type: lower-alpha;" class="default-list"&gt; 
    &lt;li&gt;This uses the Azure CLI Arc module to connect to the Arc-enabled Linux server using SSH. The Arc management plane handles the connection. There is no need to configure any networking or firewalls to enable it.&lt;/li&gt; 
    &lt;li&gt;Try changing the &lt;b&gt;$serverName&lt;/b&gt; variable to &lt;b&gt;ArcBox-Ubuntu-02&lt;/b&gt; and execute the same command as above. You will see that you're able to &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/These-Posh-SSH-examples-pave-the-way-to-Linux-management"&gt;SSH directly into the system&lt;/a&gt; from the VM because the managed identity has the requisite permissions.&lt;/li&gt; 
   &lt;/ol&gt; &lt;/li&gt; 
 &lt;/ul&gt;
 &lt;ol type="1" start="4" class="default-list"&gt; 
  &lt;li&gt;Connect to the Windows Server 2025 system via Azure Arc SSH using the following commands:&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;pre class="language-powershell"&gt;&lt;code&gt;$serverName = "ArcBox-Win2K25"
$localUser = "Administrator"
az arc ssh --resource-group $env:resourceGroup --name $serverName --local-user $localUser
Password = "JS123!!"&lt;/code&gt;&lt;/pre&gt;
 &lt;ol class="default-list"&gt; 
  &lt;li style="list-style: none;"&gt; 
   &lt;ol class="default-list"&gt; 
    &lt;li style="list-style: none;"&gt; 
     &lt;ol style="list-style-type: upper-alpha;" class="default-list"&gt; 
      &lt;li style="list-style: none;"&gt; 
       &lt;ol style="list-style-type: lower-alpha;" class="default-list"&gt; 
        &lt;li&gt;The commands connect you to a shell session on the Arc-enabled Windows Server 2025 VM. Type in &lt;b&gt;pwsh&lt;/b&gt; to enter a PowerShell 7 -- formerly PowerShell Core -- session on the same remote system.&lt;/li&gt; 
        &lt;li&gt;Exit the SSH session back to the main VM. Enter the same command as above, but this time append &lt;b&gt;--rdp&lt;/b&gt; to the end. This time you'll connect to the Server 2025 VM, but instead of tunnelling SSH through the Azure Arc backplane, you'll connect via RDP.&lt;/li&gt; 
       &lt;/ol&gt; &lt;/li&gt; 
     &lt;/ol&gt; &lt;/li&gt; 
   &lt;/ol&gt; &lt;/li&gt; 
 &lt;/ol&gt;
&lt;/section&gt;          
&lt;section class="section main-article-chapter" data-menu-title="Get familiar with Azure Arc's operational features"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Get familiar with Azure Arc's operational features&lt;/h2&gt;
 &lt;p&gt;Let's move on to look at some of the operational features that have been enabled in the ArcBox lab, starting with operational workbooks.&lt;/p&gt;
 &lt;p&gt;In the &lt;b&gt;ArcBox-itpro&lt;/b&gt; resource group, you'll see two Azure Workbook resources. Open the &lt;b&gt;Azure Arc-enabled resources inventory&lt;/b&gt; workbook to see a breakdown of the lab inventory, including the available and outstanding list of software updates pending across the lab.&lt;/p&gt;
 &lt;p&gt;Go back out and select the second workbook (OS Performance) -- this workbook takes it data from the lab Log Analytics Workspace, so you may need to select the workspace resource for the workbook to be populated.&lt;/p&gt;
 &lt;p&gt;This workbook gives you a rundown of the &lt;a href="https://www.techtarget.com/searchitoperations/tutorial/Build-a-PowerShell-performance-monitoring-script-step-by-step"&gt;processor, memory and disk performance metrics&lt;/a&gt; for each server in the lab. While these are very similar to the performance metrics you'd expect to see from Azure VMs, this metrics data is ingested into Log Analytics via Azure Arc from systems that are effectively on-premises.&lt;/p&gt;
 &lt;p&gt;In the top right-hand corner of each component in the workbook, you'll see an Azure Logs icon to view the logs directly in the workspace which were used to populate the report component view. Within the logs view, if you click on &lt;b&gt;User Query&lt;/b&gt;, you'll get the &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/Kusto-Query-Language-primer-for-IT-administrators"&gt;specific Kusto Query Language (KQL) query&lt;/a&gt; used to generate the results. This allows you to customize the queries, save them as custom queries and use them in different workbooks or administrative systems.&lt;/p&gt;
 &lt;p&gt;Circling back to update management, this data is available because each Arc-enabled system has been onboarded to Azure Update Manager. This centralized platform allows managing updates across the infrastructure in Azure and Arc-enabled servers.&lt;/p&gt;
 &lt;p&gt;Try the following steps to manage updates on an Arc-enabled server:&lt;/p&gt;
 &lt;ol type="1" start="1" class="default-list"&gt; 
  &lt;li&gt;In the Azure portal, navigate to the &lt;b&gt;ArcBox-itpro&lt;/b&gt; resource group and go into &lt;b&gt;ArcBox-Ubuntu-02&lt;/b&gt;. This is the Arc resource created when the Hyper-VM was onboarded to Azure Arc.&lt;/li&gt; 
  &lt;li&gt;Navigate to &lt;b&gt;Operations&amp;gt;Updates&lt;/b&gt; for a list of available updates for this particular system, classified by type.&lt;/li&gt; 
  &lt;li&gt;Select &lt;b&gt;One-time update&lt;/b&gt;. There should be only one machine selected, although Azure Update Manager can update multiple systems at once.&lt;/li&gt; 
  &lt;li&gt;Select &lt;b&gt;Next&lt;/b&gt;, then choose &lt;b&gt;Select by Update Classification&lt;/b&gt;. Uncheck &lt;b&gt;Select All&lt;/b&gt; and select &lt;b&gt;Security and critical updates&lt;/b&gt;, then click &lt;b&gt;Save&lt;/b&gt;.&lt;/li&gt; 
  &lt;li&gt;Proceed to &lt;b&gt;Review and install&lt;/b&gt;, and then click &lt;b&gt;Install&lt;/b&gt;. This triggers an update of the Arc-enabled VM, downloading and installing critical and security updates. The system will reboot if needed, and Azure Update Manager will refresh the status of the VM once the outstanding updates have been installed successfully.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;p&gt;The last thing we'll take a look at is the Arc-enabled SQL instance. In the &lt;b&gt;ArcBox-itpro&lt;/b&gt; resource group, navigate to the &lt;b&gt;ArcBox-SQL&lt;/b&gt; resource, which is the SQL server instance running on the Hyper-V lab VM. SQL Best Practices Assessment has been enabled for the lab and has been run on instance already, with the results stored in the lab's Log Analytics workspace.&lt;/p&gt;
 &lt;p&gt;Navigate to &lt;b&gt;Settings&amp;gt;Best practices assessment &lt;/b&gt;and click on the completed assessment. You'll see a full list of all the issues detected on the SQL server and databases, categorized by severity and type. Drill down into any of the issues to see a rundown of the problem along with the URL to the associated help link to assist with research and to implement the correct remediation.&lt;/p&gt;
 &lt;p&gt;Best practices assessment doesn't allow you to execute remote remediation, which is probably a good thing given the importance of most SQL servers. As you work through the detected issues, each new assessment will show a reduction in the problem and recommendation count. If you're too impatient to wait for the next scheduled scan, hit &lt;b&gt;Run assessment&lt;/b&gt; to trigger a manual scan. This functionality is available for any Arc-enabled SQL server, regardless of where it runs.&lt;/p&gt;
&lt;/section&gt;            
&lt;section class="section main-article-chapter" data-menu-title="Explore these next steps with an ArcBox lab"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Explore these next steps with an ArcBox lab&lt;/h2&gt;
 &lt;p&gt;When you finish exploring the Jumpstart ArcBox for IT Pros lab, delete the resource group, which removes all the lab-related resources.&lt;/p&gt;
 &lt;p&gt;Because the ArcBox lab is designed to be completely self-contained and easily deployed, it's a good candidate for building a &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/Improve-IT-efficiency-with-a-PowerShell-self-service-portal"&gt;self-service portal for your team&lt;/a&gt;. Creating a simple Microsoft Form tied to an Azure Logic App can trigger an automated ArcBox deployment for further testing and also exploring the other ArcBox offerings. You can also extend the standard ArcBox deployment by adding custom Hyper-V VMs running a range of OSes and applications, then register them with Azure Arc to explore technical scenarios closer to your own environment's ecosystem.&lt;/p&gt;
 &lt;p&gt;The official JumpStart ArcBox &lt;a target="_blank" href="https://jumpstart.azure.com/azure_jumpstart_arcbox" rel="noopener"&gt;website&lt;/a&gt; features additional tutorials and labs to explore, so don't forget to check it out as you progress on your journey to learn more about Azure Arc.&lt;/p&gt;
 &lt;p&gt;&lt;i&gt;James Bannan is a principal security consultant with more than 25 years of industry experience, specializing in Microsoft Azure architecture, security and automation. He is a published author and journalist, as well as a former Microsoft MVP and a current Microsoft Certified Trainer.&lt;/i&gt;&lt;/p&gt;
&lt;/section&gt;</body>
            <description>Get familiar with Microsoft's ready-to-deploy environment that simulates real scenarios to help admins to learn hybrid cloud management through the company's Azure Arc tool.</description>
            <image>https://cdn.ttgtmedia.com/rms/onlineimages/keyboard_g1253608928.jpg</image>
            <link>https://www.techtarget.com/searchwindowsserver/tip/How-to-work-with-Jumpstart-ArcBox-for-IT-Pros</link>
            <pubDate>Fri, 12 Sep 2025 08:19:00 GMT</pubDate>
            <title>How to work with Jumpstart ArcBox for IT Pros</title>
        </item>
        <item>
            <body>&lt;p&gt;Linux administrators often juggle several responsibilities, such as maintaining connections to multiple servers to manage services, &lt;a href="https://www.techtarget.com/searchcio/feature/Replacing-vs-maintaining-legacy-systems"&gt;maintaining software&lt;/a&gt;, updating configurations and reviewing log files. Instead of repeatedly establishing and closing connections, it's easier and more time-efficient to establish multiple terminals from a single workstation's shell.&lt;/p&gt; 
&lt;p&gt;The terminal multiplexer (tmux) application enables administrators to connect and disconnect from multiple sessions without closing terminals, which would exit the processes running in them.&lt;/p&gt; 
&lt;p&gt;This article gets administrators started with tmux. It covers the installation process, basic usage, configuration options and the essential key bindings that make tmux such a useful tool.&lt;/p&gt; 
&lt;section class="section main-article-chapter" data-menu-title="Primary benefits and features of tmux"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Primary benefits and features of tmux&lt;/h2&gt;
 &lt;p&gt;There are several primary benefits to integrating tmux into a standard Linux system administration workflow. These benefits include:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Maintaining persistent sessions that run after disconnecting, enabling long-running tasks such as software compilation or script execution to continue.&lt;/li&gt; 
  &lt;li&gt;Providing vertical and horizontal split-screen panes for viewing multiple sessions in the local shell.&lt;/li&gt; 
  &lt;li&gt;Enabling key bindings for efficient task switching.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;Most administrators establish an SSH connection and then run tmux. SSH provides security, and tmux offers flexibility.&lt;/p&gt;
 &lt;p&gt;In addition to persistent sessions, tmux enables many other use cases, such as:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Splitting terminal windows into multiple panes to run several applications simultaneously, such as system administration tasks and Python development.&lt;/li&gt; 
  &lt;li&gt;Connecting multiple users to one session for collaboration, pair programming or troubleshooting.&lt;/li&gt; 
  &lt;li&gt;Conducting continuous monitoring of multiple systems, including various log files and services.&lt;/li&gt; 
 &lt;/ul&gt;
&lt;/section&gt;      
&lt;section class="section main-article-chapter" data-menu-title="How to install tmux"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;How to install tmux&lt;/h2&gt;
 &lt;p&gt;Tmux offers various installation options for Linux and macOS, since most current distributions do not typically include it. The installation process assumes the OS is using the &lt;a href="https://www.techtarget.com/searchITOperations/tip/How-to-use-Linux-package-managers"&gt;preferred package manager&lt;/a&gt;. Like many Linux applications, tmux is open source. Users can &lt;a href="https://github.com/tmux" target="_blank" rel="noopener"&gt;download the source code&lt;/a&gt; and compile the program themselves.&lt;/p&gt;
 &lt;h3&gt;Red Hat-based Linux distributions&lt;/h3&gt;
 &lt;p&gt;For distributions such as RHEL, Fedora, &lt;a href="https://www.techtarget.com/searchDataCenter/tip/Rocky-Linux-vs-AlmaLinux-Which-is-better"&gt;AlmaLinux and Rocky Linux&lt;/a&gt;, type:&lt;/p&gt;
 &lt;p&gt;&lt;span style="font-family: 'courier new', courier, monospace;"&gt;dnf install tmux&lt;/span&gt;&lt;/p&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/dnf-info-tmux-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/dnf-info-tmux-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/dnf-info-tmux-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/dnf-info-tmux-f.jpg 1280w" alt="Screenshot of tmux installation details on Fedora." data-credit="Damon Garn" height="178" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Details of a tmux package installed on Fedora system (version 3.3a, aarch64 architecture).
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;h3&gt;Debian-based distributions&lt;/h3&gt;
 &lt;p&gt;For Debian-based distributions, including Ubuntu and Linux Mint, type:&lt;/p&gt;
 &lt;p&gt;&lt;span style="font-family: 'courier new', courier, monospace;"&gt;apt install tmux&lt;/span&gt;&lt;/p&gt;
 &lt;h3&gt;macOS&lt;/h3&gt;
 &lt;p&gt;Mac users frequently rely on the Homebrew package manager. After &lt;a href="https://www.techtarget.com/searchVirtualDesktop/tip/How-to-install-Homebrew-on-macOS-for-software-distribution"&gt;installing Homebrew&lt;/a&gt;, run the following command to add tmux:&lt;/p&gt;
 &lt;p&gt;&lt;span style="font-family: 'courier new', courier, monospace;"&gt;brew install tmux&lt;/span&gt;&lt;/p&gt;
 &lt;h3&gt;Windows&lt;/h3&gt;
 &lt;p&gt;Windows users must rely on the Windows Subsystem for Linux (&lt;a href="https://www.techtarget.com/searchwindowsserver/definition/Microsoft-Windows-Subsystem-for-Linux"&gt;WSL&lt;/a&gt;). After installing WSL, use the &lt;span style="font-family: 'courier new', courier, monospace;"&gt;apt&lt;/span&gt; package manager to install tmux:&lt;/p&gt;
 &lt;p&gt;&lt;span style="font-family: 'courier new', courier, monospace;"&gt;apt install tmux&lt;/span&gt;&lt;/p&gt;
 &lt;p&gt;Users might also run tmux on OpenBSD, FreeBSD and NetBSD.&lt;/p&gt;
&lt;/section&gt;                
&lt;section class="section main-article-chapter" data-menu-title="How to perform basic actions in tmux"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;How to perform basic actions in tmux&lt;/h2&gt;
 &lt;p&gt;Run the application by typing the tmux command. Once it's running, use the &lt;b&gt;Ctrl+B&lt;/b&gt; combination to initiate commands. Pressing &lt;b&gt;Ctrl+B&lt;/b&gt; on a Linux system alerts tmux that the next key presses are commands for tmux itself.&lt;/p&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/tmux-greenbox-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/tmux-greenbox-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/tmux-greenbox-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/tmux-greenbox-f.jpg 1280w" alt="Screenshot of a new tmux session in the terminal." data-credit="Damon Garn" height="124" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;A tmux session with a status bar at the bottom that shows the active shell, host name and timestamp.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;p&gt;For example, disconnecting from a tmux session relies on the &lt;b&gt;d&lt;/b&gt; command. Make sure to press &lt;b&gt;Ctrl+B&lt;/b&gt; first, alerting tmux that the subsequent command -- the &lt;b&gt;D&lt;/b&gt; disconnect command -- applies to it.&lt;/p&gt;
 &lt;h3&gt;Start and detach from sessions&lt;/h3&gt;
 &lt;p&gt;Begin by starting a new tmux session. Give it a unique session name -- something descriptive. Once the session is running, it will continue executing scripts and commands after disconnecting from the session.&lt;/p&gt;
 &lt;p&gt;Create a new session named &lt;span style="font-family: 'courier new', courier, monospace;"&gt;backup-script&lt;/span&gt; by typing this command:&lt;/p&gt;
 &lt;p&gt;&lt;span style="font-family: 'courier new', courier, monospace;"&gt;tmux new -s backup-script&lt;/span&gt;&lt;/p&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/tmux-start-detach-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/tmux-start-detach-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/tmux-start-detach-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/tmux-start-detach-f.jpg 1280w" alt="Screenshot of starting, detaching from and listing tmux sessions." data-credit="Damon Garn" height="120" width="558"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Starting a session called backup-script, detaching from that session and listing running tmux sessions, including both the default session (0) and the new backup-script session.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;p&gt;After launching the tmux session, use SSH to connect to a remote system. For example, the command within the tmux window might resemble &lt;span style="font-family: 'courier new', courier, monospace;"&gt;ssh damon@192.168.2.200&lt;/span&gt;.&lt;/p&gt;
 &lt;p&gt;Use the SSH session to launch backup scripts, conduct sysadmin tasks or update software.&lt;/p&gt;
 &lt;p&gt;Detach from the tmux session by using the &lt;b&gt;D&lt;/b&gt; key. Don't forget to use &lt;b&gt;Ctrl+B&lt;/b&gt; to inform tmux that the next command applies to it.&lt;/p&gt;
 &lt;p&gt;&lt;b&gt;Ctrl+B&lt;/b&gt;&lt;/p&gt;
 &lt;p&gt;&lt;b&gt;D&lt;/b&gt;&lt;/p&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/detached-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/detached-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/detached-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/detached-f.jpg 1280w" alt="Screenshot of the user detaching from the default tmux session." data-credit="Damon Garn" height="122" width="559"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Detaching from the default tmux session after starting it.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;p&gt;&lt;/p&gt;
 &lt;h3&gt;Display existing sessions&lt;/h3&gt;
 &lt;p&gt;Display existing sessions by using the &lt;span style="font-family: 'courier new', courier, monospace;"&gt;tmux ls&lt;/span&gt; command, as seen below.&lt;/p&gt;
 &lt;p&gt;&lt;span style="font-family: 'courier new', courier, monospace;"&gt;tmux ls&lt;/span&gt;&lt;/p&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/tmux-ls-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/tmux-ls-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/tmux-ls-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/tmux-ls-f.jpg 1280w" alt="Screenshot of the user listing existing tmux sessions." data-credit="Damon Garn" height="121" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Displaying the existing tmux sessions including backup-script and 0.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;h3&gt;Reattach to sessions&lt;/h3&gt;
 &lt;p&gt;Reattach to a running session by using the &lt;span style="font-family: 'courier new', courier, monospace;"&gt;attach&lt;/span&gt; subcommand and specifying the session name.&lt;/p&gt;
 &lt;p&gt;&lt;span style="font-family: 'courier new', courier, monospace;"&gt;tmux attach -t backup-script&lt;/span&gt;&lt;/p&gt;
 &lt;p&gt;This example shows why descriptive names are important.&lt;/p&gt;
 &lt;h3&gt;Kill sessions&lt;/h3&gt;
 &lt;p&gt;Kill an existing session by using the following command:&lt;/p&gt;
 &lt;p&gt;&lt;span style="font-family: 'courier new', courier, monospace;"&gt;tmux kill-session -t backup-script&lt;/span&gt;&lt;/p&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/tmux-kill-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/tmux-kill-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/tmux-kill-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/tmux-kill-f.jpg 1280w" alt="Screenshot of the user killing the backup-script session, then listing remaining sessions." data-credit="Damon Garn" height="121" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Killing the backup-script session, then listing the existing sessions, which now only includes session 0.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
&lt;/section&gt;                            
&lt;section class="section main-article-chapter" data-menu-title="How to use copy mode in tmux"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;How to use copy mode in tmux&lt;/h2&gt;
 &lt;p&gt;The standard local command history feature within a Linux distribution might not work reliably with tmux. Instead, rely on tmux's own copy mode.&lt;/p&gt;
 &lt;p&gt;Copy mode lets the user select and copy commands from the terminal history and paste them into tmux panes.&lt;/p&gt;
 &lt;p&gt;The tmux copy mode process follows six steps.&lt;/p&gt;
 &lt;ol class="default-list"&gt; 
  &lt;li&gt;Press &lt;b&gt;Ctrl+B&lt;/b&gt; and then the &lt;b&gt;[&lt;/b&gt; key.&lt;/li&gt; 
  &lt;li&gt;Use navigation keys -- typically the arrow keys -- to move to the desired text.&lt;/li&gt; 
  &lt;li&gt;Press &lt;b&gt;Space&lt;/b&gt; to begin the text selection process.&lt;/li&gt; 
  &lt;li&gt;Use the navigation keys to select the text.&lt;/li&gt; 
  &lt;li&gt;Press &lt;b&gt;Enter&lt;/b&gt; after selecting the text.&lt;/li&gt; 
  &lt;li&gt;Paste the text using the &lt;b&gt;]&lt;/b&gt; key.&lt;/li&gt; 
 &lt;/ol&gt;
&lt;/section&gt;     
&lt;section class="section main-article-chapter" data-menu-title="Quick reference guide of tmux key bindings"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Quick reference guide of tmux key bindings&lt;/h2&gt;
 &lt;p&gt;Use the following quick reference list to take advantage of the available key bindings.&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;&lt;b&gt;Ctrl+B C&lt;/b&gt;. Create a new window.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Ctrl+B N&lt;/b&gt;. Switch to the next window.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Ctrl+B P&lt;/b&gt;. Switch to the previous window.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Ctrl+B W&lt;/b&gt;. List all windows to select one.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Ctrl+B %&lt;/b&gt;. Split the current pane vertically.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Ctrl+B "&lt;/b&gt;. Split the current pane horizontally.&lt;/li&gt; 
  &lt;li&gt;&lt;b&gt;Ctrl+B D&lt;/b&gt;. Detach from the current session.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/multiple-windows-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/multiple-windows-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/multiple-windows-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/multiple-windows-f.jpg 1280w" alt="Screenshot displaying multiple windows in a tmux session." data-credit="Damon Garn" height="249" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Displaying one tmux session split both vertically and horizontally into multiple panes.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;p&gt;Tmux includes plenty of additional key bindings, but these are sufficient to get started.&lt;/p&gt;
&lt;/section&gt;     
&lt;section class="section main-article-chapter" data-menu-title="Basic customization options"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Basic customization options&lt;/h2&gt;
 &lt;p&gt;Tmux relies on the &lt;span style="font-family: 'courier new', courier, monospace;"&gt;~/.tmux.conf &lt;/span&gt;file. Because it's stored in the user's home folder, it is not a global configuration, enabling administrators to customize tmux to their own preferences. Tmux doesn't create the file automatically, although it does check for it when launched. Users must create the file and add customizations if they want to personalize tmux.&lt;/p&gt;
 &lt;p&gt;Some common configuration options include:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Adjusting the tmux prefix command from the &lt;b&gt;Ctrl+B&lt;/b&gt; default to &lt;b&gt;Ctrl+A&lt;/b&gt; or similar.&lt;/li&gt; 
  &lt;li&gt;Enabling status bar colors, borders and styles for easier pane identification.&lt;/li&gt; 
  &lt;li&gt;Configuring custom key bindings.&lt;/li&gt; 
  &lt;li&gt;Automatically running specific commands, scripts or programs upon starting a new tmux session.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;Advanced users &lt;a target="_blank" href="https://github.com/tmux-plugins/tpm" rel="noopener"&gt;can add&lt;/a&gt; the Tmux Plugin Manager to their system. This utility enables many additional customizations using community-developed plugins.&lt;/p&gt;
&lt;/section&gt;     
&lt;section class="section main-article-chapter" data-menu-title="Using tmux with SSH"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Using tmux with SSH&lt;/h2&gt;
 &lt;p&gt;SSH provides a critical method of securely connecting to remote systems. Tmux extends its flexibility by enabling multiple running remote sessions. Users can reattach to these sessions later, and they can even reattach from different systems. As an example, this makes it possible to execute a program on a remote server from a workstation at an office and then verify its status from a home computer.&lt;/p&gt;
 &lt;p&gt;&lt;i&gt;Damon Garn owns Cogspinner Coaction and provides freelance IT writing and editing services. He has written multiple CompTIA study guides, including the Linux+, Cloud Essentials+ and Server+ guides, and contributes extensively to Informa TechTarget, The New Stack and CompTIA Blogs.&lt;/i&gt;&lt;/p&gt;
&lt;/section&gt;</body>
            <description>Learn the basics of using the terminal multiplexer (tmux) for managing remote connections. Walk through the installation process and configuration options for tmux.</description>
            <image>https://cdn.ttgtmedia.com/rms/onlineimages/code_g684641103.jpg</image>
            <link>https://www.techtarget.com/searchsoftwarequality/tip/How-to-use-tmux-sessions-to-manage-remote-connections</link>
            <pubDate>Wed, 10 Sep 2025 13:53:00 GMT</pubDate>
            <title>How to use tmux sessions to manage remote connections</title>
        </item>
        <item>
            <body>&lt;p&gt;As the hybrid cloud landscape continues to evolve, Microsoft's Azure Arc offers a different yet familiar approach to manage your Hyper-V infrastructure.&lt;/p&gt; 
&lt;p&gt;Most experienced Hyper-V admins are well-versed with a wide range of virtualization management tools: from a full-blown System Center Virtual Machine Manager (SCVMM) platform to Windows Admin Center to the humble Hyper-V Manager or just PowerShell. Whatever your preference, you've likely recognized there are multiple avenues for both Hyper-V host administration and VM workload management. Microsoft's push towards hybrid management for on-premises workloads includes another option to consider: Azure Arc. At its simplest, Azure Arc is a platform to connect your on-premises workloads and &lt;a href="https://www.techtarget.com/searchwindowsserver/feature/Azure-Local-aims-to-answer-shifting-needs-of-the-enterprise"&gt;integrate them with Microsoft Azure&lt;/a&gt;, either directly using a locally installed agent or via a dedicated Arc Gateway. This article will step through how to use the Azure Arc agent to onboard a single Hyper-V host and work with VM workloads.&lt;/p&gt; 
&lt;section class="section main-article-chapter" data-menu-title="How to get started with Azure Arc"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;How to get started with Azure Arc&lt;/h2&gt;
 &lt;p&gt;Azure Arc is not a replacement Hyper-V management platform but rather a complementary one to existing administrative tools and processes. Azure Arc centralizes the management of disparate on-premises systems and gives those systems a way to consume Azure-native services, such as Azure Monitor, Azure Storage, &lt;a href="https://www.techtarget.com/searchcloudcomputing/tip/Protect-data-with-these-Azure-Key-Vault-best-practices"&gt;Azure Key Vault&lt;/a&gt; and Microsoft Defender for Cloud. It also presents a different approach to traditional management approaches.&lt;/p&gt;
 &lt;p&gt;To start, you need an Azure subscription. The good thing is that there's essentially no requirement regarding the type needed; you can use a DevTest, Visual Studio or free subscription to test Azure Arc onboarding. You must register the following resource providers to ensure the subscription can support Arc-enabled servers:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Microsoft.HybridCompute&lt;/li&gt; 
  &lt;li&gt;Microsoft.GuestConfiguration&lt;/li&gt; 
  &lt;li&gt;Microsoft.HybridConnectivity&lt;/li&gt; 
  &lt;li&gt;Microsoft.AzureArcData&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;If you're using Azure PowerShell, you can check the provider status using the &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Get-AzResourceProvider cmdlet&lt;/span&gt;, for example:&lt;/p&gt;
 &lt;p&gt;&lt;span style="font-family: 'courier new', courier, monospace;"&gt;Get-AzResourceProvider -ProviderNamespace Microsoft.HybridCompute&lt;/span&gt;&lt;/p&gt;
 &lt;p&gt;And then use the &lt;span style="font-family: 'courier new', courier, monospace;"&gt;Register-AzResourceProvider&lt;/span&gt; cmdlet, for example:&lt;/p&gt;
 &lt;p&gt;&lt;span style="font-family: 'courier new', courier, monospace;"&gt;Register-AzResourceProvider -ProviderNamespace Microsoft.HybridCompute&lt;/span&gt;&lt;/p&gt;
 &lt;p&gt;There's additional information as well as a full list of commands for both Azure PowerShell and Azure CLI on the Microsoft Learn &lt;a target="_blank" href="https://learn.microsoft.com/en-us/azure/azure-arc/servers/prerequisites#azure-resource-providers" rel="noopener"&gt;site&lt;/a&gt;.&lt;/p&gt;
 &lt;p&gt;In the Microsoft Entra ID tenant associated with your subscription, you need the following built-in roles assigned to your account:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;Azure Connected Machine Onboarding for the Resource Group where you plan to onboard the Hyper-V system (a Contributor or higher role will also work)&lt;/li&gt; 
  &lt;li&gt;Azure Connected Machine Resource Administrator role in the Resource Group to work with an onboarded machine&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;Lastly, verify the chose Azure region supports Arc-enabled servers. Use Microsoft's Product Availability by Region &lt;a target="_blank" href="https://azure.microsoft.com/en-GB/explore/global-infrastructure/products-by-region/table" rel="noopener"&gt;website&lt;/a&gt;, filter on &lt;b&gt;Azure Arc-enabled servers&lt;/b&gt; and search for your preferred location in the list of regions.&lt;/p&gt;
 &lt;p&gt;The next step is to make sure the Hyper-V system is ready. At the time of writing, every version of Windows Server from 2012 &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/Learn-how-the-Windows-Server-2025-editions-differ"&gt;through Windows Server 2025&lt;/a&gt; is fully supported as an Arc-enabled server, including both full desktop and Server Core installations. This tutorial uses an installation script locally on the server, which requires local administrator rights. The Hyper-V host must be able to connect to the internet via port 443 (HTTPS) either directly or using a proxy server.&lt;/p&gt;
 &lt;p&gt;The Hyper-V host does not need to be bare metal; it can be a VM using nested virtualization. However, it shouldn't be an Azure VM, as VMs hosted on Azure have their own management capabilities.&lt;/p&gt;
&lt;/section&gt;              
&lt;section class="section main-article-chapter" data-menu-title="How to onboard a Hyper-V host to Azure Arc"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;How to onboard a Hyper-V host to Azure Arc&lt;/h2&gt;
 &lt;p&gt;There are several ways to onboard a new system to Azure Arc, but this walkthrough will demonstrate a simple GUI-based approach.&lt;/p&gt;
 &lt;ol class="default-list"&gt; 
  &lt;li&gt;From the Hyper-V host, log into the Azure portal and navigate to the &lt;b&gt;Azure Arc&lt;/b&gt; blade. This is the location to manage Arc-enabled systems and to onboard new ones. If the &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/How-to-manage-Windows-Server-in-an-air-gapped-environment"&gt;host runs Server Core&lt;/a&gt;, then you'll need to do this from any system with a browser.&lt;/li&gt; 
  &lt;li&gt;Expand &lt;b&gt;Azure Arc resources&lt;/b&gt; and select &lt;b&gt;Machines&lt;/b&gt;. This is where any Arc-enabled systems will appear, and where you can launch administrative tasks.&lt;/li&gt; 
  &lt;li&gt;Select &lt;b&gt;Add/Create &lt;/b&gt;and then &lt;b&gt;Add a machine&lt;/b&gt;. This page presents a range of options for performing ad-hoc onboarding of systems into Azure. One of the most common is to generate an installation script via the &lt;b&gt;Add a single server&lt;/b&gt; option, but in this example we'll use &lt;b&gt;Add Windows Server with installer&lt;/b&gt;, which lets you download the installation executable directly. &lt;br&gt;&lt;br&gt;The following &lt;a target="_blank" href="https://aka.ms/arcsetup" rel="noopener"&gt;link&lt;/a&gt; has the executable you can download without logging into the Azure portal. Windows Server 2022 and later versions come with this package, so you can trigger the onboarding directly. Onboarding Server Core systems require the installation script option.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;ol start="4" class="default-list"&gt; 
  &lt;li&gt;Launch the executable and click &lt;b&gt;Next&lt;/b&gt;. The installer will check the system, software and network requirements, and will then install and configure the Azure Connected Machine agent. The agent will set up the Azure Hybrid Instance Metadata Service, which runs as a virtual account (NT SERVICE\himds). This account needs rights to log on as a service, but the agent installation will take care of that automatically.&lt;/li&gt; 
  &lt;li&gt;Select &lt;b&gt;Configure&lt;/b&gt; to connect the Arc agent to your Azure subscription. Sign in to Azure to configure the agent. This is a one-time process; the credentials are not stored or used by the agent after onboarding.&lt;/li&gt; 
  &lt;li&gt;At the prompt, configure the environment details indicating where to onboard the local Hyper-V server, including the tenant, subscription, resource group and Azure region. If you have access to multiple tenants and subscriptions, then you'll need to select the right ones. The onboarding region doesn't need to match the resource group's region. If your system needs a proxy server to connect to the internet, enter those details.&lt;/li&gt; 
  &lt;li&gt;Click &lt;b&gt;Next&lt;/b&gt; and your system will be onboarded to Azure Arc. To verify it worked, go back to the Azure portal and refresh the &lt;b&gt;Azure Arc resources&amp;gt;Machines&lt;/b&gt; page to see the newly onboarded Hyper-V server.&lt;/li&gt; 
 &lt;/ol&gt;
&lt;/section&gt;    
&lt;section class="section main-article-chapter" data-menu-title="How to connect additional workloads to Azure Arc"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;How to connect additional workloads to Azure Arc&lt;/h2&gt;
 &lt;p&gt;After onboarding the Hyper-V host to Azure Arc, you can also add the VMs running on the host. A simple approach is to just repeat the steps in the previous section on each VM -- download the executable or generate an installation script -- but that is not efficient. Let's try something a bit neater by &lt;a href="https://www.techtarget.com/searchwindowsserver/feature/Got-infrastructure-needs-These-PowerShell-tutorials-can-help"&gt;using PowerShell Direct&lt;/a&gt; to onboard VMs to Azure Arc. PowerShell Direct provides the ability to run PowerShell commands and scripts on Windows-based Hyper-V VMs via the host VMBus.&lt;/p&gt;
 &lt;ol class="default-list"&gt; 
  &lt;li&gt;In the Azure Arc machine page in the Azure portal, select &lt;b&gt;Add/Create&lt;/b&gt; and then &lt;b&gt;Generate script&lt;/b&gt; under &lt;b&gt;Add a single server&lt;/b&gt;.&lt;/li&gt; 
  &lt;li&gt;Select the correct options for subscription, resource group and region. Select &lt;b&gt;Windows&lt;/b&gt; as the operating system and optionally untick &lt;b&gt;Connect SQL Server&lt;/b&gt;.&lt;/li&gt; 
  &lt;li&gt;Click through to the last page to see the resulting PowerShell script. Either download the script or copy the contents to a new file on your Hyper-V server, for example &lt;b&gt;C:\Users\Administrator\OnBoardingScript.ps1&lt;/b&gt;.&lt;/li&gt; 
  &lt;li&gt;On the Hyper-V host, open PowerShell and enter the following commands:&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;p&gt;&lt;span style="font-family: 'courier new', courier, monospace;"&gt;$credential = Get-Credential #Enter the local username/password for the remote VM)&lt;/span&gt;&lt;/p&gt;
 &lt;p&gt;&lt;span style="font-family: 'courier new', courier, monospace;"&gt;Invoke-Command -Credential $credential -VMName &amp;lt;VMNAME&amp;gt; -FilePath C:\Users\Administrator\OnBoardingScript.ps1&lt;/span&gt;&lt;/p&gt;
 &lt;ol start="5" class="default-list"&gt; 
  &lt;li&gt;The script will execute on the remote Windows VM: downloading and installing the Azure Connected Machine agent, and registering the system in the correct tenant and subscription. Once it's complete, refresh the &lt;b&gt;Machines&lt;/b&gt; page in the Azure portal to see the newly onboarded Hyper-V VM.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;p&gt;This approach won't work with Linux VMs; PowerShell Direct isn't supported on Linux. Hyper-V's command-line tool &lt;b&gt;hvc&lt;/b&gt; enables a connection to any VM using the VMBus, including Linux. Use the &lt;b&gt;hvc ssh username@vmname &lt;/b&gt;command to&lt;b&gt; &lt;/b&gt;SSH directly from the Hyper-V host to the Linux VM, assuming &lt;a href="https://www.techtarget.com/searchwindowsserver/tutorial/PowerShell-7-remoting-expands-management-horizons"&gt;SSH has been set up correctly&lt;/a&gt;, to execute the onboarding shell script for Linux.&lt;/p&gt;
&lt;/section&gt;       
&lt;section class="section main-article-chapter" data-menu-title="Using remote PowerShell via Azure Arc for VM management"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Using remote PowerShell via Azure Arc for VM management&lt;/h2&gt;
 &lt;p&gt;After onboarding the Hyper-V host to Azure Arc, it's now possible to remotely administer via the Azure Arc management plane from virtually any system. For example, I am using a separate Ubuntu Linux system which has PowerShell and the &lt;a href="https://www.techtarget.com/searchwindowsserver/tutorial/Using-PowerShell-for-Azure-service-principal-authentication"&gt;Azure PowerShell modules installed&lt;/a&gt;. I've logged in using the &lt;b&gt;Login-AzAccount &lt;/b&gt;command.&lt;/p&gt;
 &lt;ol class="default-list"&gt; 
  &lt;li&gt;Retrieve a list of Arc-connected systems with the &lt;b&gt;Get-AzConnectedMachine&lt;/b&gt; cmdlet to see the onboarded Hyper-V host.&lt;/li&gt; 
  &lt;li&gt;Next, we'll create an empty text file on the Hyper-V host via Arc, using the &lt;b&gt;New-AzConnectedMachineRunCommand&lt;/b&gt; cmdlet:&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;p&gt;&lt;span style="font-family: 'courier new', courier, monospace;"&gt;New-AzConnectedMachineCommand -ResourceGroupName &amp;lt;RGNAME&amp;gt; -Location &amp;lt;REGION&amp;gt; -MachineName &amp;lt;NAME&amp;gt; -RunCommandName "TestFile" -SourceScript "New-Item -Type File -Path 'C:\Windows\Temp' -Name test.txt"&lt;/span&gt;&lt;/p&gt;
 &lt;ol start="3" class="default-list"&gt; 
  &lt;li&gt;Log in to the Hyper-V system and check the &lt;b&gt;C:\Windows\Temp&lt;/b&gt; folder for the &lt;b&gt;test.txt&lt;/b&gt; file.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;p&gt;Running the &lt;b&gt;New-AzConnectedMachineRunCommand&lt;/b&gt; cmdlet from my Linux system, I used my Azure credentials to execute a command against the Hyper-V system using the registered Arc agent. My Linux system isn't talking directly to the Hyper-V system -- Azure Arc acts as the centralized management platform which links both systems.&lt;/p&gt;
 &lt;p&gt;Using this method, it's straightforward to execute PowerShell commands directly on the Hyper-V host and by using the &lt;b&gt;New-VM&lt;/b&gt;, &lt;b&gt;Get-VM &lt;/b&gt;and &lt;b&gt;Set-VM&lt;/b&gt; cmdlets. It's easy to provision and manage Hyper-V VMs via Azure Arc. However, let's extend Arc's capabilities and enhance our management options with the Windows Admin Center.&lt;/p&gt;
&lt;/section&gt;       
&lt;section class="section main-article-chapter" data-menu-title="Provisioning new VMs with the Windows Admin Center in Azure Arc"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Provisioning new VMs with the Windows Admin Center in Azure Arc&lt;/h2&gt;
 &lt;p&gt;The &lt;a href="https://www.techtarget.com/searchwindowsserver/definition/Microsoft-Project-Honolulu"&gt;Windows Admin Center&lt;/a&gt; offers an on-premises, centralized method to manage multiple systems, including Hyper-V hosts. When integrated with Azure Arc, you can access Windows Admin Center directly through the Azure portal without requiring VPN or direct private connectivity. The integration only requires outbound communication from the target system via port 443, with no inbound access or port forwarding needed.&lt;/p&gt;
 &lt;p&gt;Unlike installing the Arc agent, using Windows Admin Center in Azure Arc requires specific licensing. The Windows Server license must either come from Software Assurance or &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/Understand-how-Windows-Server-2025-PAYG-licensing-works"&gt;from pay-as-you-go via Microsoft Azure.&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;To set up Windows Admin Center integration, do the following:&lt;/p&gt;
 &lt;ol class="default-list"&gt; 
  &lt;li&gt;In the &lt;b&gt;Azure Arc &lt;/b&gt;blade in the portal, navigate to the Hyper-V host which you onboarded earlier, and navigate to &lt;b&gt;Licenses&lt;/b&gt; and &lt;b&gt;Windows Server&lt;/b&gt;.&lt;/li&gt; 
  &lt;li&gt;Azure Arc will show the system's license details, activation status and the Arc agent status. If you're using an &lt;a href="https://www.techtarget.com/searchwindowsserver/tutorial/Activate-Windows-Server-2019-with-KMS-or-the-command-line"&gt;on-premises licensing model, such as multiple activation key (MAK),&lt;/a&gt; then Azure will not know if the system is covered with Software Assurance. You will have to manually confirm this by clicking the checkbox next to &lt;b&gt;Activate Azure benefits&lt;/b&gt;.&lt;/li&gt; 
  &lt;li&gt;Navigate to &lt;b&gt;Windows management&lt;/b&gt; and go to &lt;b&gt;Windows Admin Center&lt;/b&gt;.&lt;/li&gt; 
  &lt;li&gt;Select &lt;b&gt;Set up&lt;/b&gt; and the system will prompt you to choose a network port for the remote system to listen on. You can change the default port if necessary.&lt;/li&gt; 
  &lt;li&gt;Click &lt;b&gt;Install&lt;/b&gt; to install the &lt;b&gt;AdminCenter&lt;/b&gt; extension on the Hyper-V host. Extensions for Arc-enabled systems function in essentially the same manner as Azure VM extensions, providing discrete applications that bring additional functionality, such as monitoring or Entra-integrated authentication. To see the progress of the installation, navigate to &lt;b&gt;Settings&lt;/b&gt; and select &lt;b&gt;Extensions&lt;/b&gt;.&lt;/li&gt; 
  &lt;li&gt;After the extension installs, navigate back to &lt;b&gt;Windows Admin Center&lt;/b&gt;. The UI should show &lt;b&gt;Connect &lt;/b&gt;rather than &lt;b&gt;Set up&lt;/b&gt;. Click &lt;b&gt;Connect&lt;/b&gt; to establish connectivity to Windows Admin Center on the Hyper-V host.&lt;/li&gt; 
 &lt;/ol&gt;
 &lt;p&gt;&lt;b&gt;Note:&lt;/b&gt; At the time of writing, only Chromium-based browsers, such as Microsoft Edge will work to connect to Windows Admin Center via Azure Arc. Non-Chromium browsers, such as Firefox don't work, even though you can use them to navigate the Azure portal.&lt;/p&gt;
 &lt;p&gt;Under &lt;b&gt;Tools&lt;/b&gt;, you will find multiple Windows Server features now exposed directly in the Azure portal, including &lt;b&gt;Firewall&lt;/b&gt;, &lt;b&gt;Installed Apps&lt;/b&gt;, &lt;b&gt;Remote Desktop&lt;/b&gt;, &lt;b&gt;Virtual Machines&lt;/b&gt; and &lt;b&gt;Virtual Switches&lt;/b&gt;.&lt;/p&gt;
 &lt;p&gt;Select &lt;b&gt;Virtual Machines&lt;/b&gt; to see all the VMs currently configured on the Hyper-V host. Through this interface, you can perform almost the same administrative functions as you can when logged in locally to the server, including:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;creating and deleting VMs,&lt;/li&gt; 
  &lt;li&gt;modifying the configuration of existing VMs, and&lt;/li&gt; 
  &lt;li&gt;managing the host's virtual networks and Hyper-V settings.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;Some operations remain local to the Hyper-V host, such as the location of files and folders for VM storage, and access to ISOs for operating system installation.&lt;/p&gt;
 &lt;p&gt;Navigate to the &lt;b&gt;Remote Desktop&lt;/b&gt; blade for work that requires you to interact locally with the Hyper-V host. Remote Desktop enabled on the remote system allows you to open a secure session directly to the host as if it were a local connection.&lt;/p&gt;
 &lt;p&gt;This feature also extends to the VMs. Navigate back to &lt;b&gt;Virtual Machines&lt;/b&gt; and select one of the running Windows VMs. Select &lt;b&gt;Connect&lt;/b&gt; and then &lt;b&gt;Connect&lt;/b&gt; again from the drop-down. Enter the credentials for the Hyper-V host (not the VM) to establish a Remote Desktop session to the VM via the Hyper-V host to interact directly with the VM without needing:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;a private network connection,&lt;/li&gt; 
  &lt;li&gt;enabling Remote Desktop on the VM, or&lt;/li&gt; 
  &lt;li&gt;onboarding the VM via Azure Arc.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;Finally, select the &lt;b&gt;PowerShell&lt;/b&gt; blade to open a remote interactive PowerShell session to the Hyper-V host and run any local PowerShell commands or scripts directly on the host, including the Azure Arc onboarding scripts.&lt;/p&gt;
 &lt;p&gt;&lt;i&gt;James Bannan is a principal security consultant with more than 25 years of industry experience, specializing in Microsoft Azure architecture, security and automation. He is a published author and journalist, as well as a former Microsoft MVP and a current Microsoft Certified Trainer.&lt;/i&gt;&lt;/p&gt;
&lt;/section&gt;</body>
            <description>Azure Arc centralizes Hyper-V management via the Azure portal and enables remote administration from devices without requiring a VPN.</description>
            <image>https://cdn.ttgtmedia.com/rms/onlineimages/keyboard_g1077903946.jpg</image>
            <link>https://www.techtarget.com/searchwindowsserver/tip/Admins-guide-to-Azure-Arc-Hyper-V-management</link>
            <pubDate>Thu, 04 Sep 2025 08:51:00 GMT</pubDate>
            <title>Admin's guide to Azure Arc Hyper-V management</title>
        </item>
        <item>
            <body>&lt;p&gt;Following the WSUS deprecation notice, enterprises that have yet to shift their patch management process will want to take a closer look at alternatives, such as the Azure Arc and the Azure Update Manager service.&lt;/p&gt; 
&lt;p&gt;Patch management is a critical task to keep Windows Server environments secure, stable and performant. In September 2024, Microsoft signaled to customers that it will &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/The-Microsoft-patch-management-guide-for-admins"&gt;no longer add new features to Windows Server Update Services (WSUS)&lt;/a&gt; and recommended exploring other avenues. Microsoft offers several options to keep Windows Server up to date with the latest software. One tool that has been gaining traction since its introduction in November 2019 is Azure Arc, a tool for admins to manage on-premises and cloud infrastructure via the Azure control plane. Azure Arc also extends Azure services, such as Azure Monitor and Azure Policy, to Windows Server workloads in the data center. This tutorial will cover the Azure Arc setup process and run through the &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/How-to-use-Windows-Server-2025-hotpatching"&gt;patch deployment of an on-premises server&lt;/a&gt;.&lt;/p&gt; 
&lt;section class="section main-article-chapter" data-menu-title="Why Azure Arc is an effective tool for patching"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;Why Azure Arc is an effective tool for patching&lt;/h2&gt;
 &lt;p&gt;Larger organizations often rely on either WSUS or on a third-party patch management tool. These utilities can scale to handle many servers, while also providing rich reporting capabilities to help organizations assess their patch management status.&lt;/p&gt;
 &lt;p&gt;Although WSUS does a good job of keeping Windows machines up to date with the latest fixes, it is primarily designed for on-premises patch management. Companies that host workloads both on premises and in the Azure cloud might use a patch management tool in their data center and another within Azure. However, there is a convenient way to use the Azure Update Manager to handle patch management both in the cloud and on-premises.&lt;/p&gt;
 &lt;p&gt;The key to using Azure Arc with on-premises servers is to "Arc-enable" the servers, as Microsoft calls it. Azure Arc is a service designed to manage physical servers and VMs both on-premises and in Azure and other clouds. Azure Arc can also &lt;a href="https://www.techtarget.com/searchitoperations/tutorial/Manage-Kubernetes-clusters-with-PowerShell-and-kubectl"&gt;handle Kubernetes clusters&lt;/a&gt; and databases.&lt;/p&gt;
 &lt;p&gt;Arc-enabling a server or VM just requires installing the Azure Connected Machine agent onto the server. There's no need to set up a VPN or establish direct connectivity to Azure, as long as the machine has Internet access.&lt;/p&gt;
 &lt;p&gt;Microsoft makes the Azure Arc control plane available for free. This means that you can use Azure Arc to tag resources and to enable search and indexing for those resources. The free Azure Arc plan also lets you take advantage of &lt;a href="https://www.techtarget.com/searchsecurity/definition/role-based-access-control-RBAC"&gt;Role Based Access Control (RBAC)&lt;/a&gt; permissions and you can use templates to automate various tasks. If an organization is using VMware vCenter or System Center Virtual Machine Manager, then you can use the Azure Arc control plane to inventory your resources and to perform lifecycle management for your VMs. To use Azure Update Manager in Arc-enabled VMs costs $0.162 per server per day or $5 per server per month for months with 31 days.&lt;/p&gt;
 &lt;p&gt;Microsoft does not charge when a customer uses Azure Update Manager in the following scenarios:&lt;/p&gt;
 &lt;ul class="default-list"&gt; 
  &lt;li&gt;the Arc-enabled VM has Extended Security Updates (ESUs);&lt;/li&gt; 
  &lt;li&gt;the subscription that hosts the Arc-enabled VM also has Microsoft Defender for Servers Plan 2; or&lt;/li&gt; 
  &lt;li&gt;the Arc-enabled VM uses Windows Server licenses with either active Software Assurance license or &lt;a href="https://www.techtarget.com/searchwindowsserver/tip/Understand-how-Windows-Server-2025-PAYG-licensing-works"&gt;Windows Server pay-as-you-go&lt;/a&gt;.&lt;/li&gt; 
 &lt;/ul&gt;
 &lt;p&gt;While Microsoft allows free access to the Azure Arc control plane, any Azure cloud services exposed through SCVMM or VMware vCenter will incur standard Azure usage charges. The same holds true for Azure services consumed through Arc-enabled Kubernetes clusters. Microsoft also charges a fee for Extended Security Updates (ESUs) for legacy systems and using Azure Arc to manage SQL Server instances.&lt;/p&gt;
&lt;/section&gt;         
&lt;section class="section main-article-chapter" data-menu-title="How to connect Azure Arc to a server using the Azure portal"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;How to connect Azure Arc to a server using the Azure portal&lt;/h2&gt;
 &lt;p&gt;Configuring servers to use Azure Arc involves deploying the Azure Connected Machine agent to the VMs, using the Azure portal, &lt;a href="https://www.techtarget.com/searchcloudcomputing/tip/Evaluate-Azure-CLI-vs-PowerShell-for-resource-management"&gt;Azure CLI or PowerShell.&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;First, log in to the Azure portal and open the Azure Arc service. Click the &lt;b&gt;Add Resources&lt;/b&gt; button, then click on the &lt;b&gt;Add/Create&lt;/b&gt; button under the &lt;b&gt;Machines&lt;/b&gt; section. Choose the &lt;b&gt;Add a Machine&lt;/b&gt; option after the prompt to begin the onboarding process.&lt;/p&gt;
 &lt;p&gt;Next, the console will prompt to specify the type of resource to onboard. For the purposes of this article, choose &lt;b&gt;Add a Single Server with Installer&lt;/b&gt;. (Azure Arc also provides options to onboard multiple servers at once, including Linux VMs.) Azure Arc will download an installer file in your browser. Copy the installer file to the server you want to manage with Azure Arc.&lt;/p&gt;
 &lt;p&gt;Next, go to the VM to manage and launch the executable. The installer will start a wizard for the installation process, which will require signing into Azure and choosing the subscription. When complete, Azure Arc can now manage the VM via the Azure Connected Machine agent.&lt;/p&gt;
&lt;/section&gt;     
&lt;section class="section main-article-chapter" data-menu-title="How to manage patches for Arc-enabled servers"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;How to manage patches for Arc-enabled servers&lt;/h2&gt;
 &lt;p&gt;After onboarding the server to Azure Arc, configure that server to receive updates. Start by opening the Azure Update Manager service in the Azure portal, then select the &lt;b&gt;Resources&lt;/b&gt; tab and click &lt;b&gt;Machines&lt;/b&gt;. The Arc-enabled server should be listed on the &lt;b&gt;Machines&lt;/b&gt; tab.&lt;/p&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/posey_azurearc_1-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/posey_azurearc_1-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/posey_azurearc_1-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/posey_azurearc_1-f.jpg 1280w" alt="A menu showing the Machines page in Azure Update Manager." height="163" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;After adding the server to Azure Arc, it should be listed on the Machines page.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
 &lt;p&gt;The screenshot shows a console message that "1 out of 1 machine(s) don't have update data." To enable automatic updates for the machine, click the &lt;b&gt;Enable Now&lt;/b&gt; link located at the end of the message. Alternatively, click the &lt;b&gt;Check for Updates&lt;/b&gt; button to start an immediate update check for the VM.&lt;/p&gt;
 &lt;p&gt;After the update assessment, the Azure Update Manager dashboard may show a message about pending updates. Click the message to see the results. The options are to either install the updates immediately or &lt;a href="https://www.techtarget.com/searchenterprisedesktop/tip/Creating-a-patch-management-policy-Step-by-step-guide"&gt;schedule them during a maintenance window&lt;/a&gt;. Note that there might be delays when forcing an immediate update. During testing, it took 30 minutes from the start of the update until the dashboard updated the VM's status. IT administrators will need to account for this delay when verifying update compliance and to avoid unnecessary troubleshooting.&lt;/p&gt;
 &lt;figure class="main-article-image full-col" data-img-fullsize="https://www.techtarget.com/rms/onlineimages/posey_azurearc_2-f.jpg"&gt;
  &lt;img data-src="https://www.techtarget.com/rms/onlineimages/posey_azurearc_2-f_mobile.jpg" class="lazy" data-srcset="https://www.techtarget.com/rms/onlineimages/posey_azurearc_2-f_mobile.jpg 960w,https://www.techtarget.com/rms/onlineimages/posey_azurearc_2-f.jpg 1280w" alt="A menu in Azure Update Manager showing the recommended updates for the selected VM." height="215" width="560"&gt;
  &lt;figcaption&gt;
   &lt;i class="icon pictures" data-icon="z"&gt;&lt;/i&gt;Select the VM to see the available updates.
  &lt;/figcaption&gt;
  &lt;div class="main-article-image-enlarge"&gt;
   &lt;i class="icon" data-icon="w"&gt;&lt;/i&gt;
  &lt;/div&gt;
 &lt;/figure&gt;
&lt;/section&gt;      
&lt;section class="section main-article-chapter" data-menu-title="How to connect a server to Azure Arc with PowerShell"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;How to connect a server to Azure Arc with PowerShell&lt;/h2&gt;
 &lt;p&gt;Instead of the Azure portal, PowerShell is another option for admins who prefer this method. To start, install the &lt;b&gt;Az.ConnectedMachine&lt;/b&gt; module with this command:&lt;/p&gt;
 &lt;p&gt;&lt;span style="font-family: 'courier new', courier, monospace;"&gt;&lt;b&gt;Install-Module -Name Az.ConnectedMachine&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
 &lt;p&gt;Next, use the &lt;b&gt;Connect-AZAccount&lt;/b&gt; command to log into Azure. Lastly, install the Azure Connected Machine agent with this command:&lt;/p&gt;
 &lt;p&gt;&lt;span style="font-family: 'courier new', courier, monospace;"&gt;&lt;b&gt;Connect-AzConnectedMachine -ResourceGroupName myResourceGroup -Name myMachineName -Location &amp;lt;region&amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
 &lt;p&gt;The command downloads the Connected Machine agent, installs it on the server, creates the Azure Arc-enabled server resource and associates it with the agent. The onboarding process takes a few minutes to complete.&lt;/p&gt;
 &lt;p&gt;This concludes the setup necessary to use Azure Arc for patch management. However, for other tasks that require secure remote access, Azure Arc allows connections to Arc-enabled machines &lt;a href="https://www.techtarget.com/searchvirtualdesktop/tip/How-to-enable-RDP-remotely-with-several-different-methods"&gt;using Remote Desktop Protocol (RDP)&lt;/a&gt; and the Windows Admin Center extension in Azure or SSH with either Azure CLI or PowerShell.&lt;/p&gt;
&lt;/section&gt;       
&lt;section class="section main-article-chapter" data-menu-title="How to use the reporting feature in Azure Arc"&gt;
 &lt;h2 class="section-title"&gt;&lt;i class="icon" data-icon="1"&gt;&lt;/i&gt;How to use the reporting feature in Azure Arc&lt;/h2&gt;
 &lt;p&gt;While the Azure Update Manager dashboard provide information regarding the patch management status of Arc-enabled machines, Azure Arc can generate more detailed reports.&lt;/p&gt;
 &lt;p&gt;To start, expand the console's &lt;b&gt;Monitoring&lt;/b&gt; container and then click on the &lt;b&gt;Reports&lt;/b&gt; tab. Next, click on the &lt;b&gt;Overview&lt;/b&gt; report in the Azure Update Manager section.&lt;/p&gt;
 &lt;p&gt;At the &lt;b&gt;Reports&lt;/b&gt; screen, select the subscription from the menu. By default, the report will span the entire tenant, so it's helpful to filter by region, resource type and time range. You can save the report by clicking on the Save icon.&lt;/p&gt;
 &lt;p&gt;You can filter the report by location, resource type, or time range. Azure Workbooks connect to Azure Arc for even more granular &lt;a target="_blank" href="https://docs.azure.cn/en-us/update-manager/manage-workbooks" rel="noopener"&gt;information&lt;/a&gt; related to patching, including compliance status across the infrastructure, security update install success rates and update deployment history.&lt;/p&gt;
&lt;/section&gt;</body>
            <description>Admins should explore their patching options now that Microsoft deprecated WSUS. Azure Arc offers integration with Azure to give the operations team a unified management approach.</description>
            <image>https://cdn.ttgtmedia.com/rms/onlineimages/container_g1294273513.jpg</image>
            <link>https://www.techtarget.com/searchwindowsserver/tutorial/Azure-Arc-setup-tips-for-on-premises-server-management</link>
            <pubDate>Wed, 03 Sep 2025 13:34:00 GMT</pubDate>
            <title>Azure Arc setup tips for on-premises server management</title>
        </item>
        <title>SearchWindows Server Resources and Information from TechTarget</title>
        <ttl>60</ttl>
        <webMaster>webmaster@techtarget.com</webMaster>
    </channel>
</rss>
