我有一个powershell脚本,我希望在命令行中传递相当少的参数。拥有多个参数不是问题,因为它被配置为计划任务,但我想让支持人员更容易,因此如果他们需要从命令行运行脚本,他们输入的内容就更少了。
所以,我正在考虑在文本文件中使用参数的选项,使用每行中带有键/值对的Java样式属性文件,或者每个参数都有一个元素的简单XML文件元素和价值元素。
arg1=value1
arg2=value2
我对PowerShell专家对这两个选项的看法感兴趣,以及这是否正确。
由于
答案 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
到实际数组中。