WinNT giving to much information. I need to narrow down to just Machine Names

馋奶兔 提交于 2020-01-24 19:32:09

问题


Dim de As New System.DirectoryServices.DirectoryEntry()

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        de.Path = "WinNT://*****".Replace("*****", ActiveDirectory.Domain.GetCurrentDomain.Name)
        Dim Mystream As Object
        MsgBox("Please choose the place you want the file")
        If savefileDialog1.ShowDialog() = DialogResult.OK Then Mystream = savefileDialog1.FileName

    Dim UserFile As String = savefileDialog1.FileName & ".txt"
    Dim fileExists As Boolean = File.Exists(UserFile)
    Using sw As New StreamWriter(File.Open(UserFile, FileMode.OpenOrCreate))
        For Each d As DirectoryEntry In de.Children()
            sw.WriteLine(d.Name)

        Next
    End Using
End Sub

I am getting a large number of entries written out to the text file. The bottom half of the file is all that I really need. The bottom half seems to be the list of all machine names on the domain and the first half is filled with names or printers, and other names that i cannot "pushd \" into.

I am unable to figure out what will cut down this user list and give me only the machine names.


回答1:


I'm not sure if there is much difference in our active directory setups, but I ran the following code in a console application and it only output the AD Names (as expected):

Module Module1

    Sub Main()
        Using de As New System.DirectoryServices.DirectoryEntry
            de.Path = "WinNT://*****".Replace("*****", System.DirectoryServices.ActiveDirectory.Domain.GetCurrentDomain.Name)
            For Each d As System.DirectoryServices.DirectoryEntry In de.Children()
                If d.SchemaEntry.Name = "User" Then
                    Console.WriteLine(d.Name)
                End If
            Next
            Console.ReadKey()
        End Using
    End Sub

End Module

EDIT:

Code change to only output members with the SchemaType of "User"




回答2:


You might find something here...look at "Enumerate Objects in an OU"

Public Function EnumerateOU(OuDn As String) As ArrayList
    Dim alObjects As New ArrayList()
    Try
        Dim directoryObject As New DirectoryEntry("LDAP://" + OuDn)
        For Each child As DirectoryEntry In directoryObject.Children
            Dim childPath As String = child.Path.ToString()
            alObjects.Add(childPath.Remove(0, 7))
            'remove the LDAP prefix from the path

            child.Close()
            child.Dispose()
        Next
        directoryObject.Close()
        directoryObject.Dispose()
    Catch e As DirectoryServicesCOMException
        Console.WriteLine("An Error Occurred: " + e.Message.ToString())
    End Try
    Return alObjects
End Function


来源:https://stackoverflow.com/questions/6252785/winnt-giving-to-much-information-i-need-to-narrow-down-to-just-machine-names

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!