質問

私はチェックをする必要かどうかは、ユーザ、スクリプトを実行するには管理権限のある機です。

私は特定のユーザスクリプトを実行するためのスクリプトが実行されているのはユーザー以外はログインのようなものを使った"Runas".

@ハビエル:両方のソリューションは"パソコンと英語のバージョンのWindowsでの設置がない場合には設置が異なる言語です。これは、管理者グループが存在しない、名称が異なるためのインスタンス、スペイン語です。さんありがとうございます。溶液の作業が可能です。-

役に立ちましたか?

解決

利用できるスクリプトを見たい場合は、場合にはログインユーザが管理者

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"私は恐れられていた。→

他のヒント

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

<!> quot; \\ computername \ Admin $ \ system32 <!> quot;の確認はどうですか?

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

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

代わりに、<!> quot; defrag <!> quot;を呼び出すなど、ハッカーのメソッドを使用しました。 cmdプロンプトでは管理者アクセスが必要です。動作しますが、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

このスレッドは非常に古く、回答済みとマークされていますが、その回答はOPが尋ねた内容を実際に示しているわけではありません。

このページを検索および検索する他のユーザー向けに、グループメンバーシップではなく権限に基づいてレポートを実行する代替手段を次に示します。Runas管理者は管理者権限をTrueとして表示します。

Option Explicit 

msgbox isAdmin(), vbOkonly, "Am I an admin?"

Private Function IsAdmin()
    On Error Resume Next
    CreateObject("WScript.Shell").RegRead("HKEY_USERS\S-1-5-19\Environment\TEMP")
    if Err.number = 0 Then 
        IsAdmin = True
    else
        IsAdmin = False
    end if
    Err.Clear
    On Error goto 0
End Function

この記事には、グループのメンバーを列挙します(便宜上ここにコピーし、メールアドレスを使用しないように編集します):

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

さらに別のクイックnダーティメソッド。 <!> lt; <!> gt;を返します。 0 IsNotAdminの場合

Function IsNotAdmin()
    With CreateObject("Wscript.Shell")
        IsNotAdmin = .Run("%comspec% /c OPENFILES > nul", 0, True)
    End With
End Function

ユーザーがローカル管理者グループに含まれていない可能性があります。たとえば、ドメイン管理者。 UACは通常、レジストリへの管理者アクセスをブロックし、e.t.cを共有します。管理者の場合でも(手動<!> quot;管理者として実行<!> quot;正しくなります)...

これが私のクレイジーな方法です:

Set Shell = CreateObject("WScript.Shell")
set fso = CreateObject("Scripting.FileSystemObject")
strCheckFolder = Shell.ExpandEnvironmentStrings("%USERPROFILE%") 
strCheckFolder = strCheckFolder+"\TempFolder"

if fso.FolderExists(strCheckFolder) then
        fso.DeleteFolder(strCheckFolder)
end if

fso.CreateFolder(strCheckFolder)
tempstr = "cmd.exe /u /c chcp 65001 | whoami /all >" & strCheckFolder & "\rights.txt"
Shell.run tempstr

tempstr = strCheckFolder & "\rights.txt"
WScript.Sleep 200
Set txtFile = FSO.OpenTextFile(tempstr,1)

IsAdmin = False

Do While Not txtFile.AtEndOfStream
  x=txtFile.Readline
  If InStr(x, "S-1-5-32-544") Then
      IsAdmin = True
  End If
Loop

txtFile.Close
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

<!> quot; localhost <!> quot;の使用実際のホスト名の代わりに、スクリプトランタイムが約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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top