Podanie prawidłowego typu hasła powinno wystarczyć, spróbuj:
Param (
[Parameter(Mandatory=$True)]
[string]$FileLocation,
[Parameter(Mandatory=$True)]
[Security.SecureString]$password
)
PowerShell „zamaskuje” hasło (takie samo jak w przypadku read-host -asSecureString), a typem wyniku będzie ten, którego mogą wymagać inne cmdlety.
EDYCJA: Po ostatnich komentarzach: rozwiązanie, które daje obu opcję podania hasła w postaci zwykłego tekstu lub zmusza użytkownika do wpisania hasła (ale zamaskuj to w ten sam sposób, co zrobiłby Read-Host -AsSecureString), aw obu przypadkach w końcu otrzymaj [Security.SecureString] . Jako bonus otrzymasz wymyślne zapytanie o swoje tajne hasło. ;)
[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
Użyłem sztuczki Jaykul, aby oszukiwać, prosząc o bezpieczne hasło. ;) Sprawi, że ten parametr będzie bardzo trudny w użyciu w trybie CLI (-Wpisz swoje tajne hasło nie będzie działać zgodnie z oczekiwaniami), więc powinien zmusić użytkowników skryptu do pominięcia hasła (i otrzymania zamaskowanego monitu) lub określenia go za pomocą -password parametr, który akceptuje ciąg normalny i konwertuje go na bezpieczny ciąg w logice skryptu.
Trochę trudno jest odczytać, co próbujesz zrobić ...
Edytować; jak wspomniano Ryan, obecnie określasz go jako ciąg znaków ...
Ale w niektórych kodach użyłem następującej funkcji podczas korzystania z Read-Host i SecureStrings
W twoim przypadku zadzwonisz, wykonując następujące czynności;
EDYCJA: Biorąc pod uwagę komentarze i na wszelki wypadek ... oto alternatywna metoda konwersji powyższego bezpiecznego ciągu na zwykły tekst w programie Powershell;
Użyłbyś tego w ten sposób;
Podsumowując, zabierasz hasło w postaci zamaskowanej, jest to bezpieczny ciąg znaków, możesz następnie podzielić go na zwykły tekst, aby użyć go gdzie indziej. Przykładem prawdziwego słowa byłoby, gdyby niektóre programy CLI akceptowały hasła przesyłane do nich jako zwykły tekst, to pomaga w automatyzacji, w której nie chcesz na stałe wpisywać hasła do skryptu.
źródło
Nie jestem pewien, czy rozumiem ... wygląda na to, że już to robisz. Ustawiając parametr na obowiązkowy, Powershell wyświetli monit o podanie go, jeśli nie podasz go w wierszu poleceń, a za pomocą [string] upewnisz się, że jedynym typem danych, który może przejść do tej zmiennej, jest System.string.
EDYCJA: Opierając się na odpowiedzi Bartka, zrób to w swoim skrypcie:
Następnie musisz przekazać skryptowi obiekt SecureString, taki jak:
źródło