Ste*_*eve 8 powershell powershell-2.0
我正在尝试运行一个需要管理员输入的脚本来处理某些事情.我没有让脚本运行失败,而是试图捕获错误并将其重新放回到凭据中,但是我找不到可以将本地管理员凭据传递给陷阱的命令.有没有人有可能有用的东西?
我发现很多人会检查域凭据,但这是一个LOCAL Admin帐户.
为了澄清,我正在使用:
$Cred = Get-Credential
我需要验证输出是否正确并具有管理员访问权限以在脚本中进一步运行.
工作解决方案(感谢User978511)
$Cred = Get-Credential
$Computer = (gwmi Win32_ComputerSystem).Name
$User = $Cred.Username
$Pass = $Cred.GetNetworkCredential().Password
$Users = ("$Computer"+"$User")
Add-Type -assemblyname System.DirectoryServices.AccountManagement
$DS = New-Object System.DirectoryServices.AccountManagement.PrincipalContext([System.DirectoryServices.AccountManagement.ContextType]::Machine)
$DS.ValidateCredentials($Users, $pass)
if ($Result -ne "True")
{
<Perform Tasks Here>
}
Run Code Online (Sandbox Code Playgroud)
function Is-Current-User-Admin
{
return ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
}
Run Code Online (Sandbox Code Playgroud)
这将使您返回本地管理员(另一个答案可能更适合这里):
$group =[ADSI]"WinNT://./Administrators"
$members = @($group.psbase.Invoke("Members"))
$admins = $members | foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}
Run Code Online (Sandbox Code Playgroud)
这将检查凭据:
Add-Type -assemblyname system.DirectoryServices.accountmanagement
$DS = New-Object System.DirectoryServices.AccountManagement.PrincipalContext([System.DirectoryServices.AccountManagement.ContextType]::Machine)
$DS.ValidateCredentials("test", "password")
Run Code Online (Sandbox Code Playgroud)
您所要做的就是检查凭据是否正确并且该用户是管理员组的成员