问题描述
设置
在我编写的 powershell 脚本中,我使用了如下所示的多行字符串:
$MLINE_VARIABLE = "*file1
- change1
- change2
*file_2
- change1
- change2
*file-3
- change1
- change2"
由于这个字符串被保存为一个变量,我想将该变量作为参数提供给脚本:
param(
[string]$norMAL_STRING,[string]$MULTILINE_STRING
)
echo $norMAL_STRING
echo $MULTILINE_STRING
运行脚本
我对 powershell 相当陌生,但对 bash 脚本感觉很好。我用多个输入测试了这个脚本。结果如下:
powershell .\test.ps1 -norMAL_STRING "This is a normal String!" -MULTILINE_STRING $MLINE_VARIABLE
第一次运行导致以下长错误消息(错误消息是德语,我翻译了第一次出现的错误):
powershell : In line:2 char:4
In line:1 char:1
+ powershell .\small_test.ps1 -norMAL_STRING "THIS IS A norMAL STRING!" ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (In line:2 char:4:String) [],remoteexception
+ FullyQualifiedErrorId : NativeCommandError
+ - change1
+ ~
Missing expression after unary operator '-'.
In line:2 char:5
+ - change1
+ ~~~~~~~
Unexpected token "change1" in expression or statement.
In line:3 char:4
.
.
.
Not all analytical errors were reported. Correct the reported errors and try again.
+ CategoryInfo : ParserError: (:) [],ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingExpressionAfterOperator
下一个测试我没有使用多行字符串进行完整性检查:
powershell .\test.ps1 -norMAL_STRING "This is a normal String!"
我意识到脚本正在运行,但只显示正常字符串的前 2 个条目:
>> This
>> is
我假设 norMAL_STRING
以某种方式设置为“This”,而缺少的参数 MULTILINE_STRING
设置为“is”。
为了测试脚本是否按预期工作,我更改了参数 -norMAL_STRING "This_is_a_normal_Parameter"
,而不是使用 $MULTILINE_STRING
作为参数,我将它设置在脚本中。
我需要什么
如何在不弄乱所有变量的情况下成功移交此多行参数?
解决方法
不使用参数 -File
,powershell.exe
之后的内容被视为 -Command
,它执行指定的命令(和任何参数),就像它们是在PowerShell 命令提示符。
但是,在这种情况下,您希望它运行另一个存储在文件中的 PowerShell 脚本。
与 -File <PathToTheScript>
一起使用时,脚本在本地范围内运行(“点源”),以便脚本创建的函数和变量在当前会话中可用。
在 File
参数之后键入的所有值都被解释为脚本文件路径和传递给该脚本的参数。
这意味着将您的代码更改为
powershell -File '.\test.ps1' -NORMAL_STRING "This is a Normal String!" -MULTILINE_STRING $MLINE_VARIABLE
会按预期工作