Geben Sie Folgendes an, um den richtigen Typ für das Kennwort anzugeben:
Param (
[Parameter(Mandatory=$True)]
[string]$FileLocation,
[Parameter(Mandatory=$True)]
[Security.SecureString]$password
)
PowerShell "maskiert" das Kennwort (wie für read-host -asSecureString) und der Ergebnistyp ist derjenige, den andere Cmdlets möglicherweise benötigen.
BEARBEITEN: Nach den letzten Kommentaren: Lösung, die sowohl die Option bietet, ein Nur-Text-Kennwort anzugeben , als auch den Benutzer zur Eingabe eines Kennworts zu zwingen (es jedoch auf dieselbe Weise zu maskieren, wie es Read-Host -AsSecureString tun würde) und in beiden Fällen am Ende [Security.SecureString] erhält . Und als Bonus erhalten Sie eine ausgefallene Aufforderung zur Eingabe Ihres geheimen Passworts. ;)
[CmdletBinding(
DefaultParameterSetName = 'Secret'
)]
Param (
[Parameter(Mandatory=$True)]
[string]$FileLocation,
[Parameter(
Mandatory = $True,
ParameterSetName = 'Secret'
)]
[Security.SecureString]${Type your secret password},
[Parameter(
Mandatory = $True,
ParameterSetName = 'Plain'
)]
[string]$Password
)
if ($Password) {
$SecretPassword = $Password | ConvertTo-SecureString -AsPlainText -Force
} else {
$SecretPassword = ${Type your secret password}
}
Do-Stuff -With $SecretPassword
Ich habe Jaykuls Trick hier benutzt, um mit der Aufforderung zur Eingabe eines sicheren Passworts zu betrügen. ;) Es macht es sehr schwierig, diesen Parameter im CLI-Modus zu verwenden (- Geben Sie ein, dass Ihr geheimes Passwort nicht wie erwartet funktioniert), sodass Benutzer des Skripts gezwungen werden sollten, das Passwort entweder wegzulassen (und eine maskierte Eingabeaufforderung zu erhalten) oder es mit anzugeben -password-Parameter, der reguläre Zeichenfolgen akzeptiert und in sichere Zeichenfolgen innerhalb der Skriptlogik konvertiert.
Es ist ein wenig schwer zu entziffern, was Sie versuchen zu tun ...
Bearbeiten; Wie von Ryan erwähnt, geben Sie es derzeit bereits als Zeichenfolge an ...
In einigen Codes habe ich jedoch die folgende Funktion verwendet, wenn ich Read-Host und SecureStrings verwendet habe
In Ihrem Fall würden Sie es wie folgt aufrufen:
BEARBEITEN: Gegebene Kommentare, und nur zum Teufel ... hier ist eine alternative Methode, um die obige sichere Zeichenfolge in Powershell in einfachen Text umzuwandeln.
Sie würden es so verwenden;
Zusammenfassend lässt sich sagen, dass Sie das Kennwort maskiert verwenden. Es ist eine sichere Zeichenfolge. Sie können es dann zur Verwendung an anderer Stelle in einfachen Text zerlegen. Ein Beispiel für ein echtes Wort wäre, wenn bestimmte CLI-Programme nur Kennwörter akzeptieren, die als einfacher Text an sie übergeben werden Hilft bei der Automatisierung, bei der Sie kein Kennwort fest in Ihr Skript codieren möchten.
quelle
Ich bin nicht sicher , ob ich verstehe ... es scheint , dass Sie bereits sind , das zu tun. Wenn Sie den Parameter auf obligatorisch setzen, werden Sie von Powershell dazu aufgefordert, wenn Sie ihn nicht in der Befehlszeile angeben. Mit [string] stellen Sie sicher, dass der einzige Datentyp, der in diese Variable aufgenommen werden kann, System.string ist.
EDIT: Aufbauend auf Barteks Antwort, machen Sie dies in Ihrem Skript:
Dann müssen Sie Ihrem Skript ein SecureString-Objekt wie folgt übergeben:
quelle