来自文件的命令行参数

时间:2014-08-14 15:17:49

标签: powershell

我有一个powershell脚本,我希望在命令行中传递相当少的参数。拥有多个参数不是问题,因为它被配置为计划任务,但我想让支持人员更容易,因此如果他们需要从命令行运行脚本,他们输入的内容就更少了。

所以,我正在考虑在文本文件中使用参数的选项,使用每行中带有键/值对的Java样式属性文件,或者每个参数都有一个元素的简单XML文件元素和价值元素。

arg1=value1
arg2=value2

我对PowerShell专家对这两个选项的看法感兴趣,以及这是否正确。

由于

2 个答案:

答案 0 :(得分:2)

如果要使用ini文件方法,可以轻松解析ini数据,如下所示:

$ini = ConvertFrom-StringData (Get-Content .\args.ini -raw)
$ini.arg1

这种方法的一个缺点是所有arg类型都是string这适用于字符串甚至数字AFAICT。跌倒的地方是[switch] args。传递True$true没有达到预期的效果。

另一种方法是将args放在.ps1文件中并执行它以获取一个哈希表,其中包含所有可以进行splat的args,例如:

-- args.ps1 --
@{
ComputerName = 'localhost'
Name = 'foo'
ThrottleLimit = 50
EnableNetworkAccess = $true
}

$cmdArgs = .\args.ps1
$s = New-PSSession @cmdArgs

答案 1 :(得分:0)

为了略微扩展Keith的答案,可以根据配置文件中的值设置实际变量,例如

$ini = ConvertFrom-StringData (Get-Content .\args.ini -raw)
$ini.keys | foreach-object { set-variable -name $_ -value $ini.Item($_) }

所以包含

的文件
a=1
b=2
c=3

使用上面的代码处理时,应该会创建三个变量:

$a = 1, $b = 2, $c = 3

我希望这对于简单的字符串值有用,但我很确定它不会“智能”转换,比如说myArray = 1,2,3,4,5到实际数组中。