8

特定の処理を行うために管理者の入力が必要なスクリプトを実行しようとしています。スクリプトの実行に失敗するのではなく、エラーをトラップして資格情報に戻そうとしていますが、ローカル管理者の資格情報をトラップに渡すことができるコマンドが見つかりません。誰もがうまくいくかもしれない何かを持っていますか?

ドメインの資格情報をチェックする多くのものを見つけましたが、これはローカルの管理者アカウントです。

明確にするために、私は使用しています:

$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>
}
4

3 に答える 3

5
function Is-Current-User-Admin
{
    return ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
}
于 2012-05-03T13:12:25.397 に答える
3

これにより、ローカル管理者が返されます(別の答えがおそらくここに適しています):

$group =[ADSI]"WinNT://./Administrators" 
$members = @($group.psbase.Invoke("Members")) 
$admins = $members | foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)} 

そして、これは資格情報をチェックします:

Add-Type -assemblyname system.DirectoryServices.accountmanagement 
$DS = New-Object System.DirectoryServices.AccountManagement.PrincipalContext([System.DirectoryServices.AccountManagement.ContextType]::Machine)
$DS.ValidateCredentials("test", "password") 

あなたがしなければならないのは、資格情報が問題なく、そのユーザーが管理者グループのメンバーであることを確認することだけです

于 2012-05-03T13:07:32.877 に答える