azubaer
Goto Top

VB-Script das mit WMI lokale User zur Passwortänderung zwingen soll funktioniert nicht! (Windows 7)

Hallo,

ich versuche mir ein Script für Windows 7 zu basteln, welches bei allen aktiven, lokalen Systembenutzern (die nicht "Systemadministrator" heißen) eine Passwortänderung beim nächsten Login erzwingt.

Folgendes VB-Script habe ich bereits hinbekommen:

On Error Resume NextstrComputer = "localhost"Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")Set colItems = objWMIService.ExecQuery _ ("Select * from Win32_UserAccount Where LocalAccount = True AND Disabled = False AND Name <> 'Systemadministrator'")For Each objItem in colItems objItem.Put "PasswordExpired", 1 objItem.SetInfo Wscript.Echo objItem.NameNext

Leider funktioniert es noch nicht - zumindest nicht unter Windows 7 (andere Systeme habe ich nicht probiert - nützten mir auvh nix).
Das Wscript.Echo gibt zwar den korrekten Benutzernamen zurück, aber die Änderungen werden nicht übernommen.

Ist möglicherweise der Put-Parameter für eine Passwortänderung falsch?
Oder gibt es eine Besonderheit bei Windows 7 (das Script stammt noch aus XP-Zeiten...)
Kennt jemand eine Möglichkeit wie es unter Windows 7 klappen würde?

Schonmal besten Dank für eure Hilfe!

Gruß
Martin

Content-ID: 143587

Url: https://administrator.de/forum/vb-script-das-mit-wmi-lokale-user-zur-passwortaenderung-zwingen-soll-funktioniert-nicht-windows-7-143587.html

Ausgedruckt am: 27.12.2024 um 18:12 Uhr

bastla
bastla 26.05.2010 um 18:10:56 Uhr
Goto Top
Hallo azubaer!

So sollte das eher funktionieren:
Const ADS_UF_DONT_EXPIRE_PASSWD = &h10000

Set colAccounts = GetObject("WinNT://.")  
colAccounts.Filter = Array("user")  

For Each objUser In colAccounts
    If LCase(objUser.Name) <> LCase("Systemadministrator") And objUser.AccountDisabled = False Then   
        objUserFlags = objUser.Get("UserFlags")  
        objPasswordExpirationFlag = objUserFlags And Not ADS_UF_DONT_EXPIRE_PASSWD
        objUser.Put "userFlags", objPasswordExpirationFlag  
        objUser.Put "PasswordExpired", 1  
        objUSer.SetInfo
    End If
Next
Damit sollte auch eine allfällige Einstellung "Kennwort läuft nie ab" rückgängig gemacht werden (da ansonsten das "PasswordExpired" keinen Sinn hätte).

Grüße
bastla

P.S.: Während des Testens eines VBScripts ist "On Error Resume Next" kontraproduktiv - Du willst ja sehen, wo es Fehler gibt ...
azubaer
azubaer 26.05.2010 um 21:25:32 Uhr
Goto Top
Hallo bastla,

vielen Dank für deinen Beitrag!
das war die Lösung!
Ich weiß nicht wieso, aber es geht (wenn ich es únter Windows 7 aus einer Admin-Konsole heraus anstarte)
face-wink

Besten Dank!
bastla
bastla 26.05.2010 um 21:56:07 Uhr
Goto Top
Hallo azubaer!
Ich weiß nicht wieso, aber es geht
Stammt doch zum größten Teil direkt von MS (aus der sehr zu empfehlenden Sammlung von Beispielscripts in der "script_center.chm") - da darf es doch eigentlich ... face-wink

Grüße
bastla

P.S.: Nicht minder zu empfehlen: (ein Teil der) gesammelten Werke der "Scripting Guys" ...