.NET 8 Windows服务中如何获取EventViewer内的域名信息
获取Windows服务中EventViewer的Computer字段域名部分
可以通过以下几种方式获取目标域名值:
方法1:从计算机完全限定域名(FQDN)解析
Windows事件查看器里的Computer:字段对应计算机的完全限定域名(FQDN),获取FQDN后拆分出域名部分即可:
using System.Net; var fqdn = Dns.GetHostEntry(Dns.GetHostName()).HostName; // 拆分去掉主机名,保留域名部分 var domainPart = string.Join(".", fqdn.Split('.').Skip(1));
注:若计算机名本身包含点号(不符合规范但存在可能性),需额外校验拆分后的段数是否大于1。
方法2:通过Windows API直接获取DNS域名
使用GetComputerNameExAPI可直接获取DNS域名,无需额外拆分,准确性更高:
using System.Runtime.InteropServices; public static string GetDnsDomainName() { int bufferSize = 256; StringBuilder buffer = new StringBuilder(bufferSize); if (GetComputerNameEx(COMPUTER_NAME_FORMAT.ComputerNameDnsDomain, buffer, ref bufferSize)) { return buffer.ToString(); } throw new System.ComponentModel.Win32Exception(); } [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] private static extern bool GetComputerNameEx(COMPUTER_NAME_FORMAT NameType, StringBuilder lpBuffer, ref int lpnSize); private enum COMPUTER_NAME_FORMAT { ComputerNameNetBIOS, ComputerNameDnsHostname, ComputerNameDnsDomain, ComputerNameDnsFullyQualified, ComputerNamePhysicalNetBIOS, ComputerNamePhysicalDnsHostname, ComputerNamePhysicalDnsDomain, ComputerNamePhysicalDnsFullyQualified }
方法3:读取系统注册表项
从注册表中读取DNS域名信息,适合兼容旧系统的场景:
using Microsoft.Win32; using var registryKey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Services\Tcpip\Parameters"); var domainName = registryKey?.GetValue("Domain")?.ToString(); var dnsSuffix = registryKey?.GetValue("NV Domain")?.ToString(); // 优先取Domain值,为空则用DNS后缀 var targetDomain = string.IsNullOrEmpty(domainName) ? dnsSuffix : domainName;
内容的提问来源于stack exchange,提问作者RichJohnstone
相关产品推荐
相关产品推荐

