Ich mache einige Skripts in PowerShell, und ich frage mich, ob es eine Möglichkeit gibt, einen Parameter "X" auf die gleiche Weise wie Parameter "-Credential" zu deklarieren, zum Beispiel im Cmdlet Get-WMIObject.Wie Parametertyp in einen anderen Objekttyp konvertiert werden
Lassen Sie mich genauer sein. Der Credential-Parameter in fast allen Cmdlets ist ein PSCredential-Objekt. Das Argument kann jedoch entweder ein PSCredential-Objekt oder ein String-Objekt mit dem Benutzernamen sein.
[CmdletBinding()]
param ([Parameter(Mandatory = $false)]
[System.Management.Automation.PSCredential]
$Credential)
Das Problem tritt auf, wenn eine Zeichenfolge übergeben wird. Natürlich kann eine Argumenttransformation für den Parameter nicht durchgeführt werden. Der Typ "System.String" kann nicht in einen Typ PSCrendential konvertiert werden.
Dank Shay Levy. Es klappt! – nbetm
Ich habe immer 'if ($ Credential.GetType(). Name -ne 'PSCredential') {$ Credential = Get-Credential $ Credential}' im Body der Funktion verwendet (casting $ Credential als [PSObject]). Ihre Lösung ist eleganter, danke! Was bewirkt das '= [System.Management.Automation.PSCredential] :: Empty? Nur "[System.Management.Automation.Credential()] $ Credential" scheint von selbst zu funktionieren - wenn Sie eine Zeichenkette angeben, erhalten Sie eine PS Credential Request-Eingabeaufforderung mit dem Feld "Benutzername", das mit der Zeichenfolge gefüllt ist. –
1/2 Wenn der Credential-Parameter PSCredential lautet, können Sie keine Zeichenfolge an ihn übergeben: get-something -cred adi, Sie erhalten den Fehler 'Argumenttransformation kann nicht verarbeitet werden'. mit der 'Credential()' Transformation löst dies. Jetzt können Sie 'get-something -cred adi' ausführen und das Anmeldedaten-Dialogfeld aufrufen und mit dem Benutzernamen füllen. –