Powershell-变量问题

Powershell-变量问题,powershell,environment-variables,Powershell,Environment Variables,我编写了一个脚本,可以从.properties文件(基本上是一个配置文件)中提取数据。属性文件中的一些数据包含环境数据(即%UserProfile%),因此我通过一个函数(Resolve–EnvVariable)运行它,该函数将用实际值替换环境变量。替换工作正常,但数据似乎被修改了。 当我尝试使用通过函数运行的值时,它们不再工作(请参见下面的结果) 这是c:\work\test.properties的文件内容 types=“*.txt” in=“%UserProfile%\Downloads”

我编写了一个脚本,可以从.properties文件(基本上是一个配置文件)中提取数据。属性文件中的一些数据包含环境数据(即%UserProfile%),因此我通过一个函数(Resolve–EnvVariable)运行它,该函数将用实际值替换环境变量。替换工作正常,但数据似乎被修改了。 当我尝试使用通过函数运行的值时,它们不再工作(请参见下面的结果)

这是c:\work\test.properties的文件内容

types=“*.txt”
in=“%UserProfile%\Downloads”
这是我的PowerShell脚本

清除主机
#读取属性文件并在指定时替换参数
if(测试路径C:\work\Test.properties){
$propertiesFile=获取内容C:\work\test.properties
写入主机“参数将从属性文件中替换”-ForegroundColor黄色
foreach($propertiesFile中的行){
写入主机(“从属性文件$line”)
$propSwitch=$line.Split(“=”[0]
$propValue=Resolve–EnvVariable($line.Split(“=”)[1])
交换机($propSwitch){
“类型”{$types=$propValue}
“{$in=$propValue}
}
}
}
写入主机(“在运行函数`n in=“+$in+”后,有两种选择:

1.使用
Environment.ExpandEnvironmentVariables()
如果您切换到非限定字符串值并转义了
\
,这将非常简单,只需将文件管道传输到
ConvertFrom StringData
,此时您可以使用
环境展开变量值。ExpandEnvironmentVariables()

属性文件:

types=*.txt
在=%UserProfile%\\Downloads中
脚本:

#将文件转换为哈希表
$properties=Get Content file.properties-Raw | ConvertFrom StringData
#将值复制到新哈希表,但首先展开env vars
$expanded=@{}
foreach($properties.GetEnumerator()中的条目){
$expanded[$entry.Key]=[Environment]::ExpandEnvironmentVariables($entry.Value)
}
应为您提供所需的值:

PS C:\>$expanded
名称值
----                           -----
在C:\Users\username\Downloads中
类型*.txt

2.为您的属性使用并点源PowerShell脚本 这是直接从原始Exchange Server模块的一页中提出来的—将所有配置变量放在单独的脚本中,在初始化新会话时,这些脚本又是源代码:

属性文件:

$types=“*.txt”
$in=加入路径$env:USERPROFILE下载
脚本:

#点源变量
(连接路径$PSScriptRoot属性.ps1)
#做实际工作
获取子项$in-包含$types

您实际试图解决的问题是什么?请描述问题-而不是您认为需要解决问题的尝试性解决方案。为什么不使用Powershell版本的环境变量,如
$ENV:USERPROFILE
?我不知道您在这里尝试做什么。您能进一步澄清一下您的问题吗?