Powershell的VBScript - 环境变量

时间:2015-08-27 12:43:57

标签: powershell vbscript powershell-v2.0

我目前正在开发一个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"进行相同的验证。变量。我有一个我将使用的模块,但其余的是脚本。我想我不确定我转换的是否是验证这些途径存在的正确方法,如果不是,则添加新途径。

1 个答案:

答案 0 :(得分:1)

首先,您应该使用instructions cmdlet组合路径:

$psPath = Join-Path  $basePath "install\powershell\bin" 

您可以使用Path使用$env:Path分割-split ';'变量并使用[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")
     }
 }