powershell脚本从txt读取参数

powershell脚本从txt读取参数,powershell,parameters,powershell-4.0,Powershell,Parameters,Powershell 4.0,我有一个脚本,它有两个参数(名称和位置)。我把名字和位置放在一个txt文件中,就像这篇文章一样。我被提示输入第二个参数的值: Import Csv'C:\temp\paramtest.txt'|%{C:\temp\script\paramtest.ps1@} 命令管道位置1处的cmdlet paramtest.ps1为 以下参数:param2:** 这就是my.txt的外观: “param”、“param2” “foo”,“c:\temp” “条”,“c:\temp” “foobar”、“c:

我有一个脚本,它有两个参数(名称和位置)。我把名字和位置放在一个txt文件中,就像这篇文章一样。我被提示输入第二个参数的值:

Import Csv'C:\temp\paramtest.txt'|%{C:\temp\script\paramtest.ps1@}
命令管道位置1处的cmdlet paramtest.ps1为 以下参数:param2:**

这就是my.txt的外观:

“param”、“param2”
“foo”,“c:\temp”
“条”,“c:\temp”
“foobar”、“c:\temp”
Powershell脚本非常简单:

Param(
[参数(必需=$true,位置=1)]
[字符串]$param,
[参数(必需=$true,位置=2)]
[字符串]$2
) 
$greeting='Hello to'+$param+'和'+$param2'
写入输出$greeting

非常感谢您的帮助。

当您使用
import-Csv
cmdlet导入文件时,将返回
PSCustomObject
类型的对象

需要的是哈希表,而不是
PSCustomObject


PowerShell 3.0+ 要从txt文件导入参数,可以使用cmdlet将其作为哈希表返回:

Get-Content -Path .\test.txt -ReadCount 2 | ForEach-Object {
    $Splat = ConvertFrom-StringData $($_ -join [Environment]::NewLine)
    .\paramtest.ps1 @Splat
}
并按如下方式格式化文本文件:

text.txt
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
}

什么版本的PowerShell?从Get Host和$PSVersionTable中,我得到了:version=4。谢谢Mathias的建议。我需要阅读更多关于Splatting的内容,以了解上述内容是如何工作的,这样我就可以让用户更容易使用它。最后,我会让一个普通用户将该值放入.txt文件,剪切并粘贴命令以运行此脚本-因此我需要亲吻(保持简单)此过程和脚本。谢谢大家在这个主题上给我指导。我采取了不同的方法。我将代码更改为:@lmbNbirt如果您自己找到了替代解决方案,请将其作为答案发布!:-)抱歉…编辑时间不足…“谢谢大家给我这个主题的指导。我采用了不同的方法。我将代码更改为:foreach($name in get content“paramtest.txt”){do somthing with$name}.paramtest.txt现在只有一列值。目前,此解决方案可行,但最终我必须重新访问Splatting并使用函数使脚本正常工作。“@lmbNbirt正如我所说:发布答案,而不是评论!
Import-Csv .\test.txt |ForEach-Object {
    $Splat = @{}
    $_.psobject.Properties |ForEach-Object { $Splat[$_.Name] = $_.Value }
    .\paramtest.ps1 @Splat
}