Security.SecureString 参数不接受字符串
Posted
技术标签:
【中文标题】Security.SecureString 参数不接受字符串【英文标题】:Security.SecureString parameter does not accept strings 【发布时间】:2017-08-11 15:42:18 【问题描述】:将字符串作为参数传递给此参数时:
[Parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[Security.SecureString]$password=$(Throw "Password required.")
使用-password
参数时出现此错误。
无法将 System.String 类型转换为 System.Security.SecureString 类型
如果我没有传递-password
参数,则会显示一个提示并接受输入。
【问题讨论】:
问题是什么?你需要一个安全的字符串并传递一个字符串来得到这个错误? 你在主题中回答了你自己的问题 (?) 有人在某些时候必须创建 SecureString,您可以获取一个字符串并自己创建或让调用者创建。但这不会自动发生。 【参考方案1】:你不能传递字符串;你必须传递一个安全的字符串
function Get-PasswordThing
Param (
[Parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[Security.SecureString]$password=$(Throw "Password required.")
)
Process
Write-Host "cool"
[string]$password = "hello"
[Security.SecureString]$securePassword = ConvertTo-SecureString $password -AsPlainText -Force
Get-PasswordThing -password $securePassword
# inline
Get-PasswordThing -password (ConvertTo-SecureString $password -AsPlainText -Force)
【讨论】:
【参考方案2】:另一种选择是将密码作为字符串,然后在您的函数中将其转换为 SecureString。
Function DoSomething
Param (
[Parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[String]$password=$(Throw "Password required.")
)
$password = $password | ConvertTo-SecureString -AsPlainText -Force
#your script continues here
【讨论】:
这很好用。必须有其他方法,因为我设法让它在没有转换一次的情况下工作。 缺点是如果从命令行执行密码将以明文形式显示以上是关于Security.SecureString 参数不接受字符串的主要内容,如果未能解决你的问题,请参考以下文章
Groovy闭包 Closure ( 闭包参数列表规则 | 默认参数列表 | 不接收参数 | 接收自定义参数 )