【问题标题】:Security.SecureString parameter does not accept stringsSecurity.SecureString 参数不接受字符串
【发布时间】:2017-08-11 15:42:18
【问题描述】:

将字符串作为参数传递给此参数时:

[Parameter(Mandatory=$true)]
[ValidateNotNullOrEmpty()]
[Security.SecureString]$password=$(Throw "Password required.")

使用-password 参数时出现此错误。

无法将 System.String 类型转换为 System.Security.SecureString 类型

如果我没有传递-password 参数,则会显示一个提示并接受输入。

【问题讨论】:

  • 问题是什么?你需要一个安全的字符串并传递一个字符串来得到这个错误?
  • 你在主题中回答了你自己的问题 (?)
  • 有人在某些时候必须创建 SecureString,您可以获取一个字符串并自己创建或让调用者创建。但这不会自动发生。

标签: powershell passwords parameter-passing


【解决方案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
    }
    

    【讨论】:

    • 这很好用。必须有其他方法,因为我设法让它在没有转换一次的情况下工作。
    • 缺点是如果从命令行执行密码将以明文形式显示
    猜你喜欢
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 2018-10-11
    • 1970-01-01
    相关资源
    最近更新 更多