我的DSC脚本在成功安装JAVA后通过自定义模块设置JAVA_HOME。
然后我尝试使用脚本资源中的以下行检索更新的JAVA主页 -
SetScript = "[Environment]::SetEnvironmentVariable('JAVA_HOME',[System.Environment]::GetEnvironmentVariable('JAVA_HOME','Machine'))"
我可以看到详细说明资源执行的详细日志。但是,在脚本完成后,我的控制台仍然保持着之前的 JAVA_HOME 。
我遇到的问题是,我的脚本(进一步向下)需要调用使用JAVA_HOME的批处理文件,但因为会话传递了错误的值而导致失败“系统无法找到路径指定的“
有人可以帮助解决这个问题吗?
免责声明:我对powershell非常陌生。请详细说明。
答案 0 :(得分:1)
以下代码显示了如何执行此操作:
configuration envtest
{
Script s1
{
GetScript = {
}
SetScript = {
$ENV:FOOBAR > c:\temp\env.txt
}
TestScript = {
[environment]::SetEnvironmentVariable("FOOBAR", "hi there", "MACHINE")
$ENV:FOOBAR = [environment]::GetEnvironmentVariable("FOOBAR", "MACHINE")
$false
}
}
Script s2
{
GetScript = { }
TestScript = { $false }
SetScript = { $ENV:FOOBAR > c:\temp\env2.txt }
DependsOn = "[script]s1"
}
}
envtest
Start-DscConfiguration -force -Wait -Verbose -Path envtest
请注意,在DSC脚本本身中,只有脚本资源可以利用运行时更改,例如新的ENV变量,但是只要脚本资源首先运行,脚本生成的进程就会获取新变量。
此外,虽然ISE会告诉您脚本资源需要一个字符串,但我们建议使用脚本块而不是字符串 - 这更简单,并且可以减少引用错误。如果你需要脚本来获取编译时变量的值,请使用$ using:myCompileTimeVariable而不是$ myCompileTimeVariable,一切都应该正常工作。
答案 1 :(得分:1)
作为一种更清洁的替代方案,环境有一个DSC资源。从他们在GitHub中的代码来看,如果你想尝试的话,它似乎也会 [environment] :: GetEnvironmentVariable(“FOOBAR”,“MACHINE”)部分。
Environment [string] #ResourceName
{
Name = [string]
[ Ensure = [string] { Absent | Present } ]
[ Path = [bool] ]
[ DependsOn = [string[]] ]
[ Value = [string] ]
}
参考:https://docs.microsoft.com/en-us/powershell/dsc/environmentresource
代码:@Line 647
答案 2 :(得分:0)
SetEvironmentVariable 为其运行的进程设置变量(默认情况下,它还可以为机器或用户设置它。)DSC脚本作为系统帐户运行的单独进程运行,无法更新您的控制台。它基于脚本显示已在机器级别更新。要在控制台中获取变量,您必须执行以下两项操作之一: