Я столкнулся со странной проблемой: я установил переменные Path в Windows, после перезагрузки они исчезают, пока я не увижу настройки переменных среды.

Я могу восстановить их, просто выполнив:

System Properties => [Environment Variables] => [OK]

... тогда они установлены снова!

Примечание: если я наберу [SET] , я увижу их в своем Path

Пример:

У меня есть дополнение к моему пути, которое указывает на:%USERPROFILE%\Documents\WindowsPowerShell\Scripts

В ^^ что ^^ dir у меня есть файл myscript.ps1 .

Если я открою PowerShell после загрузки, я могу напечатать «my [TAB] », и сценарий не будет найден.

После открытия диалогового окна "Переменные среды" и выбора [OK] , перезапуска PowerShell, я могу сделать то же самое «my [TAB] » и автоматически заполнить «myscript.ps1» без каких-либо проблем.

Кто-нибудь знает, как решить эту проблему?

1 ответ1

1

Это не настоящий ответ (слишком длинный и слишком сложный для комментария). Я удалю его, если он окажется ложным.

Пожалуйста, используйте следующий простой скрипт, чтобы проверить, правильно ли задан ваш path :

Function myTest-Path {
Param( [Parameter(Mandatory=$true)] [string] $PathString )
if ( $PathString -match '%' ) { $PathString = (. cmd /c "echo($PathString")}
if ( Test-Path -Path $PathString -IsValid) {
        [string] (Test-Path (Join-Path -ChildPath '' -Path $PathString))
    } else { '!wrong' }
}

### Windows path validity check ###
Write-Host '$env:Path splitted' -ForegroundColor Yellow
$aux = $env:Path
$aux -split ";" | ForEach-Object {'{0,6} "{1}"' -f (myTest-Path $_), $_}

Write-Host 'HKCU:\Environment\ Path splitted' -ForegroundColor Yellow
$aux = ([Microsoft.Win32.Registry]::CurrentUser.
    OpenSubKey("environment")).
    GetValue("Path",$False, 
        [Microsoft.Win32.RegistryValueOptions]::DoNotExpandEnvironmentNames)
$aux -split ";" | ForEach-Object {'{0,6} "{1}"' -f (myTest-Path $_), $_}

Write-Host 'HKLM:\SYSTEM\…\Environment\ Path splitted' -ForegroundColor Yellow
$aux = ([Microsoft.Win32.Registry]::LocalMachine.
    OpenSubKey("SYSTEM\CurrentControlSet\Control\Session Manager\Environment")).
    GetValue("Path",$False, 
        [Microsoft.Win32.RegistryValueOptions]::DoNotExpandEnvironmentNames)
$aux -split ";" | ForEach-Object {'{0,6} "{1}"' -f (myTest-Path $_), $_}

Write-Host '$env:Path duplicities' -ForegroundColor Yellow
$auxArr = $env:Path -split ";"
for ($i = 0; $i -le $auxArr.Count; $i++) {
    for ($j = $i+1; $j -le $auxArr.Count -1; $j++) {
        try {
            if ( (Join-Path -ChildPath '' -Path $auxArr[$j] -ErrorAction Stop) -eq 
                 (Join-Path -ChildPath '' -Path $auxArr[$i] -ErrorAction Stop) )   {
                    '{0,4} {1,4} "{2}"' -f $i, $j, $auxArr[$i]
            }
        } catch {
            ### Write-Host "$i $j invalid folder name in `$env:Path" -ForegroundColor Red
        }
    }
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .