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 参数不接受字符串的主要内容,如果未能解决你的问题,请参考以下文章

vs函数不接受一个参数是啥问题呢

按键精灵参数个数不匹配是怎么回事,,

当参数相同时锁定程序不运行,但在参数不同时允许运行

Groovy闭包 Closure ( 闭包参数列表规则 | 默认参数列表 | 不接收参数 | 接收自定义参数 )

在 C++ 中使用默认参数跳过模板参数真的不可能吗,为啥语法建议不这样?

Java中参数个数一样的但是参数顺序不一样会构成重载吗?