我有一个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}}
有关如何实现这一目标的任何想法?
答案 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