2017-11-07 4 views
0

Überlastung richtig habe ich eine Benutzerklasse, die eine überladene Methode „SetPassword“ zum Bestücken eines Benutzerberechtigungsnachweis hat:, wie ein Verfahren, in Powershell

class User 
{ 
    ... 
    [PSCredential] $Credential 
    ... 
    SetPassword([string] $Password){ 
     $UserPassword = ConvertTo-SecureString $Password -AsPlainText -Force 
     $UserCredential = New-Object System.Management.Automation.PSCredential (
       $this.name, $UserPassword) 
     $this.Credential = $UserCredential 
    } 

    SetPassword(){ 
     $Password = Read-Host "Please Enter Password" 
     $UserPassword = ConvertTo-SecureString $Password -AsPlainText -Force 
     $UserCredential = New-Object System.Management.Automation.PSCredential (
       $this.name, $UserPassword) 
     $this.Credential = $UserCredential 
    } 

ich diese beiden Methoden zu einem kombinieren möchte, die behandelt $ Passwort als optionaler Parameter. Ich würde zu Testzwecken ein Passwort eingeben, ansonsten den Benutzer zur Eingabe einer Berechtigung auffordern.

PowerShell lässt PARAM() im Hauptteil einer Methode nicht zu.

Gibt es eine bessere Möglichkeit, dies zu tun, die keinen doppelten Code wie ich hier habe?

Antwort

3

Rufen Sie die speziellsten Überlastung von den vorherigen:

SetPassword([string] $Password){ 
    $UserPassword = ConvertTo-SecureString $Password -AsPlainText -Force 
    $UserCredential = New-Object System.Management.Automation.PSCredential (
      $this.name, $UserPassword) 
    $this.Credential = $UserCredential 
} 

SetPassword(){ 
    $Password = Read-Host "Please Enter Password" 
    $this.SetPassword($Password) 
} 

ich wahrscheinlich mit SecureString Standard würde:

SetPassword([securestring] $Password){ 
    $UserCredential = New-Object System.Management.Automation.PSCredential (
      $this.name, $Password) 
    $this.Credential = $UserCredential 
} 

SetPassword([string] $Password){ 
    $UserPassword = ConvertTo-SecureString $Password -AsPlainText -Force 
    $this.SetPassword($UserPassword) 
} 

SetPassword(){ 
    $Password = Read-Host "Please Enter Password" -AsSecureString 
    $this.SetPassword($Password) 
} 
+3

ein Vorschlag: Konstrukteure Nutzungsart statt 'New-Object 'wenn Sie Klassen verwenden. Wenn Sie' v5'-Funktionen verwenden, können Sie alle für Konsistenz und Lesbarkeit nutzen. '[PSCredential] :: new ($ this.Name, $ UserPassword)' – TheIncorrigible1

Verwandte Themen