5

VBscriptが実行されているコンテキストで管理タスクを実行できるかどうかを確認したいと思います。

要件:

  • このソリューションは、Server 2003以降のすべてのWindowsオペレーティングシステムで機能するはずです(これにより、Administratorsグループのメンバーシップを確認するだけのソリューションは除外されます。VistaとWindows 7にはUACがあることに注意してください!)
  • 解決策は単純でなければなりません。Windowsグループのメンバーシップをチェックし(もちろん、ユーザーはグループのメンバーであるグループのメンバーである可能性があるため...管理者グループのメンバーであるため)、Vistaの追加のチェックを行う50LOCソリューションUACは単純ではありません
  • 解決策は少し汚れている可能性があるので、この解決策に沿った何かが大丈夫でしょう。
  • 汚れすぎてはいけません。私の意見では、C:\ Windowsにファイルを書き込んだり、レジストリキーを書き込んだりすると、システムが変更されるため、汚すぎます。(編集:とにかく機能しない可能性があります:たとえば、HTAでVBScriptを使用する場合、UACリダイレクトが開始されます。)

関連する質問:https ://stackoverflow.com/questions/301860 (そこで見つけたすべての回答は(a)UACの問題を無視し、(b)ユーザーが直接ではないものの管理者権限を持っている可能性を無視しているために誤りがありますAdministratorsグループのメンバー)

4

5 に答える 5

1

上記の ifuserperms.vbs からの元のコードを大幅に強化する 2 つのスクリプト キットを追加しました。

CSI_IsSession.vbsは、UAC やスクリプトが実行されている現在のセッションについて知りたいことのほとんどすべてを教えてくれます。

VBScriptUACKit.vbs (CSI_IsSession.vbs を使用) を使用すると、スクリプト自体を再起動して、スクリプトで UAC を選択的に要求できます。多くの実行シナリオで動作するように設計およびデバッグされています。

于 2010-05-25T14:13:38.397 に答える
1

これ ( VBscript の WhoAmI ) とこれ ( UAC Turned On ) を組み合わせることができます。

これがコードです。XP の残念な前提条件は、XP のリソース キットまたはサポート ツール ( Wikipedia ) にある「whoami.exe」です。

If UserPerms("Admin") Then
 Message = "Good to go"
Else
 Message = "Non-Admin"
End If

If UACTurnedOn = true Then
 Message = Message & ", UAC Turned On"
Else
 Message = Message & ", UAC Turned Off (Or OS < Vista)"
End If

Wscript.echo Message

Function UserPerms (PermissionQuery)          
 UserPerms = False  ' False unless proven otherwise           
 Dim CheckFor, CmdToRun         

 Select Case Ucase(PermissionQuery)           
 'Setup aliases here           
 Case "ELEVATED"           
   CheckFor =  "S-1-16-12288"           
 Case "ADMIN"           
   CheckFor =  "S-1-5-32-544"           
 Case "ADMINISTRATOR"           
   CheckFor =  "S-1-5-32-544"           
 Case Else                  
   CheckFor = PermissionQuery                  
 End Select           

 CmdToRun = "%comspec% /c whoami /all | findstr /I /C:""" & CheckFor & """"  

 Dim oShell, returnValue        
 Set oShell = CreateObject("WScript.Shell")  
 returnValue = oShell.Run(CmdToRun, 0, true)     
 If returnValue = 0 Then UserPerms = True                   
End Function

Function UACTurnedOn ()
 On Error Resume Next

 Set oShell = CreateObject("WScript.Shell")
 If oShell.RegRead("HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA") = 0 Then
      UACTurnedOn = false
 Else
      UACTurnedOn = true
 End If
End Function
于 2009-11-05T21:48:00.173 に答える
1

「whoami」を必要とする上記のコードは、CSI-Windows.com/toolkit/ifuserperms にある IfUserPerms スクリプトからのものです。

ここであなたの投稿を読んだ後、VBS (9 行) と CMD/BAT (3 行) の両方で、高速、小型、効率的、パッシブ (何も変更しない) コードで管理者権限をチェックする新しいスクリプト コードを作成しました。また、ユーザーが昇格されていない場合に false を報告することで、UAC でも機能します。

ここでコードを見つけることができます: http://csi-windows.com/toolkit/csi-isadmin

于 2010-01-26T18:55:21.777 に答える
0

スクリプト ファイルまたはその他のファイルを管理者として実行する最も速い方法は次のとおりです。

最初に、必要なすべての VBS スクリプトを作成します。私の場合、自動管理ログオンを許可するレジストリ編集 vbs であり、マシンが再起動されたときに、自動管理ログオンが有効にならないようにするために別のファイルが実行されました。

ファイルを作成したら、cmd プロンプトのショートカットを作成する必要があります。次に、ショートカットを「右クリック」して、管理者として実行されるようにプロパティを変更します。

ファイル パスを次のように貼り付けます: D:\WINDOWS\system32\cmd.exe /c "D:\Dump\Scripts\StartUp.vbs"

「C」は、完了後に閉じることを意味します。開いたままにしたい場合は、「K」を使用します

これが他の誰かに役立つことを願っています。

于 2011-04-20T19:46:45.750 に答える