2014-09-03 322 views
-1

我擁有Windows User C#的用戶UserInstallerMoss憑據。獲取當前腳本Powershell是否以管理員身份執行(以管理員身份運行)

Windows服務使用憑據UserInstallerMoss執行EXE控制檯Aplicaction C#。

EXE控制檯Aplicaction使用憑據UserInstallerMoss執行powershell.exe。

服務器是Windows Server 2012 Enterprise。 UAC被禁用。

UserinstallerMOss是本地管理員

PowerShell函數返回$真值:

$ok = IsCurrentUserAdmin 
$ok = IsCurrentUserAdmin2 

但腳本失敗有關 「拒絕訪問」

nativehr:0X80070005 OWSSVR.DLL - 訪問被拒絕

如果當前腳本Powershell以「以管理員身份運行」執行,我該如何獲取?

如何獲取腳本Powershell中的當前用戶是管理員?

我的函數返回true,但可能是錯誤的?

PowerShell函數:

Function IsCurrentUserAdmin 
{ 
    $ident = [Security.Principal.WindowsIdentity]::GetCurrent() 

    foreach ($groupIdent in $ident.Groups) 
    { 
     if ($groupIdent.IsValidTargetType([Security.Principal.SecurityIdentifier])) 
     { 
      $groupSid = $groupIdent.Translate([Security.Principal.SecurityIdentifier]) 
      if ($groupSid.IsWellKnown("AccountAdministratorSid") -or $groupSid.IsWellKnown("BuiltinAdministratorsSid")) 
      { 
       return $TRUE 
      } 
     } 
    } 
    return $FALSE 
} 

Function IsCurrentUserAdmin2 
{ 
    $user = [Security.Principal.WindowsIdentity]::GetCurrent(); 
    (New-Object Security.Principal.WindowsPrincipal $user).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator) 
} 

回答

0

如果您希望測試腳本運行高架:

function Test-RunningElevated{ 
    # returns True if running elevated, otherwise returns False 
    $windowsIdentity=[System.Security.Principal.WindowsIdentity]::GetCurrent() 
    $windowsPrincipal=new-object System.Security.Principal.WindowsPrincipal($windowsIdentity) 
    $adm=[System.Security.Principal.WindowsBuiltInRole]::Administrator 
    Write-Output ($windowsPrincipal.IsInRole($adm)) 
} 

如果你想測試,如果用戶正在運行的腳本是本地管理員組的成員:

function Test-LocalAdministrator{ 
    $currentUser = $env:USERNAME 
    $currentComputer = $env:COMPUTERNAME 
    $adminGroup = [ADSI]"WinNT://$currentComputer/Administrators" 
    $adminGroup.Members() | ForEach-Object{ 
     $member = $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null) 
     if($member -eq $currentUser){ 
      Write-Output $true 
      break 
     } 
    } 
    Write-Output $false 
} 

使用它們是這樣的:

if(Test-RunningElevated){ 
    # code to run goes here 
} 
else{ 
    Write-Warning 'This script needs to be run elevated!' 
} 

請注意,Test-LocalAdministrator只檢查直接成員資格。

+0

這與IsCurrentUserAdmin2功能相同 – Kiquenet 2014-09-03 08:52:08

+0

即使您運行腳本提升,它也會返回false? – ojk 2014-09-03 08:53:19

相關問題