Достаточно указать правильный тип пароля, попробуйте:
Param (
[Parameter(Mandatory=$True)]
[string]$FileLocation,
[Parameter(Mandatory=$True)]
[Security.SecureString]$password
)
PowerShell будет «маскировать» пароль (так же, как для read-host -asSecureString), и тип результата будет тем, который может потребоваться другим командлетам.
РЕДАКТИРОВАТЬ: После недавних комментариев: решение, которое дает обе опции, чтобы предоставить простой текстовый пароль, или заставить пользователя вводить пароль (но замаскировать его таким же образом, как Read-Host -AsSecureString) и в обоих случаях получить [Security.SecureString] в конце , И, в качестве бонуса, вы получите некоторую причудливую подсказку для вашего секретного пароля. ;)
[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
Я использовал трюк Джайкула, чтобы обмануть вас, попросив ввести безопасный пароль. ;) Из-за этого этот параметр будет очень трудно использовать в режиме CLI (-Тип вашего секретного пароля не будет работать должным образом), поэтому он должен заставить пользователей скрипта либо пропустить пароль (и получить подсказку в маске), либо указать его с помощью -password параметр, который принимает обычную строку и преобразует ее в защищенную строку внутри логики скрипта.
Немного трудно понять, что ты пытаешься сделать ...
Редактировать; как упомянуто Райаном, вы в настоящее время уже указываете его как строку ...
Но в некотором коде я использовал следующую функцию при использовании Read-Host и SecureStrings
В вашем случае вы бы назвали это, выполнив следующее;
РЕДАКТИРОВАТЬ: учитывая комментарии, и просто черт возьми ... вот альтернативный метод, используемый для преобразования вышеупомянутой безопасной строки в простой текст в Powershell;
Вы бы использовали это так;
Подводя итог, вы берете пароль в маске, это безопасная строка, вы можете затем разбить его на простой текст для использования в другом месте, реальный пример слова будет, если определенные программы CLI принимают только пароли, переданные в них в виде простого текста, это помогает в автоматизации, где вы не хотите жестко кодировать пароль в вашем скрипте ..
источник
Я не уверен , что понимаю ... кажется , что вы уже будут делать это. Установив параметр на обязательный, Powershell запросит его, если вы не предоставите его в командной строке, и с помощью [string] вы гарантируете, что единственный тип данных, который может входить в эту переменную, - это System.string.
РЕДАКТИРОВАТЬ: Основываясь на ответе Бартека, сделайте это в вашем сценарии:
Затем вы должны передать вашему сценарию объект SecureString следующим образом:
источник