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

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

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

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

$input = Get-Content c:\temp\wordCount.txt
<# $inpath = "C:\users\xxxxx\desktop\cgc\tx"    #>
$inpath = "C:\temp\tx"  
$srcfiles = Get-ChildItem $inpath -filter "*.txt"    
$notPermittedWords = Get-Content c:\temp\exclude.txt 

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


person dwwilson66    schedule 24.01.2013    source источник
comment
вы уверены, что весь код запускался оба раза? Что строки, устанавливающие $inpath и $srcfiles, были выполнены во второй раз с новым значением?   -  person Frode F.    schedule 24.01.2013
comment
они были выполнены с новым значением, но ВЕЛИ себя так, как если бы им было передано СТАРОЕ значение.   -  person dwwilson66    schedule 24.01.2013


Ответы (3)


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

Remove-Variable varname.

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

person Frode F.    schedule 24.01.2013

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

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

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

person Patrick    schedule 22.04.2014
comment
Remove-Module * не слишком полезен. В противном случае за ним следует Import-Module - person GeekzSG; 26.06.2015
comment
Очевидно, ответ, который я искал. Я поместил эту строку в начало своего скрипта, и теперь мне не нужно каждый раз заново открывать PS ISE. - person ; 30.08.2017

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

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

канал, вдохновленный здесь

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

person Andreas Covidiot    schedule 17.08.2018