Avatar billede samohtrelhe Praktikant
12. marts 2013 - 16:15 Der er 3 kommentarer og
1 løsning

Nedenstående Wscript kode ønskes konverteret til VB.NET

Hej
Jeg vil gerne bruge nedenstående kode i VB.NET men kan simpelhen ikke finde ud af Declarations etc.

Bem. Jeg ønsker ikke at bruge f.eks win32_useraccount. Bare at få nedenstående WMI kald ind i VB.NET. Altså en en-til-en "oversættelse"..

Const HKLM = &h80000002
Const profiles = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"

Set sh  = CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
Set wmi = GetObject("winmgmts://./root/cimv2")
Set reg = GetObject("winmgmts://./root/default:StdRegProv")

reg.EnumKey HKLM, profiles, subkeys
For Each sid In subkeys
  reg.GetStringValue HKLM, profiles & "\" & sid, "ProfileImagePath", path
  path = sh.ExpandEnvironmentStrings(path)
  If fso.FolderExists(path) Then
    Set acct = wmi.Get("Win32_SID.SID='" & sid & "'")
    WScript.Echo acct.ReferencedDomainName & "\" & acct.AccountName
  End If
Next

(Output skal til en checkedlistbox isf Wcript.Echo)
Avatar billede arne_v Ekspert
16. marts 2013 - 19:38 #1
Mit bedste bud:

Imports System
Imports System.IO
Imports System.Management

Imports Microsoft.Win32

Namespace E
    Public Class Program
        Public Shared Sub Main(args As String())
            Dim profiles As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE").OpenSubKey("Microsoft").OpenSubKey("Windows NT").OpenSubKey("CurrentVersion").OpenSubKey("ProfileList")
            For Each sid As String In profiles.GetSubKeyNames()
                If Directory.Exists(DirectCast(profiles.OpenSubKey(sid).GetValue("ProfileImagePath"), String)) Then
                    Dim acct As New ManagementObject(New ManagementScope("\\.\ROOT\cimv2"), New ManagementPath("Win32_SID.SID='" & sid & "'"), New ObjectGetOptions())
                    Console.WriteLine(Convert.ToString(acct("ReferencedDomainName")) & "\" & Convert.ToString(acct("AccountName")))
                End If
            Next
            Console.ReadKey()
        End Sub
    End Class
End Namespace
Avatar billede samohtrelhe Praktikant
16. marts 2013 - 23:42 #2
Hej Arne

SUPER fedt! Jeg tester det mandag!
Men det ser helt rigtigt ud :-)

Jeg har spurgt på nogen rigtige nørd fora og de kloger derudaf med ting jeg burde læse eller mange foreslår at jeg bare skal bruge "win32_useraccount".

Problemet er at hvis man sidder på en Domæne maskine, med Domæne Administrator adgang, så bliver den ved med at indlæse alle domænebrugerne (vi har 20.000).

MVH
Thomas
Avatar billede arne_v Ekspert
17. marts 2013 - 00:41 #3
Og du tog selv point fordi?
Avatar billede samohtrelhe Praktikant
18. marts 2013 - 12:19 #4
Hej Arne

Så er point på plads via det andet svar og koden spiller bare:
        Dim profiles As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE").OpenSubKey("Microsoft").OpenSubKey("Windows NT").OpenSubKey("CurrentVersion").OpenSubKey("ProfileList")
        For Each sid As String In profiles.GetSubKeyNames()
            If Directory.Exists(DirectCast(profiles.OpenSubKey(sid).GetValue("ProfileImagePath"), String)) Then
                Dim acct As New ManagementObject(New ManagementScope("\\.\ROOT\cimv2"), New ManagementPath("Win32_SID.SID='" & sid & "'"), New ObjectGetOptions())
                CheckedListBox1.Items.Add(Convert.ToString(acct("ReferencedDomainName")) & "\" & Convert.ToString(acct("AccountName")))
            End If
        Next
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester