VBS Code funkt, aber ASP-Variante nicht
Hallo zusammen!
Da ich nicht der Programmierer bin, habe ich mir folgenden VBS-Code aus dem Internet zusammengeschustert, der als Paramter einen Workstationnamen entgegennimmt und ein darauf befindliches Profil (welches sich am besagten Namen orientiert) sowohl aus Registry, als auch aus C:\Users löscht. Das Skript läuft mit den hardgecodeten Service-Credentials von der Shell (cmd mit cscript.exe), aber sobald ich daraus ein Classic.ASP-Skript (IIS auf Windows Server 2019) mache, erhalte ich immer Error 424 Objekt erforderlich beim objUserProfile.Delete_. Ich habe schon unzählige Tipps gegoogelt, aber keiner fruchtet, so dass ich es nicht schaffe, das Skript mittels URL-Aufruf (z.B. mit http://localhost/delete_profile.asp?rechnerName=RD401) auszuführen.
Hier der besagte VBS-Code:
Option Explicit
'Now the variables
Dim LOGON_USER, AUTH_USER, REMOTE_ADDR, DOMAIN_NAME, MGMT_USER, MGMT_PWD, ARG
Dim rechnerName, UserProfileName, QueryPath, objSID, objUserProfile, returnValue
Dim objSWbemLocator, objSWbemServices, colProfiles, objProfile, colItems, objItem
Dim Folder()
DOMAIN_NAME = "DOMAINNAME"
MGMT_USER = "DOMAINNAME\SUPAUSER"
MGMT_PWD = "KENNWORT0815"
returnValue = 0
'------------ only in vbs --------------------
Set ARG = Wscript.Arguments
if (ARG.Count = 0) then
WScript.Echo "Usage: delete_profile.vbs {Name of PC}"
Wscript.Quit 1
else
rechnerName = ARG(0)
end if
'----------------------------------------------------
On Error Resume Next
Err.Clear
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer(rechnerName, "root\cimv2", MGMT_USER, MGMT_PWD)
If Err.Number <> 0 Then
Set objSWbemServices = Nothing
Wscript.Echo "fail"
Response.End
End If
objSWbemServices.Security_.ImpersonationLevel = 3
'extracting profilename from hostname (x123 or xx123 -> u123)
UserProfileName = "u" & Right(rechnerName,3)
Set colProfiles = objSWbemServices.ExecQuery("SELECT * FROM Win32_UserProfile")
For Each objProfile in colProfiles
Set objSID = objSWbemServices.Get("Win32_SID.SID='" & objProfile.SID &"'")
If (objSID.ReferencedDomainName = DOMAIN_NAME) Then
If (objSID.AccountName = UserProfileName) Then
Err.Clear
Set objUserProfile = GetObject("winmgmts:{impersonationlevel=impersonate}!\\" & rechnerName &"\root\cimv2:Win32_UserProfile." & "SID='" & objProfile.Sid &"'")
objUserProfile.Delete_
If Err.Number = -2147024809 Then
Wscript.Echo "Fail: Profile in use, skipping"
returnValue = 1
ElseIf Err.Number <> 0 Then
Wscript.Echo "Error: " & Err.Number & ": " & Err.Description
returnValue = Err.Number
Else
Wscript.Echo "ok"
End If
End If
End If
Next
Set objSID = Nothing
Set colProfiles = Nothing
Set objSWbemServices = Nothing
WScript.Quit(returnValue)
Zur Info: beim ASP-Skript wird der recherName mittels Request.Querystring("rechnerName") geholt und statt Wscript.echo steht ein Response.Write an den notwendigen Stellen.
Vielleicht weiß jemand noch einen Rat?
greets
Da ich nicht der Programmierer bin, habe ich mir folgenden VBS-Code aus dem Internet zusammengeschustert, der als Paramter einen Workstationnamen entgegennimmt und ein darauf befindliches Profil (welches sich am besagten Namen orientiert) sowohl aus Registry, als auch aus C:\Users löscht. Das Skript läuft mit den hardgecodeten Service-Credentials von der Shell (cmd mit cscript.exe), aber sobald ich daraus ein Classic.ASP-Skript (IIS auf Windows Server 2019) mache, erhalte ich immer Error 424 Objekt erforderlich beim objUserProfile.Delete_. Ich habe schon unzählige Tipps gegoogelt, aber keiner fruchtet, so dass ich es nicht schaffe, das Skript mittels URL-Aufruf (z.B. mit http://localhost/delete_profile.asp?rechnerName=RD401) auszuführen.
Hier der besagte VBS-Code:
Option Explicit
'Now the variables
Dim LOGON_USER, AUTH_USER, REMOTE_ADDR, DOMAIN_NAME, MGMT_USER, MGMT_PWD, ARG
Dim rechnerName, UserProfileName, QueryPath, objSID, objUserProfile, returnValue
Dim objSWbemLocator, objSWbemServices, colProfiles, objProfile, colItems, objItem
Dim Folder()
DOMAIN_NAME = "DOMAINNAME"
MGMT_USER = "DOMAINNAME\SUPAUSER"
MGMT_PWD = "KENNWORT0815"
returnValue = 0
'------------ only in vbs --------------------
Set ARG = Wscript.Arguments
if (ARG.Count = 0) then
WScript.Echo "Usage: delete_profile.vbs {Name of PC}"
Wscript.Quit 1
else
rechnerName = ARG(0)
end if
'----------------------------------------------------
On Error Resume Next
Err.Clear
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer(rechnerName, "root\cimv2", MGMT_USER, MGMT_PWD)
If Err.Number <> 0 Then
Set objSWbemServices = Nothing
Wscript.Echo "fail"
Response.End
End If
objSWbemServices.Security_.ImpersonationLevel = 3
'extracting profilename from hostname (x123 or xx123 -> u123)
UserProfileName = "u" & Right(rechnerName,3)
Set colProfiles = objSWbemServices.ExecQuery("SELECT * FROM Win32_UserProfile")
For Each objProfile in colProfiles
Set objSID = objSWbemServices.Get("Win32_SID.SID='" & objProfile.SID &"'")
If (objSID.ReferencedDomainName = DOMAIN_NAME) Then
If (objSID.AccountName = UserProfileName) Then
Err.Clear
Set objUserProfile = GetObject("winmgmts:{impersonationlevel=impersonate}!\\" & rechnerName &"\root\cimv2:Win32_UserProfile." & "SID='" & objProfile.Sid &"'")
objUserProfile.Delete_
If Err.Number = -2147024809 Then
Wscript.Echo "Fail: Profile in use, skipping"
returnValue = 1
ElseIf Err.Number <> 0 Then
Wscript.Echo "Error: " & Err.Number & ": " & Err.Description
returnValue = Err.Number
Else
Wscript.Echo "ok"
End If
End If
End If
Next
Set objSID = Nothing
Set colProfiles = Nothing
Set objSWbemServices = Nothing
WScript.Quit(returnValue)
Zur Info: beim ASP-Skript wird der recherName mittels Request.Querystring("rechnerName") geholt und statt Wscript.echo steht ein Response.Write an den notwendigen Stellen.
Vielleicht weiß jemand noch einen Rat?
greets
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 549721
Url: https://administrator.de/forum/vbs-code-funkt-aber-asp-variante-nicht-549721.html
Ausgedruckt am: 23.12.2024 um 15:12 Uhr
6 Kommentare
Neuester Kommentar
Ok Serverseitig wenn ich richtig verstehe.
Du übergibst vom Client den Parameter 'Rechnername' und führst dann dein Skript auf einem Server aus. Dort soll mit dem Userobjekt interagiert werden das auf dem Client liegt?
Wenn du das Parameter übergibst, wird das Skript ja immer noch am Server ausgeführt.... du willst aber ja wohl dass es eine Aktion am Client durchführt oder?
Du übergibst vom Client den Parameter 'Rechnername' und führst dann dein Skript auf einem Server aus. Dort soll mit dem Userobjekt interagiert werden das auf dem Client liegt?
Wenn du das Parameter übergibst, wird das Skript ja immer noch am Server ausgeführt.... du willst aber ja wohl dass es eine Aktion am Client durchführt oder?
Moin,
wenn es Dir nur um das Löschen von Profilen geht, dann kannst Du das hier kostenfrei per Startup Script laufen lassen:
https://helgeklein.com/free-tools/delprof2-user-profile-deletion-tool/
Oder Du erfindest das Rad neu
Gruss
wenn es Dir nur um das Löschen von Profilen geht, dann kannst Du das hier kostenfrei per Startup Script laufen lassen:
https://helgeklein.com/free-tools/delprof2-user-profile-deletion-tool/
Oder Du erfindest das Rad neu
Gruss