Avatar billede johncleese Nybegynder
15. februar 2006 - 22:04 Der er 20 kommentarer og
1 løsning

wmi for begynder.

jeg kunne rigtig godt tænke mig at komme igang med at lære at bruge wmi og har fået installeret dot net framework 1.1
MEN jeg er ikke så haj til det. er faktisk ret nybegynder..
er gået igang med at lave et vb script som skulle tage pcnavne i en text fil en efter en og pinge dem og smide de pcer som den kan pinge over i en anden text fil. men jeg kan ikke få wmi til fungere..
inde i min do while lykke skulle den lave den ping funktion, men jeg er helt blank. jeg har fundet en masse vbs script som på nettet som jeg muligvis kan bruge men den kommer hele tiden med fejl når jeg prøver. er der en der ved lige hvordan man gør?
her er mit lille script.
hilsen nybegynderen. :)


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim strcomputer

        Dim sr As StreamReader = New StreamReader("c:\testfile.txt")

        Dim line As String = sr.ReadLine()

        Do While Not line Is Nothing
            line = sr.ReadLine()

            strcomputer = line


        Loop

        'Call ReadAllTextFile()
        'MsgBox(ReadAllTextFile)
    End Sub
Avatar billede nielle Nybegynder
15. februar 2006 - 22:23 #1
WMI er et stærkt værktøj til mange ting, men det har mig bekendt ikke ret meget med at kunne pinge at gøre.

Du pinger f.eks. på denne måde:

Try
    If My.Computer.Network.Ping("www.google.dk") Then
        Console.WriteLine("Hul igennem.")
    End If
Catch
    Console.WriteLine("Findes ikke, eller svare ikke på ping.")
End Try
Avatar billede johncleese Nybegynder
16. februar 2006 - 09:46 #2
hej og tak for din komentar. jeg prøver lige om jeg kan bruge den metode.
http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept04/hey0914.mspx
inde på denne her side så jeg et eksempel på hvordan man kunne gøre det.
Avatar billede johncleese Nybegynder
16. februar 2006 - 12:59 #3
så vidt jeg kan se så det eksempel du har vist virker med dot net 2.0 ?
og jeg har installeret version 1.1

http://msdn2.microsoft.com/en-us/library/microsoft.visualbasic.devices.network.aspx
se her.

ja jeg er ikke så haj til det  her så det ka godt være det er mig der tager fejl.
Avatar billede nielle Nybegynder
16. februar 2006 - 15:27 #4
Ja, det er 2.0, men jeg kan sagtens lave en 1.1 (som dog kræver en del mere kode).

Men hvorfor downloader du ikke den nyeste version af Visual Basic 2005 Express Edition - den er faktisk fuldstændig gratis. :^)

http://msdn.microsoft.com/vstudio/express/vb/


PS: Jeg har desværre ikke lige tid her i aften, men i morgen aften skal jeg nok kigge på dit link. :^)
Avatar billede johncleese Nybegynder
17. februar 2006 - 10:56 #5
kanon. jeeg installerede excpress versionen og det kørte dit eksempel lige igennem. jeg prøver lige om jeg kan få de andre ting til at passe ind.
Avatar billede johncleese Nybegynder
17. februar 2006 - 14:48 #6
tak for hjæpen nielle og linket til den nye vb.. :) du får lige point.
Avatar billede nielle Nybegynder
17. februar 2006 - 18:33 #7
Bare lige for at runde WMI-løsningen af; Dem ville f.eks. skunne se sådan her ud:

Imports System
Imports System.Management

Module Module1

    Sub Main()
        Dim sql As String = "SELECT StatusCode FROM Win32_PingStatus WHERE Address = 'www.ghoogle.dk'"
        Dim mos As ManagementObjectSearcher = New ManagementObjectSearcher(sql)

        Dim moc As ManagementObjectCollection = mos.Get()
        For Each mo As ManagementObject In moc
            If mo("StatusCode") IsNot Nothing And mo("StatusCode") = "0" Then
                Console.WriteLine("Hul igennem.")
            Else
                Console.WriteLine("Findes ikke, eller svare ikke på ping.")
            End If
        Next
    End Sub

End Module

Dog ville det kræve at du opretter en reference til System.Management.dll.
Avatar billede nielle Nybegynder
17. februar 2006 - 18:34 #8
... og et svar :^)
Avatar billede johncleese Nybegynder
17. februar 2006 - 19:00 #9
uha. Det ser lidt hardcore ud det der! hehe. jeg har meget at lære kan jeg se.. ;) lige et sidste spørgsmål..
jeg brugt den første metode til at pinge du gav mig.  kan man lave en "wait" box der kører så længe den kører ping lykken igennem for de 50 pcer den lige skal ping loope..? bare så man ved at mit lille applikation ikke er gået i gået "kold" hvis du forstår :)
Avatar billede nielle Nybegynder
17. februar 2006 - 19:11 #10
Hvordan ser din kode ud?
Avatar billede johncleese Nybegynder
17. februar 2006 - 20:20 #11
Den ser således ud.


Imports System.IO
Imports System
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim objConnection, objCommand, objRecordSet


        Dim sw As StreamWriter = New StreamWriter("c:\testfile.txt")

        Dim sw1 As StreamWriter = New StreamWriter("c:\testfile1.txt")

        sw.Flush()
        sw1.Flush()

        objConnection = CreateObject("ADODB.Connection")
        objCommand = CreateObject("ADODB.Command")
        objConnection.Provider = "ADsDSOObject"
        objConnection.Open("Active Directory Provider")

        objCOmmand.ActiveConnection = objConnection
        objCommand.CommandText = _
            "Select Name, Location from 'LDAP://ou=pc,ou=test test,DC=test,DC=root,dc=local' " _
                & "Where objectClass='computer'"
        objRecordSet = objCommand.Execute
        objRecordSet.MoveFirst()

        Do Until objRecordSet.EOF

            sw.WriteLine(objRecordSet.Fields("Name").Value)
            objRecordSet.MoveNext()
        Loop
        sw.Close()

        Dim sr As StreamReader = New StreamReader("c:\testfile.txt")
        Dim StrComputer As String = sr.ReadLine()

        Do While Not StrComputer Is Nothing
            Try
                If My.Computer.Network.Ping(StrComputer, 20) Then
                    sw1.WriteLine(StrComputer)
                End If
            Catch
              End Try
            StrComputer = sr.ReadLine()
        Loop
        sw1.Close()

    End Sub
End Class
Avatar billede johncleese Nybegynder
17. februar 2006 - 20:22 #12
anden gang den bliver kørt så laver den foresten også en fejl fordi den ikke ordendligt afslutter den åbne fil. skide irreterende.prøved med den flush metode. men det virked ikke. æv.
Avatar billede nielle Nybegynder
17. februar 2006 - 21:31 #13
Det er din sr du glemmer at Close()'e.
Avatar billede nielle Nybegynder
17. februar 2006 - 21:57 #14
Mht. det andet problem, så ville jeg personligt klare det ved at sætte en ProgressBar på formen - så kan man også se hvor langt den er kommet undervejs.
Avatar billede johncleese Nybegynder
18. februar 2006 - 15:07 #15
okey progressBar. det så dejlig nemt til at starte med. og jeg har prøvet at erlære progresbar as progressbar.
se min kode:


Imports System.IO
Imports System

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


        Dim objConnection, objCommand, objRecordSet
        Dim Pbar1 As ProgressBar


        Dim sw As StreamWriter = New StreamWriter("c:\testfile.txt")

        Dim sw1 As StreamWriter = New StreamWriter("c:\testfile1.txt")
        Dim taeller As Integer



        sw.Flush()
        sw1.Flush()

        objConnection = CreateObject("ADODB.Connection")
        objCommand = CreateObject("ADODB.Command")
        objConnection.Provider = "ADsDSOObject"
        objConnection.Open("Active Directory Provider")

        objCommand.ActiveConnection = objConnection
        objCommand.CommandText = _
            "Select Name, Location from 'LDAP://ou=pc,ou=Boligerne Gefion,ou=Boligerne Gefion,ou=Social og Psykiatri,ou=Frederiksborg,DC=fa,DC=root,dc=local' " _
                & "Where objectClass='computer'"
        objRecordSet = objCommand.Execute
        objRecordSet.MoveFirst()
        taeller = 0

        Do Until objRecordSet.EOF

            sw.WriteLine(objRecordSet.Fields("Name").Value)
            objRecordSet.MoveNext()
            taeller = taeller + 1
        Loop
        sw.Close()

        ' Display the ProgressBar control.

        Pbar1.Visible = True
        ' Set Minimum to 1 to represent the first file being copied.
        Pbar1.Minimum = 1
        ' Set Maximum to the total number of files to copy.
        Pbar1.Maximum = taeller
        ' Set the initial value of the ProgressBar.
        Pbar1.Value = 1
        ' Set the Step property to a value of 1 to represent each file being copied.
        Pbar1.Step = 1

        Dim sr As StreamReader = New StreamReader("c:\testfile.txt")
        Dim StrComputer As String = sr.ReadLine()

        Do While Not StrComputer Is Nothing
            Try
                If My.Computer.Network.Ping(StrComputer, 20) Then
                    sw1.WriteLine(StrComputer)
                End If
            Catch
            End Try
            StrComputer = sr.ReadLine()
            ' Perform the increment on the ProgressBar.
            Pbar1.PerformStep()
        Loop
        sw1.Close()
        sr.Close()
    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

    End Sub
End Class

Men når man kører programmet så kommer den med denne fejl: Object reference not set to an instance of an object.

er det fordi jeg mangler at erklære nogle variabler?

Visual Basic (Declaration)
<ComVisibleAttribute(True)> _
<ClassInterfaceAttribute(ClassInterfaceType.AutoDispatch)> _
Public Class ProgressBar
    Inherits Control

har det noget med det her at gøre?
Avatar billede nielle Nybegynder
18. februar 2006 - 15:38 #16
Brug drag-n-drop til at placere prograssbar'en på formen (samme måde som du du placerede Button1) - du skal ikke oprette den med "Dim Pbar1 As ProgressBar" som du gør nu.

Derefter retter du din nuværende kode til noget i denne stil:

Dim Pbar1 As ProgressBar

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim objConnection, objCommand, objRecordSet

        Dim taeller As Integer

        objConnection = CreateObject("ADODB.Connection")
        objCommand = CreateObject("ADODB.Command")
        objConnection.Provider = "ADsDSOObject"
        objConnection.Open("Active Directory Provider")

        objCommand.ActiveConnection = objConnection
        objCommand.CommandText = _
            "Select Name, Location from 'LDAP://ou=pc,ou=Boligerne Gefion,ou=Boligerne Gefion,ou=Social og Psykiatri,ou=Frederiksborg,DC=fa,DC=root,dc=local' " _
                & "Where objectClass='computer'"
        objRecordSet = objCommand.Execute
        objRecordSet.MoveFirst()
        taeller = 0

        Dim sw As StreamWriter = New StreamWriter("c:\testfile.txt")
        Do Until objRecordSet.EOF
            sw.WriteLine(objRecordSet.Fields("Name").Value)
            objRecordSet.MoveNext()
            taeller = taeller + 1
        Loop
        sw.Close()

        ' Display the ProgressBar control.
        ProgressBar1.Visible = True
        ' Set Minimum to 1 to represent the first file being copied.
        ProgressBar1.Minimum = 1
        ' Set Maximum to the total number of files to copy.
        ProgressBar1.Maximum = taeller
        ' Set the initial value of the ProgressBar.
        ProgressBar1.Value = 1
        ' Set the Step property to a value of 1 to represent each file being copied.
        ProgressBar1.Step = 1

        Dim sr As StreamReader = New StreamReader("c:\testfile.txt")
        Dim StrComputer As String = sr.ReadLine()

        Dim sw1 As StreamWriter = New StreamWriter("c:\testfile1.txt")
        Do While Not StrComputer Is Nothing
            Try
                If My.Computer.Network.Ping(StrComputer, 20) Then
                    sw1.WriteLine(StrComputer)
                End If
            Catch
            End Try
            StrComputer = sr.ReadLine()
            ' Perform the increment on the ProgressBar.
            ProgressBar1.PerformStep()
        Loop
        sw1.Close()

        sr.Close()
    End Sub
Avatar billede nielle Nybegynder
18. februar 2006 - 15:39 #17
Jeg prøver lige igen:

Brug drag-n-drop til at placere prograssbar'en på formen (samme måde som du du placerede Button1) - du skal ikke oprette den med "Dim Pbar1 As ProgressBar" som du gør nu.

Derefter retter du din nuværende kode til noget i denne stil:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim objConnection, objCommand, objRecordSet

        Dim taeller As Integer

        objConnection = CreateObject("ADODB.Connection")
        objCommand = CreateObject("ADODB.Command")
        objConnection.Provider = "ADsDSOObject"
        objConnection.Open("Active Directory Provider")

        objCommand.ActiveConnection = objConnection
        objCommand.CommandText = _
            "Select Name, Location from 'LDAP://ou=pc,ou=Boligerne Gefion,ou=Boligerne Gefion,ou=Social og Psykiatri,ou=Frederiksborg,DC=fa,DC=root,dc=local' " _
                & "Where objectClass='computer'"
        objRecordSet = objCommand.Execute
        objRecordSet.MoveFirst()
        taeller = 0

        Dim sw As StreamWriter = New StreamWriter("c:\testfile.txt")
        Do Until objRecordSet.EOF
            sw.WriteLine(objRecordSet.Fields("Name").Value)
            objRecordSet.MoveNext()
            taeller = taeller + 1
        Loop
        sw.Close()

        ' Display the ProgressBar control.
        ProgressBar1.Visible = True
        ' Set Minimum to 1 to represent the first file being copied.
        ProgressBar1.Minimum = 1
        ' Set Maximum to the total number of files to copy.
        ProgressBar1.Maximum = taeller
        ' Set the initial value of the ProgressBar.
        ProgressBar1.Value = 1
        ' Set the Step property to a value of 1 to represent each file being copied.
        ProgressBar1.Step = 1

        Dim sr As StreamReader = New StreamReader("c:\testfile.txt")
        Dim StrComputer As String = sr.ReadLine()

        Dim sw1 As StreamWriter = New StreamWriter("c:\testfile1.txt")
        Do While Not StrComputer Is Nothing
            Try
                If My.Computer.Network.Ping(StrComputer, 20) Then
                    sw1.WriteLine(StrComputer)
                End If
            Catch
            End Try
            StrComputer = sr.ReadLine()
            ' Perform the increment on the ProgressBar.
            ProgressBar1.PerformStep()
        Loop
        sw1.Close()

        sr.Close()
    End Sub
Avatar billede johncleese Nybegynder
18. februar 2006 - 16:29 #18
det virkede nielle. tusinde tak. ehjj jeg kunne simpelhen ikke forstå det. haha.. ja kald mig newbie! hehe ;)
Avatar billede nielle Nybegynder
18. februar 2006 - 16:52 #19
Må jeg spørge hvad pinten er med at oprette både c:\testfile.txt og c:\testfile1.txt. Det virker lidt som om at den første - c:\testfile.txt - egentlig ikke skal bruges til noget, men bare er en mellemregning?
Avatar billede johncleese Nybegynder
19. februar 2006 - 16:24 #20
Det er fordi det er meget godt at have hvis man skal trække noget ud til anden brug. jeg kunne heller ikke lige hitte ud af hvordan man gemmer flere navne uden at probbe dem ned i en fil. så ska man sikker lave noget mere avanceret. jeg er nybegynder hehe. hvordan ville du have gjort det? :)
Avatar billede nielle Nybegynder
19. februar 2006 - 16:29 #21
Hvis du skal bruge dem senere, så er det da ok at lave filen. Men hvis du ikke skulle bruge dem senere så ville jeg have skippet den. I stedet ville jeg have flyttet pingningen op i loopen:

        Dim sw As StreamWriter = New StreamWriter("c:\testfile.txt")
        Do Until objRecordSet.EOF
            sw.WriteLine(objRecordSet.Fields("Name").Value)
            objRecordSet.MoveNext()
            taeller = taeller + 1
        Loop
        sw.Close()

- og så havde skrevet serverenavnet til filen (eller ej) alt efter ping-resultatet.
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