我试图用PowerShell脚本从ps1文件中读取参数。(使用powershell inputfile.ps1 运行,它正在调用 evaluation.ps1)输入文件如下所示:
$a=5
$b=""
$c=
$d=555
不幸的是,似乎不可能用传统方法检测不存在的变量'c',例如$null
,-eq ""
,''
,-is [string]
或类似方法。这导致我的PowerShell脚本自动使用变量'd '中的下一个值。最后,我得到了这样的信息:
echo "$a"
5
echo "$b"
echo "$c"
555
echo "$d"
555
是否有可能避免使用下一行的值或以某种方式检测丢失的输入?不幸的是,不应该触及ps1-input文件(我知道当使用空字符串作为输入时,如b="",所有上述方法都可以正常工作)。
谢谢你的任何帮助提前。
我想我已经在这里尝试了所有的stackoverflow提示,但是因为它不是一个字符串,而是一个空输入,所以什么都不起作用。
1条答案
按热度按时间oxf4rvwz1#
把它拼出来:您的
.ps1
脚本 * 与您的意图有关 * 格式不正确,因为:尽管有换行符,但与
$c=$d=555
相同,它通过设计将555
分配给 * both *$c
和$d
。如果您希望将
$c
改为$null
,则有两个基本选项:$null
替换=
后面的缺失值,然后通过Invoke-Expression
执行预处理后的内容,而不是点源化Invoke-Expression
(即generally to be avoided)允许执行任意代码,请确保您完全控制或隐式信任脚本的内容。Set-Variable
逐个定义变量。(a)的实现
注意事项:
=
结尾的行也是一个简单的赋值语句,如您的问题所示。-replace
操作匹配行尾=
(可选择仅跟空格),并将其替换为逐字=$null
。这意味着这样的变量仍然是 * 定义 * 的,但值为$null
。(?m)=\s*$
)的解释以及使用它进行实验的能力,请参阅this regex101.com page。(b)的实现
注意事项: