早安,
我已经编写了PowerShell函数,以帮助我更新一堆Windows 7和10 Enterprise计算机上的系统环境变量。但是,我注意到,我的“ [System.Environment] :: SetEnvironmentVariable()” 命令正在删除现有变量,并且未更改其值-就像我期望的那样。>
我在做什么错了?
以下是相关代码的片段:
$ComputerName = "SERVER1"
$MyEnvVar = "C:\Some_Path\"
ForEach ($Computer in $ComputerName){
$Online = Test-Connection -ComputerName $Computer -Count 2 -Quiet
If ($Online -eq $True){
$OldValue = Invoke-Command $Computer -ScriptBlock {[System.Environment]::GetEnvironmentVariable("MyVariableName","Machine")}
Write-Host "Old Value is: $OldValue"
Invoke-Command $Computer -ScriptBlock {[System.Environment]::SetEnvironmentVariable("MyVariable","$MyEnvVar","Machine")}
$NewValue = Invoke-Command $Computer -ScriptBlock {[System.Environment]::GetEnvironmentVariable("MyVariableName","Machine")}
Write-Host "New Value is: $NewValue"
}
}
答案 0 :(得分:2)
更改此行:
Invoke-Command $Computer -ScriptBlock {[System.Environment]::SetEnvironmentVariable("MyVariable","$MyEnvVar","Machine")}
收件人:
Invoke-Command $Computer -ScriptBlock {[System.Environment]::SetEnvironmentVariable("MyVariable",$Using:MyEnvVar,"Machine")}
来自about_scopes:
示例5:在远程命令中使用局部变量
对于在本地会话中创建的远程命令中的变量,请使用“使用范围”修饰符。 PowerShell假定远程命令中的变量是在远程会话中创建的。