在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 作为参数,我将它设置在脚本中。

我需要什么

如何在不弄乱所有变量的情况下成功移交此多行参数?

解决方法

不使用参数 -Filepowershell.exe 之后的内容被视为 -Command,它执行指定的命令(和任何参数),就像它们是在PowerShell 命令提示符。

但是,在这种情况下,您希望它运行另一个存储在文件中的 PowerShell 脚本。
-File <PathToTheScript> 一起使用时,脚本在本地范围内运行(“点源”),以便脚本创建的函数和变量在当前会话中可用。
File 参数之后键入的所有值都被解释为脚本文件路径和传递给该脚本的参数。

这意味着将您的代码更改为

powershell -File '.\test.ps1' -NORMAL_STRING "This is a Normal String!" -MULTILINE_STRING $MLINE_VARIABLE

会按预期工作

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...