6

スクリプトを実行しているユーザーがマシンの管理者権限を持っているかどうかを確認する必要があります。

「Runas」に似たものを使用してログオンした以外のユーザーでスクリプトを実行できた可能性があるため、スクリプトを実行するユーザーを指定しました。

@Javier:どちらのソリューションも、英語版のWindowsがインストールされているPCで機能しますが、インストールされている言語が異なる場合は機能しません。これは、Administratorsグループが存在しないためです。たとえば、スペイン語では名前が異なります。すべての構成で機能するソリューションが必要です。

4

10 に答える 10

4

これを行うことにより、ユーザーがスクリプトに必要な特権を持っているが、管理者に属していないシナリオを破ることができます。グループメンバーシップをチェックする代わりに、必要な特定の能力をチェックしてください。

于 2008-11-19T15:21:06.840 に答える
3

「\\computername\ Admin $ \ system32」をチェックするのはどうですか?

function IsLoggedInAsAdmin()
    isAdmin = false
    set shell = CreateObject("WScript.Shell")
    computername = WshShell.ExpandEnvironmentStrings("%computername%")
    strAdmin = "\\" & computername & "\Admin$\System32"

    isAdmin = false

    set fso = CreateObject("Scripting.FileSystemObject")

    if fso.FolderExists(strAdmin) then
        isAdmin = true
    end if

    IsLoggedInAsAdmin = isAdmin
end function
于 2011-12-03T22:32:41.243 に答える
3

ログオンしているユーザーが管理者かどうかを確認する場合は、スクリプトを使用できます

Set objNetwork = CreateObject("Wscript.Network")
strComputer = objNetwork.ComputerName
strUser = objNetwork.UserName

isAdministrator = false

Set objGroup = GetObject("WinNT://" & strComputer & "/Administrators")
For Each objUser in objGroup.Members
    If objUser.Name = strUser Then
        isAdministrator = true        
    End If
Next

If isAdministrator Then
    Wscript.Echo strUser & " is a local administrator."
Else
    Wscript.Echo strUser & " is not a local administrator."
End If

「Runas」でスクリプトを実行した場合の対処方法がわかりません。

于 2008-11-19T13:43:08.240 に答える
2

私は、実際に管理者権限を持っている会社のネットワーク上の Windows 7 ボックスで、Tim C のソリューションを試しました。しかし、ユーザーには管理者権限がないと表示されます。

代わりに、コマンドプロンプトで「デフラグ」を呼び出すには管理者アクセスが必要なため、ハッカーの方法を使用しました。これは機能しますが、XP と 7 (および Windows の将来のバージョン) ではリターン コードが異なることに注意してください。デフラグよりも一貫した選択肢があるかもしれませんが、今のところ機能します。

Function isAdmin
    Dim shell
    set shell = CreateObject("WScript.Shell")
    isAdmin = false
    errlvl = shell.Run("%comspec% /c defrag /?>nul 2>nul", 0, True)
    if errlvl = 0 OR errlvl = 2 Then '0 on Win 7, 2 on XP
        isAdmin = true
    End If
End Function
于 2011-10-20T20:39:36.813 に答える
1

この記事には、グループのメンバーを列挙する方法に関する優れたコードのチャンクがあります (便宜上ここにコピーし、電子メール アドレスを使用しないように編集しています)。

Function RetrieveUsers(domainName,grpName)

dim GrpObj
dim mbrlist
dim mbr

'-------------------------------------------------------------------------------
' *** Enumerate Group Members ***
'-------------------------------------------------------------------------------

' Build the ADSI query and retrieve the group object
Set GrpObj = GetObject("WinNT://" & domainName & "/" & grpName & ",group")

' Loop through the group membership and build a string containing the names
for each mbr in GrpObj.Members
   mbrlist = mbrlist & vbTab & mbr.name & vbCrLf
Next

RetrieveUsers=mbrlist

End Function

次に、ユーザーがリストに含まれているかどうかを確認する関数を作成できます...

Function IsAdmin(user)
    IsAdmin = InStr(RetrieveUsers("MachineName", "Administrators"), user) > 0
End Function

...そして、次のように呼び出します。

If IsAdmin("LocalAccount") Then
    Wscript.Echo "LocalAccount is an admin"
Else
    Wscript.Echo "LocalAccount is not an admin"
End If
于 2008-11-19T15:05:29.167 に答える
0
Function isAdmin
    Dim shell
    Set shell = CreateObject("WScript.Shell")
    isAdmin = false
    errorLevel = shell.Run("%comspec% /c net session >nul 2>&1", 0, True)
    if errorLevel = 0
        isAdmin = true
    End If
End Function
于 2014-10-17T16:15:19.920 に答える
0

実際のホスト名の代わりに「localhost」を使用すると、スクリプトの実行時間が約 10 倍になります。
私の最終的なコードは次のとおりです。

' get_admin_status.vbs
Option Explicit

Dim oGroup:   Set oGroup   = GetObject("WinNT://localhost/Administrators,group")
Dim oNetwork: Set oNetwork = CreateObject("Wscript.Network")

Dim sSearchPattern: sSearchPattern = "WinNT://" & oNetwork.UserDomain & "/" & oNetwork.UserName

Dim sMember
For Each sMember In oGroup.Members
  If sMember.adsPath = sSearchPattern Then
    ' Found...
    Call WScript.Quit(0)
  End If
Next

' Not found...
Call WScript.Quit(1)

現在のユーザーがローカル管理者の場合、このスクリプトは終了コード 0 を返します。
使用法: cscript.exe get_admin_status.vbs

于 2016-07-29T13:55:00.203 に答える