我拥有Windows Service C#,其中包含用户UserInstallerMoss的凭据。
Windows服务使用凭据UserInstallerMoss执行EXE控制台Aplicaction C#。
EXE Console Aplicaction使用凭据UserInstallerMoss执行powershell.exe。
服务器是Windows Server 2012 Enterprise。 UAC已禁用。
UserinstallerMOss是本地管理员
Powershell函数返回$ true值:
$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 :(得分: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仅检查直接成员资格。