79475446

Date: 2025-02-28 12:02:05
Score: 0.5
Natty:
Report link

Thanks to Charlieface, I was able to create the following:

using System;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
using System.Collections.ObjectModel;

class Program
{
    static void Main()
    {
        string remoteMachine = "RemoteMachine"; 
        string username = "user";               
        string password = "password";               

        // WSMan connection info
        PSCredential credentials = new PSCredential(username, new System.Security.SecureString());
        foreach (char c in password) credentials.Password.AppendChar(c);

        WSManConnectionInfo connectionInfo = new WSManConnectionInfo(
            new Uri($"http://{remoteMachine}:5985/wsman"),
            "http://schemas.microsoft.com/powershell/Microsoft.PowerShell",
            credentials
        );
        // Create a runspace with the WSMan connection
        Runspace runspace = RunspaceFactory.CreateRunspace(connectionInfo);
        runspace.Open();

        // Create the pipeline to execute the PowerShell command
        using (PowerShell pipeline = PowerShell.Create())
        {
            // Command to execute remotely
            pipeline.Runspace = runspace;
            // Add the Get-NetIPConfiguration command to the pipeline
            pipeline.AddCommand("Get-NetIPConfiguration");
            pipeline.AddCommand("Select-Object").AddParameter("Property", new string[] { "InterfaceAlias", "IPv4Address", "InterfaceIndex", "InterfaceDescription", "NetProfile", "IPv4DefaultGateway", "DNSServer" });

            try
            {
                Collection<PSObject> results = pipeline.Invoke();

                // Process results
                foreach (PSObject result in results)
                {
                    string interfaceAlias = result.Members["InterfaceAlias"]?.Value.ToString();

                    string ipv4Address = string.Empty;
                    string ipv4PrefixLength = string.Empty;
                    string ipv4Gateway = string.Empty;
                    string dnsServers = string.Empty;

                    var ipv4AddressObject = result.Members["IPv4Address"]?.Value as PSObject;
                    if (ipv4AddressObject != null)
                    {
                        var baseObject = ipv4AddressObject.BaseObject as dynamic;
                        ipv4Address = baseObject[0]?.IPAddress;
                        ipv4PrefixLength = baseObject[0]?.PrefixLength.ToString();
                    }

                    // Accessing Default Gateway
                    var ipv4GatewayObject = result.Members["IPv4DefaultGateway"]?.Value as PSObject;
                    if (ipv4GatewayObject != null)
                    {
                        var baseGatewayObject = ipv4GatewayObject.BaseObject as dynamic;
                        ipv4Gateway = baseGatewayObject[0]?.NextHop;
                    }

                    // Accessing DNS Servers
                    StringBuilder DNSServers = new StringBuilder();

                    var dnsServersObject = result.Members["DNSServer"]?.Value as PSObject;
                    if (dnsServersObject != null)
                    {
                        var baseDNSServersObject = dnsServersObject.BaseObject as dynamic;

                        if(baseDNSServersObject.Count > 1)
                        {
                            foreach(var DnsServerObject in baseDNSServersObject)
                            {
                                var baseDNSServers = DnsServerObject?.ServerAddresses;

                                if (baseDNSServers is object[] DnsServers)
                                {
                                    int? cnt = 1;
                                    foreach (var DnsServer in DnsServers)
                                    {
                                        string? DNS = null;

                                        if (cnt < DnsServers.Length)
                                        {
                                            DNS = DnsServer.ToString();
                                            DNS = DNS + ";";
                                        }
                                        else
                                        {
                                            DNS = DnsServer.ToString();
                                        }

                                        DNSServers.Append(DNS);
                                        cnt++;
                                    }
                                }
                            }
                        }
                        else
                        {
                            var baseDNSServers = baseDNSServersObject[0]?.ServerAddresses;

                            if (baseDNSServers is object[] DnsServers)
                            {
                                foreach (var DnsServer in DnsServers)
                                {
                                    string? DNS = DnsServer.ToString();
                                    DNSServers.Append(DNS);
                                }
                            }
                        }
                    }

                    // Convert CIDR to Subnet Mask
                    string subnetMask = CidrToMask(Convert.ToInt32(ipv4PrefixLength));

                    // Output results
                    Console.WriteLine($"InterfaceAlias     : {interfaceAlias}");
                    Console.WriteLine($"IPv4 Address       : {ipv4Address}");
                    Console.WriteLine($"Subnet Mask        : {subnetMask}");
                    Console.WriteLine($"Default Gateway    : {ipv4Gateway}");
                    Console.WriteLine($"DNSServer          : {DNSServers.ToString()}");
                    Console.WriteLine();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error executing the pipeline: " + ex);
            }
        }

        // Clean up and close the runspace
        runspace.Close();
    }
    public static string CidrToMask(int cidr)
    {
        var mask = (cidr == 0) ? 0 : uint.MaxValue << (32 - cidr);
        var bytes = BitConverter.GetBytes(mask).Reverse().ToArray();
        return new IPAddress(bytes).ToString();
    }
Reasons:
  • Blacklisted phrase (0.5): Thanks
  • Long answer (-1):
  • Has code block (-0.5):
  • Self-answer (0.5):
  • Low reputation (1):
Posted by: NeoGenesis521