2014-12-12 12 views
6

Sono stato un membro di SO per un anno e questa è la mia prima domanda in assoluto!PSCredentials da utente corrente

Attualmente sto sviluppando un'applicazione WinForms in C# che richiama gli script di PowerShell. Non è progettato per essere un gestore completo di tutte le funzionalità di PowerShell, ma esegue semplicemente una piccola selezione di script con tipi di parametri semplici e pre-concordati.

Alcuni degli script richiedono autorizzazioni elevate per essere eseguiti correttamente. Nessun problema - sembra esserci almeno 2 modi per aggirare questo:

1. Impersonificazione. L'applicazione esegue l'autorizzazione e invoca powershell con queste credenziali. Ho riscontrato un problema all'inizio, in quanto l'utente rappresentato/elevato potrebbe non disporre delle autorizzazioni per invocare i comandi di PowerShell sul computer locale dell'utente, poiché la macchina locale potrebbe non avere l'ExecutionPolicy appropriato e l'utente elevato dovrebbe quindi accedere al Registro di sistema per modificare questo. Non ho influenza nel modificare i permessi. Che mi porta verso:

2. Credenziali come variabile. Semplice. Gli script hanno una variabile come ad esempio:

[PSCredential]$credential 

che l'applicazione può fornire, chiedendo all'utente per il nome utente e la password per questo account.

La mia domanda è questa: c'è un modo per ottenere un oggetto PSCredential dall'utente attualmente loggato, come una sorta di impostazione predefinita per la mia app?
Non ho visto nulla per suggerire che questo può essere fatto, quindi se qualcuno può inondarmi sul perché questo è il caso, sarei felice di sentirlo. Sarebbe possibile forzare l'esecuzione dell'applicazione come amministratore, se questo è di aiuto.

Grazie per il vostro tempo.

+1

Non è necessario l'accesso al Registro di sistema per modificare i criteri di esecuzione. Puoi lanciare PowerShell.eseguire una politica di esecuzione desiderata o inizializzare lo spazio di esecuzione di PowerShell ospitato con uno script che imposta la politica desiderata per l'ambito del processo. Non penso che ci sia un modo per ottenere una credenziale per l'utente corrente senza chiedere almeno una volta, perché è come ottenere la password dell'utente corrente. Tuttavia, è possibile richiedere e quindi archiviare le credenziali in un modulo crittografato. –

+0

Grazie a @mikez. Penso che questo lo risolva - è la risposta migliore che otterrò, quindi sentitevi liberi di postarlo come risposta e lo accetterò. – ne1410s

risposta

1

Non esiste in effetti alcun modo per ottenere le credenziali per l'utente corrente senza richiedere all'utente un input. Per prima cosa, è abbastanza semplice ottenere la password di testo chiaro dalla proprietà password "SecureString" dell'istanza PSCredential.

-2

Sono sicuro che è possibile ottenerlo con la classe System.Security.Principal. Ha un metodo statico chiamato getCurrent(). Questo metodo restituisce l'oggetto di WindowsIdentity dell'utente attualmente connesso. Prova a cercare questo. Se troverò un articolo Io modificare questa risposta

EDIT

ho trovato un esempio, è piuttosto semplice (c'è anche una scheda denominata codice con piena esempio - https://code.msdn.microsoft.com/windowsdesktop/Add-Window-Authentication-833ba913#content

EDIT v. 2

private WindowsIdentity GetloggedinUser() 

    { 
     System.Security.Principal.WindowsIdentity currentUser =System.Security.Principal.WindowsIdentity.GetCurrent();  
     return currentUser; 
    } 

Dopo aver utilizzato questo metodo già aver recuperato un esempio di utente attualmente connesso (di WindowsIdentity Type). Nel link qui sotto potete vedere le proprietà di classe WindowsIdentity http://msdn.microsoft.com/en-US/library/system.security.principal.windowsidentity.aspx

Non ho familiarità con PowerShell, ma sto usando questa classe nella mia azienda per alcune nostre app private all'interno del dominio e funziona bene.

+0

Sfortunatamente l'esempio a cui si fa riferimento non spiega come si possa ottenere un'istanza PSCredential, che è ciò con cui sto lottando. Sembra anche che non abbia idea dell'attuale utente e del suo attuale dominio. Sto cercando la massima automazione. – ne1410s

+0

Nessuna idea dell'utente corrente? Risponderò nella mia domanda. – MajkeloDev