Finally I used system management as below 
(after importing System.Management)
I used two Functions
first one to connect remote Computer then collect data
Private Function tryConnect(SystemName As String)
        Try
            Dim ComputerConnection As New System.Management.ConnectionOptions
            ' to add user name and password
            'ComputerConnection.Username = "UserName"
            'ComputerConnection.Password = "Password"
            With ComputerConnection
                .Impersonation = System.Management.ImpersonationLevel.Impersonate
                .Authentication = System.Management.AuthenticationLevel.Packet
            End With
            'connect to WMI
            MyMgtScope = New System.Management.ManagementScope("\\" & SystemName & "\root\CIMV2", ComputerConnection)
            MyMgtScope.Connect()
            Return MyMgtScope.IsConnected
        Catch ex As Exception
            Return False
        End Try
End Function
private sub GetOsdata()
    if tryConnect(remoteComputerName) = False then Exit Sub ' or show some message
    Dim MyMgtScope As System.Management.ManagementScope
    Dim MyObjSearcher As System.Management.ManagementObjectSearcher
    Dim MyColl As System.Management.ManagementObjectCollection
    Dim MyObj As System.Management.ManagementObject
    Dim ComputerOSVersion , ComputerOSServiceBack ,OSbit As String
    MyObjSearcher = New System.Management.ManagementObjectSearcher(MyMgtScope.Path.ToString, "Select * FROM Win32_OperatingSystem")
                ' Execute the query
    MyColl = MyObjSearcher.Get
                For Each MyObj In MyColl
                    ComputerOSVersion = MyObj.GetPropertyValue("Caption").ToString
                    ComputerOSServiceBack = MyObj.GetPropertyValue("ServicePackMajorVersion").ToString
                    OSbit = MyObj.GetPropertyValue("OSArchitecture").ToString
               Next
               MyObjSearcher = Nothing
               MyColl = Nothing
End Sub