从import-csv动态替换字符串

时间:2015-09-17 13:49:43

标签: powershell csv dynamic replace

我有一个csv文件,其中包含值以" $"开头的字段它代表了不同PowerShell脚本中的变量。我试图导入csv,然后用脚本中的实际变量替换变量的字符串版本(例如' $ var1')。我已经能够从输入中隔离出适当的字符串,但是我在修改值时难以转弯。

示例:

CSV输入文件 -

In Server,Out Server
\\$var1\in_Company1,\\$var2\in_Company1
\\$var1\in_Company2,\\$var2\in_Company2

脚本(到目前为止) -

$Import=import-csv "C:\temp\test1.csv"
$Var1="\\server1"
$Var2="\\server2"
$matchstring="(?=\$)(.*?)(?=\\)"
$Import| %{$_ | gm -MemberType NoteProperty | 
%{[regex]::matches($Import.$($_.name),"$matchstring")[0].value}}

有关如何实现这一目标的任何想法?

2 个答案:

答案 0 :(得分:2)

我能想到的解决这个问题的最简单方法是将变量扩展视为替换。您可以在CSV中设置变量,因此我们只需将它们扩展为脚本中各自的值即可。

#  If you dont have PowerShell 3.0 -raw will not work use this instead
#  $Import=Get-Content $path | Out-String

$path = "C:\temp\test1.csv"
$Import = Get-Content $path -Raw
$Var1="\\server1"
$Var2="\\server2"
$ExecutionContext.InvokeCommand.ExpandString($Import) | Set-Content $path

这将在$path

中净化以下输出
In Server,Out Server
\\\\server1\in_Company1,\\\\server2\in_Company1
\\\\server1\in_Company2,\\\\server2\in_Company2

如果斜杠在这里加倍并且您不希望它们只是更改CSV中数据脚本中的相应变量值。

<强>买者

这有可能执行您并不意味着的恶意代码。在Expanding variables in file contents上查看此主题以获取更多信息。如果您对风险感到满意,那么此解决方案应该没问题。

答案 1 :(得分:1)

也许我误解了,但你需要这个吗?

$Import=import-csv "C:\temp\test1.cvs"
$Var1="\\server1"
$Var2="\\server2" 

Foreach ($row in $Import )
{
    $row.'In Server' = ($row.'In Server' -replace '\\\\\$var1', "$var1")
    $row.'Out Server' = ($row.'Out Server' -replace '\\\\\$var2', "$var2")    
}

$import | set-content $path