在 Powershell 中将多行字符串作为脚本参数移交
Hand over multiline string as script Paramter in Powershell
设置
在我编写的 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
会按预期工作
设置
在我编写的 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
会按预期工作