1

大規模なコンピューター グループで Windows ローカル管理者パスワードをリセットするには、.VBS スクリプトを作成する必要があります。私の問題は、セキュリティ上の理由から、一部のサイトで管理者アカウントの名前が変更されていることです。元の管理者アカウントの SID に基づいて管理者アカウントのパスワードを変更するスクリプトを持っている人はいますか?

4

4 に答える 4

1

ローカル管理者の SID が常に -500 で終わるという事実を使用します。

strComputer="."    ' local computer by default   
Set objUser=GetObject("WinNT://" & strComputer & "/" & GetAdminName & ",user")     
objUser.SetPassword "New local admin password"     
objUser.SetInfo 

Function GetAdminName   
  'This function was written using information from Table J.1 from the Windows XP resource Kit
  'http://www.microsoft.com/resources/documentation/Windows/XP/all/reskit/en-us/Default.asp?url=/resources/documentation/Windows/XP/all/reskit/en-us/prnc_sid_cids.asp

  Set objNetwork = CreateObject("Wscript.Network") 'get the current computer name 
  objComputerName = objNetwork.ComputerName    
  Set objwmi = GetObject("winmgmts:{impersonationLevel=impersonate}!//" & objComputerName)

  qry = "SELECT * FROM Win32_Account where Domain = '" & cstr(objComputerName) & "'" 
  'set query, making sure to only look at local computer

  For Each Admin in objwmi.ExecQuery(qry)   
    if (left(admin.sid, 6) = "S-1-5-" and right(admin.sid,4) = "-500") then 'look for admin sid
       GetAdminName = admin.name
    end if   
  next    
end Function
于 2009-10-03T15:59:11.947 に答える
0

Joshuaが言うように、これはWindows Scripting Hostでのみ実行できるとは思いません。何かをダウンロードして実行することで、次のように実行できます。

  • LookupAccountSid(S-1-5-domain-500 SIDまたは列挙型管理者グループ)+ NetUserSetInfoを呼び出してパスワードをリセットするカスタムアプリ(これを管理者として実行する必要があります)
  • http://home.eunet.no/pnordahl/ntpasswd/(起動時にリセット)
  • SAMハッシュをダンプし、パスワードを解読します(Cain、John the Ripper、L0phtCrackなど)
于 2009-10-03T15:36:58.330 に答える
0

ビルトイン管理者の SID を指定すると、その名前が付けられる LookupAccountName (ソース付き!) と呼ばれるツールがどこかに浮かんでいます。

おそらく、これをうまくやってのけるために C++ コードを書くことになるでしょう。

于 2009-10-02T18:54:12.377 に答える
0

@DmitryKの答えは良いです。私はそのことを知りませんでした。しかし、この種のことは通常 PowerShell でよりクリーンであることを知っているので、移植しました。

たとえば、GetAdminName関数全体は次のように記述できます。

$adminName = (gwmi win32_account | ? { $ .SID.StartsWith( 'S-1-5-' ) -and $ .SID.EndsWith( '-500' ) }).Name

(サーバー上でこれを行うには、呼び出しに-ComputerNameオプションを追加します。)gwmi

残りは次のようになります。

$user = ([ADSI]"WinNT://$($env:COMPUTERNAME)/$adminName,User")
$user.SetPassword( 'xxx' )
$user.SetInfo()

(もちろん、必要に応じて適切なコンピューター名を適用します。)

于 2010-05-18T06:16:24.340 に答える