Menentukan jenis kata sandi yang benar sudah cukup, coba:
Param (
[Parameter(Mandatory=$True)]
[string]$FileLocation,
[Parameter(Mandatory=$True)]
[Security.SecureString]$password
)
PowerShell akan "menutupi" kata sandi (sama seperti untuk read-host -asSecureString) dan tipe hasil akan menjadi yang dibutuhkan oleh cmdlet lain.
EDIT: Setelah komentar baru-baru ini: solusi, yang memberikan kedua opsi untuk memberikan kata sandi teks biasa, atau memaksa pengguna untuk mengetik kata sandi (tapi sembunyikan dengan cara yang sama dengan Read-Host -AsSecureString akan) dan dalam kedua kasus mendapatkan [Security.SecureString] pada akhirnya . Dan, sebagai bonus, Anda mendapatkan prompt mewah untuk kata sandi rahasia Anda. ;)
[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
Saya telah menggunakan trik Jaykul di sini untuk menipu dengan meminta kata sandi aman. ;) Ini akan membuat parameter ini sangat sulit digunakan dalam mode CLI (-Jenis kata sandi rahasia Anda tidak akan berfungsi seperti yang diharapkan), jadi itu akan memaksa pengguna skrip untuk menghilangkan kata sandi (dan mendapatkan masked prompt) atau menentukannya dengan Parameter -password yang menerima string biasa dan mengubahnya menjadi string aman di dalam logika skrip.
Agak sulit untuk menguraikan apa yang Anda coba lakukan ...
Edit; seperti yang disebutkan oleh Ryan, saat ini Anda telah menetapkannya sebagai string ...
Namun dalam beberapa kode, saya telah menggunakan fungsi berikut saat menggunakan Read-Host dan SecureStrings
Dalam kasus Anda, Anda akan menyebutnya dengan melakukan hal berikut;
EDIT: Diberikan komentar, dan hanya untuk itu ... inilah metode alternatif yang digunakan untuk mengubah string aman di atas menjadi teks biasa dalam Powershell;
Anda akan menggunakannya seperti ini;
Terlalu singkat, Anda mengambil kata sandi dalam topeng, ini adalah string yang aman, Anda kemudian dapat memecahnya menjadi teks biasa untuk digunakan di tempat lain, contoh kata sebenarnya adalah jika program CLI tertentu hanya menerima kata sandi yang diteruskan ke kata-kata tersebut sebagai teks biasa, ini membantu dengan otomatisasi di mana Anda tidak ingin memasukkan kode sandi ke dalam skrip Anda ..
sumber
Saya tidak yakin saya mengerti ... tampak bahwa Anda sudah sedang melakukan hal itu. Dengan mengatur parameter ke mandatory, Powershell akan meminta Anda untuk itu jika Anda tidak menyediakannya pada baris perintah, dan dengan [string] Anda memastikan bahwa satu-satunya tipe data yang bisa masuk ke variabel itu adalah System.string.
EDIT: Membangun jawaban Bartek, lakukan ini dalam skrip Anda:
Maka Anda harus mengirimkan skrip Anda objek SecureString seperti:
sumber