burschi
Goto Top

PC über ASPX Seite in Verbindung mit VBS und wake on lan starten

Ein PC soll via Intranet Seite remote gestartet werden

Hallo zusammen,

ich habe hier eine ASPX Seite, welche wiederum auf ein VBS verweist welches dann eine wake.cmd Datei startet, die einen PC im LAN hochfährt. Das alles hat unter Server 2008 hervorragend funktioniert, das manuelle Ausführen der Datei geht auch noch jetzt unter Server 2008.

Was leider nicht mehr funktioniert, ist der Start über die Intranet Seite. Da bekomme ich zwar noch die Melddung, dass mein Sript gestartet wurde, hochfahren tut der Rechner aber nicht. Habe die Files testweise schon mit der Berechtigung "jeder" und Vollzugriff ausgestattet - leider ohne Erfolg.

Hat jemand eine Idee? unten die Daten der oben aufgeführten Files.

Bootsystem.aspx im wwwroot des IIS

<%@ Page Language="vb" AutoEventWireup="false" src="BootSystem.aspx.vb" Inherits="WebForm1"%>
<!DOCTYPE HTML PUBLIC "-W3CDTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:Button id="Button1" style="Z-INDEX: 101; LEFT: 16px; POSITION: absolute; TOP: 16px" runat="server"
Text="Boot System"></asp:Button>
<asp:Label id="Label1" style="Z-INDEX: 102; LEFT: 16px; POSITION: absolute; TOP: 48px" runat="server"
Width="112px"></asp:Label>
</form>
</body>
</HTML>

ENDE################################

Die VBS Datei im gleichen Verzeichnis welches schließlich die wake.cmd aufruft:


imports Microsoft.VisualBasic
Public Class WebForm1
Inherits System.Web.UI.Page

#Region " Vom Web Form Designer generierter Code "

'Dieser Aufruf ist für den Web Form-Designer erforderlich.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

End Sub
Protected WithEvents Button1 As System.Web.UI.WebControls.Button
Protected WithEvents Label1 As System.Web.UI.WebControls.Label

'HINWEIS: Die folgende Platzhalterdeklaration ist für den Web Form-Designer erforderlich.
'Nicht löschen oder verschieben.
Private designerPlaceholderDeclaration As System.Object

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: Dieser Methodenaufruf ist für den Web Form-Designer erforderlich
'Verwenden Sie nicht den Code-Editor zur Bearbeitung.
InitializeComponent()
End Sub

#End Region

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Hier Benutzercode zur Seiteninitialisierung einfügen
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Call Shell("C:\inetpub\wwwroot\wake.cmd", AppWinStyle.NormalFocus, True)
Button1.Enabled = False
Label1.Text = "Bootrequest send."
End Sub
End Class

Content-ID: 146542

Url: https://administrator.de/contentid/146542

Ausgedruckt am: 22.11.2024 um 17:11 Uhr

Berrnd
Berrnd 08.07.2010 um 20:55:15 Uhr
Goto Top
Hi,

also ohne zu wissen warum dein Vorhaben nicht funktioniert - ein WakeOnLan Befehl in ASP.Net ist auch ohne Hilfmittel möglich!
(Übrigens ist das zweite kein VBS sondern wohl eher die CodeBehind-Klasse der ASP.Net-Seite ;))

Hier mal eine Funktion, die ein MagicPaket sendet, in VB (kein Gewähr für Richtigkeit da übersetzt aus C# mit einem Online-Tool)
''' <summary>  
''' Diese Funktion startet einen Rechner über das Netztwerk mittels MagicPacket  
''' </summary>  
''' <param name="MACAddress">Die MAC Adresse des zu startenden Rechners bzw. dessen Netzwerkadapter</param>  
Public Sub WakeOnLAN(ByVal MACAddress As String)
    Dim Client As New UdpClient
    Dim Count As Integer = 0
    Dim ByteArray(1024) As Byte
    Dim Pos As Integer = 0

    Client.Connect("255.255.255.255", 12287)  
    Client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 0)

    For i As Integer = 0 To 5
        Count += 1
        ByteArray(Count) = &HFF
    Next

    For i As Integer = 0 To 15
        Pos = 0
        For n As Integer = 0 To 5
            Count += 1
            ByteArray(Count) = Byte.Parse(MACAddress.Substring(Pos, 2), Globalization.NumberStyles.HexNumber)
            Pos += 2
        Next
    Next

    Client.Send(ByteArray, 1024)
End Sub
Gruß
Bernd
Burschi
Burschi 08.07.2010 um 21:34:43 Uhr
Goto Top
Hi, das wäre ja auch ok, wie ich den Client zum starten bekomme ist egal. mache ich daraus einfach eine Seite? Sorry, hab davon wirklich null Ahnung.
Und wo wird die MAC des Clients definiert? Das nutzt ein User, der den dann ab und an als "Terminalserver" verwendet.

Gruß & Danke derweil!
Berrnd
Berrnd 09.07.2010 um 10:37:22 Uhr
Goto Top
Hi,

die MAC Adresse ist die eindeutige Kennung einer Netzwerkschnittstelle. Nachzusehen einfach in den Eigenschaften der Netzwerkkarte.
Die Funktion würdest du dann einfach serverseitig ausführen - z. B. bei Klick auf einen Button.

Gruß
Bernd
Burschi
Burschi 09.07.2010 um 10:41:32 Uhr
Goto Top
Hallo,

also das war mir dann nach diversen Jahren IT doch noch klar, nur mit Programmierung jeglich er Art habe ich nicht viel am Hut. Daher galt meine Frage viel mehr, wie ich das ausführe, aber Danke trotzdem.

EDIT:

Die Lösung oben hat nicht funktioniert, dafür aber die vollständige Pfadangabe der auszuführenden Anwendung. Fall erledigt.