Есть ли у Powershell кэш, который необходимо очистить?

сегодня утром я скопировал каталог с моего локального сетевого диска в папку temp для тестирования. Эта ошибка появилась.

Get-Content : Cannot find path 'C:usersxxxxxdesktopcgcAutomatic_Post-Call_Survey_-_BC,_CC.txt' because it does no
t exist.
At C:usersxxxxxdesktopcgctestcountexcl1.ps1:55 char:12
+ Get-Content <<<<  $txtfile | Get-WordCount -Exclude (Get-Content c:tempexclude.txt) | select -First 15
    + CategoryInfo          : ObjectNotFound: (C:usersxxxxx...ey_-_BC,_CC.txt:String) [Get-Content], ItemNotFoundEx
   ception
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand

этого можно было бы ожидать при перемещении ... PS не может найти указанный путь...но я сделал следующее изменение перед запуском скрипта (старый прокомментировал выше нового):

$input = Get-Content c:tempwordCount.txt
<# $inpath = "C:usersxxxxxdesktopcgctx"    #>
$inpath = "C:temptx"  
$srcfiles = Get-ChildItem $inpath -filter "*.txt"    
$notPermittedWords = Get-Content c:tempexclude.txt 

мое первое подозрение, что есть какой-то кэш, содержащий мой $inpath переменная с моего последнего запуска...но не смогли выяснить, если это ожидаемое поведение в PowerShell. Я неправильно истолковываю ошибку или решение? Как очистить кэш или любые varables могут храниться в памяти?

3 ответов


переменные хранятся в сеансе, поэтому, если вы закроете консоль powershell и откроете новую, все пользовательские переменные исчезнут. Если вы хотите увидеть, какие переменные существуют, используйте Get-Variable . Чтобы удалить определенную переменную(чтобы убедиться, что она исчезла), вы можете использовать:

Remove-Variable varname.

Что касается вас вопрос. Переменная в глобальной области(сеанс) сохраняется в сеансе до тех пор, пока она не будет удалена или перезаписана. Если вы использовали одну и ту же консоль powershell для запуска этого кода дважды, тогда $inpath должно быть установлено в "C:\temp\tx" второй раз, и $srcfiles будет обновлен с новым списком файлов.


мне не нравится идея закрывать и снова открывать каждый раз, когда мне нужно очистить кэш.

это работает в PowerShell

Remove-Variable * -ErrorAction SilentlyContinue; Remove-Module *; $error.Clear(); Clear-Host


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

,@("MyModule1","MyModule2") | %{&remove-module -erroraction:silentlycontinue $_}

трубопровод-путь воодушевленный от здесь

таким образом, один лайнер Патрика станет Remove-Variable * -ErrorAction SilentlyContinue; ,@("MyModule1","MyModule2") | %{&Remove-Module -ErrorAction:SilentlyContinue $_}; $error.Clear(); Clear-Host