VBScript 到 Powershell - 环境变量
VBScript to Powershell - Environment Variables
我目前正在开发一个 powershell 脚本,它映射目录以及加载数据库软件。我有这个当前的 vbscript,我正在转换为 powershell,它假设要验证一个临时文件路径,但我对我可能需要取出的东西和我可以留下的东西有点困惑。
这里是原文vbscript ...
'
' assure that temp version of Perl is used
'
perlPath = basePath & "install\perl\bin;"
WshShell.Environment("Process")("PATH") = perlPath & WshShell.Environment("System")("PATH")
'
' assure that temp version of Perl Lib is used
'
perlLib = basePath & "\install\perl\lib;" & basePath & "\install\perl\site\lib;"
WshShell.Environment("Process")("PERL5LIB") = perlLib
这是我目前在powershell中写的...
#
# assure that Oracle's version of Powershell is used
#
$psPath = $basePath + "install\powershell\bin;"
$sysPath = $WshShell.Environment("System") | Where-Object { $_ -match "PATH" } |
foreach-object {$_.Substring(9)} | Out-String
$psPos = $sysPath.contains($psPath)
if( -not ($psPos)){
[Environment]::SetEnvironmentVariable("PATH", ($psPath + $sysPath), "Process")
}
#
# assure that Oracle's version of Powershell Module is used
#
$psMod = $homePath + "\perl\lib;" + $homePath + "\perl\site\lib;" # still need to convert
$sysMod = $Env:PSModulePath
$psPos = $sysMod.contains($psMod)
if( -not ($psPos)){
[Environment]::SetEnvironmentVariable("PATH", ($psPath + $sysChk), "Process")
}}
稍后在脚本中使用 "System" 变量进行相同的验证。我确实有一个我将要使用的模块,但其余的都是脚本。我想我不确定我正在转换的东西是否是验证这些路径存在的正确方法,如果不是添加新路径。
首先,您应该使用 Join-Path cmdlet 组合路径:
$psPath = Join-Path $basePath "install\powershell\bin"
您可以使用 $env:Path
访问 Path
变量,使用 -split ';'
拆分它, select 使用 [0]
的第一个路径条目。总而言之,我会定义您要设置的三个路径,将它们放入一个数组中并对其进行迭代。
$powershellBin = Join-Path $basePath "install\powershell\bin"
$perLib = Join-Path $homePath "\perl\lib"
$perlSiteLib = Join-Path $homePath "\perl\site\lib"
@($powershellBin, $perLib, $perlSiteLib) | foreach {
if (-not (($env:Path -split ';')[0].Equals($_)))
{
[Environment]::SetEnvironmentVariable("PATH", ("{0};{1}" -f $_, $env:Path), "Process")
}
}
我目前正在开发一个 powershell 脚本,它映射目录以及加载数据库软件。我有这个当前的 vbscript,我正在转换为 powershell,它假设要验证一个临时文件路径,但我对我可能需要取出的东西和我可以留下的东西有点困惑。
这里是原文vbscript ...
'
' assure that temp version of Perl is used
'
perlPath = basePath & "install\perl\bin;"
WshShell.Environment("Process")("PATH") = perlPath & WshShell.Environment("System")("PATH")
'
' assure that temp version of Perl Lib is used
'
perlLib = basePath & "\install\perl\lib;" & basePath & "\install\perl\site\lib;"
WshShell.Environment("Process")("PERL5LIB") = perlLib
这是我目前在powershell中写的...
#
# assure that Oracle's version of Powershell is used
#
$psPath = $basePath + "install\powershell\bin;"
$sysPath = $WshShell.Environment("System") | Where-Object { $_ -match "PATH" } |
foreach-object {$_.Substring(9)} | Out-String
$psPos = $sysPath.contains($psPath)
if( -not ($psPos)){
[Environment]::SetEnvironmentVariable("PATH", ($psPath + $sysPath), "Process")
}
#
# assure that Oracle's version of Powershell Module is used
#
$psMod = $homePath + "\perl\lib;" + $homePath + "\perl\site\lib;" # still need to convert
$sysMod = $Env:PSModulePath
$psPos = $sysMod.contains($psMod)
if( -not ($psPos)){
[Environment]::SetEnvironmentVariable("PATH", ($psPath + $sysChk), "Process")
}}
稍后在脚本中使用 "System" 变量进行相同的验证。我确实有一个我将要使用的模块,但其余的都是脚本。我想我不确定我正在转换的东西是否是验证这些路径存在的正确方法,如果不是添加新路径。
首先,您应该使用 Join-Path cmdlet 组合路径:
$psPath = Join-Path $basePath "install\powershell\bin"
您可以使用 $env:Path
访问 Path
变量,使用 -split ';'
拆分它, select 使用 [0]
的第一个路径条目。总而言之,我会定义您要设置的三个路径,将它们放入一个数组中并对其进行迭代。
$powershellBin = Join-Path $basePath "install\powershell\bin"
$perLib = Join-Path $homePath "\perl\lib"
$perlSiteLib = Join-Path $homePath "\perl\site\lib"
@($powershellBin, $perLib, $perlSiteLib) | foreach {
if (-not (($env:Path -split ';')[0].Equals($_)))
{
[Environment]::SetEnvironmentVariable("PATH", ("{0};{1}" -f $_, $env:Path), "Process")
}
}