我正在尝试从文本文件中读取值并将它们作为变量保存在我的脚本中使用。
此配置文件包含字符串、整数、布尔值和一个可以包含字符串、整数和布尔值的数组。
当我直接声明变量时,我没有问题。我的脚本按预期运行。但是,当我阅读配置文件并尝试基于该文件创建变量时,我只会得到声明为字符串的变量。
这会以我想要的格式创建我的配置文件。
Function Create-Config() {
If (!(Test-Path config.txt)) {
$currentlocation=Get-Location
$parentfolder=(get-item $currentlocation).parent.FullName
New-Item config.txt -ItemType "file"
Add-Content config.txt "SERVER_NAME=MyServer"
Add-Content config.txt "SERVER_LOCATION=$currentlocation"
Add-Content config.txt "BACKUP_LOCATION=$parentfolder\backup"
Add-Content config.txt "CRAFTBUKKIT=craftbukkit.jar"
Add-Content config.txt "JAVA_FLAGS=-Xmx1G"
Add-Content config.txt "CRAFTBUKKIT_OPTIONS=-o True -p 1337"
Add-Content config.txt "TEST_DEPENDENCIES=True"
Add-Content config.txt "DELETE_LOG=True"
Add-Content config.txt "TAKE_BACKUP=True"
Add-Content config.txt "RESTART_PAUSE=5"
}
}
但是,要么我需要更改创建配置文件的方式,要么更改导入这些变量的方式。我希望配置文件尽可能简单。我正在使用此代码导入值:
Function Load-Variables() {
Get-Content config.txt | Foreach-Object {
$var = $_.Split('=')
New-Variable -Name $var[0] -Scope Script -Value $var[1]
}
}
如您所见,我没有显式设置变量,因为配置中的变量是不同的类型(布尔值、整数、数组、字符串)。但是,PowerShell 将这些都作为字符串导入。我可以单独导入所有变量(我可能必须这样做),但我仍然觉得我会被困在数组上。
如果我使用此命令声明数组:
New-Variable -Name CRAFTBUKKIT_OPTIONS -Option Constant -Value ([array]@('-o',$true,'-p',25565))
我得到了我想要的,但我需要从配置文件中导入它,而不是在我的脚本中声明变量。java 程序有点挑剔,所以我不能只将该值作为字符串导入,否则它将无法正确传递并且这些选项会被忽略。我发现它工作的唯一方法是将它作为一个数组(如上定义)。我还想指出,可能会出现比我的示例中更多的配置文件选项。
我不确定什么是更好的方法 - 导入要正确声明的变量(我想做的事情),或者假设它们不能作为字符串以外的任何东西导入,然后将该字符串解析为正确的变量类型。
我尝试过事先声明变量并使用 Set-Variable 命令设置值,但这不起作用。看起来我的变量从一开始就使用 Get-Content 作为字符串而不是正确的类型导入。
完整的脚本在这里: https ://gist.github.com/TnTBass/4692f2a00fade7887ce4