Avatar billede inctor Nybegynder
21. januar 2008 - 21:05 Der er 14 kommentarer og
1 løsning

Shell Command med cmd.exe

Hej Alle,

Nu har jeg set mig godt træt på dette problem.
Sidder og laver et lille for sjovt program bare for at træne mine skills i Vb.net, Men dette kan jeg simpelthen ikke løse.

Ved hjælp af:
        Shell("cmd.exe /c net view>comps.txt", AppWinStyle.Hide, True)

Gemmer den så net view indholdet i en tekst fil hvor jeg så senere kan indlæse teksten og bruge det til at lege rundt med i forms.

Her er resten af min kode,

        Shell("cmd.exe /c net view>comps.txt", AppWinStyle.Hide, True)
        Dim ReadFile As New IO.StreamReader("comps.txt")
        Do Until ReadFile.EndOfStream = True
            Dim CurrentLine = ReadFile.ReadLine
            If (Mid(CurrentLine, 1, 2) = "\\") Then
                mads3 = Replace(Mid(CurrentLine, 1, InStr(CurrentLine, " ")), "\\", "")
                Combo1.Items.Add(mads3)
            End If
        Loop
        ReadFile.Close()

NU er mit spørgsmål så, er det muligt at jeg kan gøre så den ikke gemmer det i en tekst fil, men eventuelt i et array eller lign.?

Kan ikek finde nogen løsning på google om det.
Håber i kan hjælpe mig ..
Avatar billede nielle Nybegynder
21. januar 2008 - 21:14 #1
Hvis du bruger:

System.Diagnostics.Process

i stedet for Shell har du mulighed for at omdirkgeret output direkte til programmet selv.
Avatar billede inctor Nybegynder
21. januar 2008 - 21:23 #2
Hvordan skal det så være?

        mads2 = System.Diagnostics.Process.Start("cmd.exe net view")
        mads.Text = mads2

?

Forstår ikke helt syntax'en i hvad jeg skal angive.? :S
Avatar billede nielle Nybegynder
21. januar 2008 - 21:33 #3
Noget i denne stil:

Dim p As Process = New Process
p.StartInfo.UseShellExecute = false
p.StartInfo.RedirectStandardOutput = true
p.StartInfo.FileName = "net"
p.StartInfo.Arguments = "view"
p.Start
Dim output As String = p.StandardOutput.ReadToEnd
p.WaitForExit

Console.WriteLine(output)
Avatar billede inctor Nybegynder
21. januar 2008 - 21:40 #4
Ah super nice det der ..

Nu skal det lige tilpasses med at jeg kun får computer navnene med ind i det osv ..

Prøver lige (:
Avatar billede inctor Nybegynder
21. januar 2008 - 21:47 #5
Hmm, det lykkedes ikke.
Den gik helt amok, kan du smelte den sammen med så at hvis min tekst bliver:


Servernavn      Bem‘rkning

-------------------------------------------------------------------------------
\\PC1                                         
\\MADS-PC                                                                     
\\PC3                                                                 
Kommandoen blev udf›rt.


At der så kun kommer til at være

PC1
MADS-PC
PC3

I dropdown boksen.?

Før tilføjede jeg dem efter jeg havde skildt linierne ad, hvordan skiller jeg dem ad her.?
Avatar billede nielle Nybegynder
21. januar 2008 - 21:51 #6
Den er da ikke gået amok - sådan er output af NET VIEW
Avatar billede inctor Nybegynder
21. januar 2008 - 21:54 #7
jah i know ..

Men jeg vil have skildt dem ad, så jeg kun kan se selve computer navnet, altså PC1, MADS-PC og PC2 istedet for at alt det andet står der, så det kun er linierne der starter med // der skal bruges og at // så fjernes igen bagefter så der kun er selve computer navn tilbage i strengen der indsættet i tekst DropDown'en ..
Avatar billede nielle Nybegynder
21. januar 2008 - 21:59 #8
Sådan?

Dim p As Process =  New Process()
p.StartInfo.UseShellExecute = False
p.StartInfo.RedirectStandardOutput = True
p.StartInfo.FileName = "net"
p.StartInfo.Arguments = "view"
p.Start()
Dim output As String =  p.StandardOutput.ReadToEnd()
p.WaitForExit()

Dim re As Regex =  New Regex("\\\\(.*?)$", RegexOptions.Multiline)
Dim rem As Match =  re.Match(output)

while (rem.Success)
{
    Console.WriteLine(rem.Groups(1).ToString())
    rem = rem.NextMatch()
}
Avatar billede inctor Nybegynder
21. januar 2008 - 22:13 #9
Jah næsten, bortset fra der var lidt syntax fejl sagde programmet.

Hmm ved nogen af computerne står der en Bemærkning, er det muligt at kan fjerne den på en måde.?

oven over er det gjort sådan her:
If (Mid(CurrentLine, 1, 2) = "\\") Then
                mads3 = Replace(Mid(CurrentLine, 1, InStr(CurrentLine, " ")), "\\", "")

Men det kan jeg ikke få til at passe med det nye , så derfor jeg har brugt dit, men ville gerne ha fjernet alt efter PC1 selvom der er en bemærkning efter.
Avatar billede nielle Nybegynder
21. januar 2008 - 22:16 #10
Måske sådan:

Dim re As Regex =  New Regex("\\\\([^ ]+)", RegexOptions.Multiline)
Avatar billede inctor Nybegynder
21. januar 2008 - 22:40 #11
Jeps, nu virker det.

Men nu har jeg så en Shell i bunden som sender beskeden ud til netværks brugeren der er valgt i DropDown boxen, den er således:

Shell("cmd.exe /c msg /server:" + serverNavn + "console " + mads.Text, AppWinStyle.Hide, True)

Jeg bruger vista, derfor der står msg .

Men, den bliver ikke sendt ud.? hvorfor det.?

Er det pga. jeg bruger en anden metode øverst eller hvordan.?
Avatar billede inctor Nybegynder
21. januar 2008 - 22:43 #12
Jeg fandt selv fejlen, manglede et mellemrum før Console :)
Avatar billede nielle Nybegynder
22. januar 2008 - 18:34 #13
Svar :^)
Avatar billede inctor Nybegynder
22. januar 2008 - 20:08 #14
Mange tak ..

Et InTopic spørgsmål,
kan jeg gøre net vinduet passivt så det ikke åbner.?
Altså så brugeren ikke kan se der åbnes en command prompt men at den bare kører i baggrunden og henter det hvor den bagefter laver en MsgBox hvor der står det er klart til brug.?
Avatar billede nielle Nybegynder
22. januar 2008 - 20:49 #15
Burde kunne gøres med:

p.StartInfo.CreateNoWindow = True
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