2012-05-03 11 views
7

Sto tentando di eseguire uno script che richiede l'input dell'amministratore per elaborare determinate cose. Anziché eseguire lo script senza successo, sto tentando di intercettare l'errore e reinserirlo nelle credenziali, ma non riesco a trovare un comando che possa trasferire le credenziali di amministratore locale a una trap. Qualcuno ha qualcosa che potrebbe funzionare?PowerShell per verificare le credenziali di amministratore locale

Ho trovato MOLTO che controllerà le credenziali di dominio, ma questo è un account amministratore LOCAL.

Per chiarire, io sto usando:

$Cred = Get-Credential

Ho bisogno di verificare l'uscita da ciò che è corretto e ha accesso amministratore per eseguire roba più in basso nello script.

soluzione di lavoro (Grazie a 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> 
} 

risposta

3

Ciò restituirà si amministratori locali (un'altra risposta è probabilmente migliore vestibilità qui):

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

E questo sarà verificare le credenziali:

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

Tutto quello che dovete fare è controllare che le credenziali siano ok e che l'utente sia membro o f Gruppo amministratori

+0

Grazie, è molto utile, ma devo verificare l'account. Lasciatemi reexplain: sto usando il seguente: '$ Cred = Get-credential' voglio controllare che ciò che viene immesso è valido e dovrà diritti di amministratore per eseguire il resto delle attività. – Steve

+0

@Steve vedi il mio aggiornamento –

+0

Grazie, l'aggiornamento funziona bene se inserisco username e password. Lavorando su un modo ora per essere in grado di estrarre le informazioni da $ Cred in quei campi. – Steve

4
function Is-Current-User-Admin 
{ 
    return ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator") 
} 
+0

Mmmh. Dopo aver letto la tua modifica, non è quello che vuoi. Tuttavia, potrebbero esserci alcune tracce da seguire qui: http://blogs.technet.com/b/heyscriptingguy/archive/2011/05/11/check-for-admin-credentials-in-a-powershell-script .aspx –

+0

Grazie David. Mentre apprezzo la raccomandazione, avevo già visto quel sito e non ero in grado di lavorare molto da lì. Questo è uno script molto utile per controllare l'utente corrente. – Steve

Problemi correlati