如何将生成URL的PowerShell脚本转换为C#代码?
转换PowerShell AD用户信息收集脚本为C# EXE程序
我来帮你把这段PowerShell脚本转换成功能完整的C#程序,生成EXE后就能直接运行实现需求。下面是分步实现的思路和完整代码:
核心功能拆解
要实现你的需求,C#需要完成这几个关键步骤:
- 从Active Directory中获取当前登录用户的邮箱地址
- 获取本地计算机名称
- 构造符合要求的JSON参数并拼接成目标URL
- 调用默认浏览器打开该URL
完整C#代码示例
首先,确保你的项目引用了必要的依赖:
- 如果是.NET Framework:添加
System.DirectoryServices程序集引用 - 如果是.NET Core/.NET 6+:通过NuGet安装
System.DirectoryServices和System.Text.Json包
using System; using System.DirectoryServices; using System.Diagnostics; using System.Text.Json; namespace SupportTicketLauncher { class Program { static void Main(string[] args) { try { // 1. 获取当前登录用户的AD邮箱地址 string email = GetCurrentUserEmailFromAD(); if (string.IsNullOrEmpty(email)) { Console.WriteLine("无法从AD中获取用户邮箱地址"); Console.ReadLine(); return; } // 2. 获取本地计算机名称 string workstation = Environment.MachineName; // 3. 构造JSON参数并生成目标URL var ticketData = new Entry { CreateSupportTicket = new CreateSupportTicket { Workstation = workstation, YourEmail = email } }; string jsonPayload = JsonSerializer.Serialize(ticketData); string baseUrl = "https://www.cognitoforms.com/SupportRequestForm"; string finalUrl = $"{baseUrl}?entry={Uri.EscapeDataString(jsonPayload)}"; // 4. 启动默认浏览器打开URL Process.Start(new ProcessStartInfo(finalUrl) { UseShellExecute = true }); } catch (Exception ex) { Console.WriteLine($"程序运行出错: {ex.Message}"); Console.ReadLine(); // 暂停让用户查看错误信息 } } private static string GetCurrentUserEmailFromAD() { try { // 使用当前用户名查找AD用户的邮箱属性 string currentUsername = Environment.UserName; using var searcher = new DirectorySearcher( new DirectoryEntry(), $"sAMAccountName={currentUsername}", new[] { "mail" }); var searchResult = searcher.FindOne(); return searchResult?.Properties["mail"]?[0]?.ToString(); } catch (Exception ex) { Console.WriteLine($"查询AD邮箱时出错: {ex.Message}"); return null; } } // 用于序列化JSON的实体类 private class Entry { public CreateSupportTicket CreateSupportTicket { get; set; } } private class CreateSupportTicket { public string Workstation { get; set; } public string YourEmail { get; set; } } } }
代码说明
AD邮箱获取:
- 用
DirectorySearcher根据当前用户名查询AD中的mail属性,比执行whoami命令更原生可靠,避免依赖外部工具。 - 处理了查询失败的情况,返回null并提示错误。
- 用
JSON构造:
- 用强类型实体类配合
System.Text.Json序列化生成JSON,避免手动拼接字符串时的转义错误,尤其是当邮箱或计算机名包含特殊字符时更安全。 - 用
Uri.EscapeDataString对JSON payload进行URL编码,确保参数能正确传递到Cognito Forms。
- 用强类型实体类配合
浏览器启动:
- 使用
Process.Start配合ProcessStartInfo并设置UseShellExecute = true,兼容.NET Framework和.NET Core/.NET 6+环境,确保能打开默认浏览器。
- 使用
异常处理:
- 全局捕获异常并显示错误信息,避免程序闪退,方便调试。
生成EXE
- 如果用Visual Studio:选择Release模式,编译后在
bin/Release目录下就能找到生成的EXE文件。 - 如果用.NET CLI:执行
dotnet publish -c Release -r win-x64 --self-contained true(根据需要替换运行时标识),生成独立可执行文件。
内容的提问来源于stack exchange,提问作者Fred Barnes
相关产品推荐
相关产品推荐

