Friday, May 1, 2026

PowerShell Script to Check if Visual Studio 2022 Is Installed on Remote Servers


Managing multiple Windows servers can be challenging, especially when you need to verify whether specific software is installed across your environment. One common request in enterprise IT environments is checking whether Visual Studio 2022 is installed on remote servers.

Instead of manually logging into each machine, you can automate the process using PowerShell Remoting.

In this blog, I’ll show you a PowerShell script that connects to remote servers, checks for Visual Studio 2022, displays results on screen, and exports the report to CSV.


Why Use This Script?

This script helps system administrators and IT teams:

  • Audit software installations across multiple servers
  • Verify developer tools are installed where needed
  • Save time by avoiding manual checks
  • Generate reports for compliance or inventory purposes

PowerShell Script

# List of remote servers
$Servers = @("Server01","Server02","Server03")
# Output file $OutputFile = "C:\Temp\VS2022_Check_Report.csv" # Create results array $Results = @() foreach ($Server in $Servers) { Write-Host "Checking $Server ..." -ForegroundColor Cyan try { $Result = Invoke-Command -ComputerName $Server -ScriptBlock { # Search registry for Visual Studio 2022 $paths = @( "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*", "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" ) $vs = Get-ItemProperty $paths -ErrorAction SilentlyContinue | Where-Object { $_.DisplayName -match "Visual Studio" -and $_.DisplayName -match "2022" } | Select-Object -First 1 DisplayName, DisplayVersion if ($vs) { [PSCustomObject]@{ Installed = "Yes" Product = $vs.DisplayName Version = $vs.DisplayVersion } } else { [PSCustomObject]@{ Installed = "No" Product = "" Version = "" } } } $Results += [PSCustomObject]@{ Server = $Server Installed = $Result.Installed Product = $Result.Product Version = $Result.Version } } catch { $Results += [PSCustomObject]@{ Server = $Server Installed = "Connection Failed" Product = "" Version = "" } } } # Show output on screen $Results | Format-Table -AutoSize # Export CSV $Results | Export-Csv $OutputFile -NoTypeInformation Write-Host "`nReport saved to $OutputFile" -ForegroundColor Green

How This Script Works

1. Server List

Add all your remote servers inside the $Servers array.

$Servers = @("Server01","Server02","Server03")

2. Remote Connection

The script uses:

Invoke-Command

This runs commands remotely on each server using PowerShell Remoting.

3. Registry Search

It checks Windows uninstall registry paths:

  • 64-bit software path
  • 32-bit software path

Then searches for:

  • Visual Studio
  • 2022

4. Output Example

ServerInstalledProductVersion
Server01YesVisual Studio Professional 202217.8
Server02No
Server03Connection Failed

CSV Report Output

The script automatically creates:

C:\Temp\VS2022_Check_Report.csv

Useful for:

  • Audits
  • Asset management
  • Compliance reporting

Requirements

Before running:

Enable PowerShell Remoting

Run on remote servers:

Enable-PSRemoting -Force

Firewall Access

Ensure WinRM ports are open.

Permissions

Run the script using an account with admin rights on target servers.

Tuesday, January 20, 2026

JDE Sender Email Logic Explained: How JD Edwards Determines “From” Email Address


In JD Edwards EnterpriseOne (JDE), outbound emails are generated from different system components such as workflows, UBE reports, table triggers, business functions, and shortcuts. One common challenge for administrators and developers is understanding:

Which email address is used as the sender (“From”) based on functionality?

This blog breaks down the sender email hierarchy clearly so you can design, troubleshoot, and govern email behavior in JDE environments.

1. Workflow Email Sender

For JDE Workflow-generated emails, the system uses a fixed system email address.

Sender:

PSFT_SYSTEM@domainname.com

2. UBE (Universal Batch Engine) Email Sender

UBE email behavior is tied directly to the user running the report.

Sender:

User’s Who’s Who Email Address


3. Shortcut Email Sender

Shortcuts (menu-driven or fast path actions that trigger emails) follow a hierarchical fallback model.

Sender Hierarchy:

  1. Primary: User’s Who’s Who Email Address
  2. Fallback: PSFT_SYSTEM@domainname.com (if user email is not configured)

4. Table Trigger Email Sender

Table triggers fire automatically when database events occur (insert/update/delete).

Sender Hierarchy:

  1. Primary: User’s Who’s Who Email Address
  2. Fallback: PSFT_SYSTEM@domainname.com


5. Business Function Email Sender

Business Functions (BSFN) are custom or standard backend logic components in JDE.

Sender Hierarchy:

  1. Primary: User’s Who’s Who Email Address
  2. Fallback: PSFT_SYSTEM@domainname.com


SMTP Validation for JD Edwards (JDE) Using PowerShell


Email delivery is a critical part of JD Edwards EnterpriseOne (JDE) for workflows, UBE reports, notifications, and system alerts. When emails fail, the root cause is often SMTP configuration or network connectivity.

This blog provides a step-by-step SMTP validation approach using PowerShell and JDE configuration checks to ensure end-to-end email delivery is working correctly.

1. Verify SMTP Server Connectivity

Before checking JDE or email configuration, ensure the SMTP server is reachable from the Enterprise Server.

PowerShell Command:

Test-NetConnection smtp.server.com -Port 25

What This Checks:

  • Network connectivity to SMTP server
  • Port availability (typically 25, 587, or 465)
  • Basic firewall or routing issues

Expected Output:

  • TcpTestSucceeded : True → SMTP reachable
  • False → Network/firewall issue

2. JDE INI SMTP Configuration

JDE uses the Enterprise Server INI file to define email routing rules and system email identities.

Sample Configuration:

Rule1=90|OPT|MAILSERVER=smtp.server.com 

Rule2=100|DEFAULT|OWMON=OWMON@domain.com

Rule3=110|DEFAULT|PSFT_SYSTEM=PSFT_System@domain.com

Rule4=120|DEFAULT|JDE_SYSTEM=JDE_System@domain.com

Rule5=DEFAULT|WORKFLOW_SYSTEM=Workflow@domain.com

SMTPPort=25

Explanation:

SettingPurpose
MAILSERVERDefines SMTP host
SMTPPortSMTP port (usually 25)
OWMONSystem monitoring email
PSFT_SYSTEMDefault PeopleSoft/JDE system sender
JDE_SYSTEMJDE system-generated emails
WORKFLOW_SYSTEMWorkflow email sender

Key Insight:

These rules determine which sender email is used depending on functionality inside JDE.

3. PowerShell SMTP Email Test (Enterprise Server)

Once network and configuration are validated, test actual email delivery using PowerShell.

Script:

Send-MailMessage `
-From "JDE_System@domain.com" `
-To "xxxxxx@domain.com" `
-Subject "SMTP Test" `
-Body "This is a test email from JDE Enterprise Server" `
-SmtpServer smtp.server.com `
-Port 25

What This Validates:

  • SMTP authentication (if required)
  • Email relay permissions
  • Network path from Enterprise Server
  • Basic email delivery capability

If This Fails:

Check:

  • SMTP relay permissions
  • Firewall rules
  • Authentication requirements (anonymous relay vs credentials)
  • TLS requirements (port 587 instead of 25)

4. JDE Functional Email Validation

After SMTP validation, confirm JDE configuration and functional email behavior.

Step 1: Enable Email on Job Completion

Ensure the following INI setting is enabled:

  • “Send Email on Job Completion” option in UBE configuration

Step 2: Configure Who’s Who Email

In JDE:

  • Go to Address Book → Who’s Who
  • Add valid email address for user

Step 3: Assign Address Number

  • Ensure User Profile is linked to correct Address Number
  • Without this mapping, email routing may fail or fallback to system sender

Step 4: Run Test UBE

  • Execute a sample batch job (UBE)
  • Enable email notification on completion
  • Verify email delivery

6. Common Issues and Fixes

❌ Email Not Sending

  • SMTP server unreachable
    ✔ Fix: Check firewall / port 25 access

❌ Email Sent but From Address Wrong

  • Missing Who’s Who email
    ✔ Fix: Update Address Book email

❌ Emails Failing Only from JDE

  • INI misconfiguration
    ✔ Fix: Validate MAILSERVER and RULES

❌ UBE Email Not Triggering

  • Notification not enabled
    ✔ Fix: Enable “Send Email on Completion”

7. Best Practices

✔ Always use system sender fallback

Example:

✔ Standardize SMTP relay

  • Avoid multiple SMTP servers unless required

✔ Maintain Who’s Who emails

  • Critical for correct sender identity

✔ Monitor failed email logs

  • JDE logs + SMTP logs together provide full visibility

Final Thoughts

SMTP validation in JD Edwards is not just a network test—it is a three-layer validation process:

  1. Network layer (SMTP reachability)
  2. System layer (INI configuration)
  3. Application layer (JDE functional behavior)

Using PowerShell along with JDE configuration checks ensures end-to-end email reliability across workflows, UBEs, and system processes