質問
私はチェックをする必要かどうかは、ユーザ、スクリプトを実行するには管理権限のある機です。
私は特定のユーザスクリプトを実行するためのスクリプトが実行されているのはユーザー以外はログインのようなものを使った"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