Есть ли у 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