PowerShell:在文件中提供参数

时间:2017-02-16 08:04:50

标签: powershell

有没有办法用文件提供powershell参数? 目前我有一个名为My_Script.ps1的脚本。要启动此脚本,我必须在命令中提供正确的参数:

.\My_Script.ps1 -param1="x" -param2="x" -param3="x" -param4="x" -param5="x" -param6="x" ...

这可行,但它不是一个非常简单的启动脚本的方法。在PowerShell中是否可以使用存储参数的文件并在启动脚本时使用该文件?

实施例

My_Script.ps1中我添加了类似的内容:

Param(
   [string]$File="Path/to/file"
   )

在我的文件中,我有类似

的内容
param1="x"
param2="x"
param3="x"
param4="x"
...

要执行脚本,您可以编辑文件,然后使用.\My_Script.ps1

启动脚本

3 个答案:

答案 0 :(得分:2)

另一种选择: 只需使用ps1文件作为配置文件,并像在主脚本中那样定义变量

$Param1 = "Value"
$Param2 = 42

然后您可以使用dot-sourcing或import-module从配置文件中获取数据

. .\configfile.ps1

Import-Module .\Configfile.ps1

之后你可以使用变量

答案 1 :(得分:1)

除了splatting,您还可以在文件中的=个分隔值中创建变量。

param1=foo
param2=bar
param3=herp
param4=derp

不要引用这些值。参数名称应该对变量有效(没有空格等)

  • PowerShell 3和更新版本:

    (Get-Content c:\params.ini -raw | ConvertFrom-StringData).GetEnumerator() |
         ForEach { Set-Variable $_.name $_.value }
    
  • PowerShell 2:

    ([IO.File]::ReadAllText('c:\params.ini') | ConvertFrom-StringData).GetEnumerator() |
         ForEach { Set-Variable $_.name $_.value }
    

代码在当前范围内创建变量。可以在全局/脚本/父scope中创建。

答案 2 :(得分:0)

您可以使用此blog posting  开始并以类似ini的格式声明参数。

当然,您也可以使用类似csv的格式并使用import-csv cmdlet。