PowerShell参数字符串始终用单引号引起来

丹格·罗斯

我有一个带有强制性参数的脚本,我们可以使用该脚本来安装一些SQL组件,包括用户名和密码,如下所示:

param(    
[Parameter(Mandatory=$True,HelpMessage="SQL Server password")]
    [ValidateNotNullOrEmpty()]
    [string] $SqlServerPassword
)

因此,当用户运行此脚本时,他/她将需要包含-SqlServerPassword'SpecialCharacters'变量字符串。我知道最佳实践是将字符串放在单引号内,但这对我们的一些安装管理人员而言是一条艰难的道路,并且由于我们的密码保险库包含特殊字符而没有单引号会导致问题,因此这很麻烦。

如何重写上面的内容,以确保即使用户通过密码时也将密码放在单引号中而不将它放在单引号中?谢谢!

mklement0

如果要将该字符串作为参数传递,则您所要求的操作无法完成,因为这将需要停用命令行解析器-识别单个参数,评估变量引用和其中包含的子表达式的机制将它们绑定到参数。

使用有限的特殊字符集,您可以忽略解析器绑定的值,并手动解析$MyInvocation.Line原始命令行,但不仅如此,它还会被诸如|和的字符破坏;

但是,您可以通过交互式提示实现所需的功能如果用户碰巧没有-SqlServerPassword在命令行上传递参数,虽然您也会在代码中得到这样的提示,但这并不能防止潜在的不正确的命令行使用。(此外,此自动提示不是用户友好的操作,并且存在一些怪癖,例如无法使用来开始值!)。

如果可行,您可以要求用户使用,以交互方式输入值(并且也不允许将值作为参数传递)Read-Host,在这种情况下,不必-且不得-

param(
  # Do NOT define $SqlServerPassword as a parameter (but define others)
)

# Prompt the user for the password.
# The input is invariably treated as a literal.
Write-Host "Please enter the SQL Server password:"
[string] $SqlServerPassword = Read-Host

# Validate the user's input.
if (-not $SqlServerPassword) { Throw 'Aborted.' }
# ...

注意:Read-Host具有一个-Prompt参数,该参数直接接受提示字符串,但是如果要使用它,则将无法输入以!;开头的值因此,该提示是用Write-Host上面的单独语句编写的

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python查找用单引号引起来的字符串

检查字符串是否用单引号引起来Javascript

用引号引起来的字符串处理引号

如何在单引号引起来的字符串中转义单引号

php:字符串被双引号引起来,而不是单引号引起来。怎么修?

从字符串中删除所有未用单引号或双引号引起来的空格

Symfony Yaml组件:如何在使用Yaml :: dump时始终将字符串用引号引起来

请给RegEx帮助-用引号引起来的字符串中包含双引号

使用JavaScript提取由数字无关的双引号引起来的子字符串

SQLException:字符串'''后的右引号引起来

ASP.NET Core API发送用双引号引起来的字符串

用双引号引起来的字符串拆分问题

Python:用空格分隔的字符串的每个词都用引号引起来

字符串扩展-用引号引起来的变量转义为值

通过Web API发送的字符串用引号引起来

字符串的正则表达式,可选地用引号引起来

如果用双引号引起来,awk上的逗号分隔字符串将忽略

分割包含连续逗号和用引号引起来的逗号的字符串

C#正则表达式提取用单引号引起来的字符串

连接用引号引起来的逗号分隔的字符串(给定包含这些字符串的结构的列表)

Zsh:为什么\ n用单引号引起来?

将Yaml数据用单引号引起来

变量无法用单引号引起来

为什么optionsText用单引号引起来?昏死

将JSON字符串传递给Azure CLI时,期望属性名称用双引号引起来(来自PowerShell)

',(用引号引起来)

正则表达式用于在不将单引号或双引号引起来时使用空格分割字符串

使用util.format,在数组中的每个字符串周围用双引号引起来

VBScript Regex当数字用引号引起来时替换