powershell脚本从txt读取参数

时间:2015-07-16 21:08:02

标签: powershell parameters powershell-v4.0

我有一个带有2个参数(名称和位置)的脚本。我根据此帖Powershell parameters from file将名称和位置放入txt文件中。我被提示为第二个参数输入值:

Import-Csv 'C:\temp\paramtest.txt' | % { C:\temp\script\paramtest.ps1 @_ }
  

cmdlet paramtest.ps1 at命令管道位置1的供应值   以下参数:param2:**

这就是我的.txt的样子:

"param","param2"
"foo","c:\temp"
"bar","c:\temp"
"foobar","c:\temp"

和Powershell脚本很简单:

Param (
    [Parameter(mandatory=$true,Position=1)]
    [string]$param, 
    [Parameter(mandatory=$true,Position=2)]
    [string]$param2
    ) 

$greeting='Hello to ' + $param + ' and ' + $param2
Write-Output $greeting

感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

使用Import-Csv cmdlet导入文件时,会返回PSCustomObject类型的对象。

splatting operator (@)需要哈希表,而不是PSCustomObject

PowerShell 3.0 +

要从txt文件导入参数,可以使用ConvertFrom-StringData cmdlet将它们作为哈希表返回:

Get-Content -Path .\test.txt -ReadCount 2 | ForEach-Object {
    $Splat = ConvertFrom-StringData $($_ -join [Environment]::NewLine)
    .\paramtest.ps1 @Splat
}

并将文本文件格式化为:

的text.txt

param=foo
param2=c:\\temp
param=bar
param2=c:\\temp
param=foobar
param2=c:\\temp

PowerShell 2.0

如果您正在使用PowerShell 2.0,或者您需要保留csv格式,则可以通过将PSCustomObject中的值重新添加到新的哈希表中来自行完成工作并执行以下操作:

Import-Csv .\test.txt |ForEach-Object {
    $Splat = @{}
    $_.psobject.Properties |ForEach-Object { $Splat[$_.Name] = $_.Value }
    .\paramtest.ps1 @Splat
}