How to detect if machine is joined to domain?

后端 未结 12 1987
梦毁少年i
梦毁少年i 2020-11-28 08:59

How do I detect whether the machine is joined to an Active Directory domain (versus in Workgroup mode)?

12条回答
  •  囚心锁ツ
    2020-11-28 09:51

    Just wanted to drop Rob's Code in VB:

     Public Class Test
        Public Function IsInDomain() As Boolean
            Try
                Dim status As Win32.NetJoinStatus = Win32.NetJoinStatus.NetSetupUnknownStatus
                Dim pDomain As IntPtr = IntPtr.Zero
                Dim result As Integer = Win32.NetGetJoinInformation(Nothing, pDomain, status)
    
                If (pDomain <> IntPtr.Zero) Then
                    Win32.NetApiBufferFree(pDomain)
                End If
    
                If (result = Win32.ErrorSuccess) Then
                    If (status = Win32.NetJoinStatus.NetSetupDomainName) Then
                        Return True
                    Else
                        Return False
                    End If
                Else
                    Throw New Exception("Domain Info Get Failed")
                End If
            Catch ex As Exception
                Return False
            End Try
        End Function
    End Class
    Public Class Win32
        Public Const ErrorSuccess As Integer = 0
        Declare Auto Function NetGetJoinInformation Lib "Netapi32.dll" (ByVal server As String, ByRef IntPtr As IntPtr, ByRef status As NetJoinStatus) As Integer
        Declare Auto Function NetApiBufferFree Lib "Netapi32.dll" (ByVal Buffer As IntPtr) As Integer
        Public Enum NetJoinStatus
            NetSetupUnknownStatus = 0
            NetSetupUnjoined
            NetSetupWorkgroupName
            NetSetupDomainName
        End Enum
    End Class
    

    As Well as Stephan's code here:

    Dim cs As System.Management.ManagementObject
        Try
            cs = New System.Management.ManagementObject("Win32_ComputerSystem.Name='" + System.Environment.MachineName + "'")
            cs.Get()
            dim myDomain as string = = cs("domain").ToString
        Catch ex As Exception
        End Try
    


    I believe that only the second code will allow you to know what domain the machine joined, even if the current user IS NOT a domain member.

提交回复
热议问题