2015-08-27 4 views
1

В настоящее время я работаю над скриптом powershell, который отображает каталоги вместе с загрузкой программного обеспечения базы данных. У меня есть текущий vbscript, который я конвертирую в powershell, который предположительно проверяет временный путь к файлу, но я немного запутался в том, что мне может понадобиться, чтобы вынуть и что я могу оставить.VBScript to 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") 
}} 

Такая же проверка выполняется позже в скрипте с переменными «Система». У меня есть модуль, который я буду использовать, но остальные - это скрипты. Наверное, я не уверен, что то, что я конвертирую, это правильный способ проверить, существуют ли эти пути и не добавлять новые пути.

ответ

1

Прежде всего, вы должны использовать Join-Path командлет для объединения пути:

$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") 
    } 
} 
+0

спасибо за прекрасный пример! Не понял, что в командной оболочке есть командлет «Join-Path». –

Смежные вопросы