Apakah Powershell memiliki cache yang perlu dibersihkan?

Pagi ini, saya menyalin direktori dari drive jaringan lokal saya ke folder temp untuk pengujian. Kesalahan ini muncul.

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

Hal ini diharapkan dengan perpindahan...PS tidak dapat menemukan jalur yang direferensikan...tetapi saya membuat perubahan berikut sebelum menjalankan skrip (komentar lama di atas yang baru):

$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 

Firasat pertama saya adalah ada semacam cache yang menyimpan variabel $inpath saya dari proses terakhir saya...tetapi belum dapat mengetahui apakah itu perilaku PowerShell yang diharapkan. Apakah saya salah mengartikan kesalahan atau solusinya? Bagaimana cara membersihkan cache atau variabel apa pun yang disimpan di memori?


person dwwilson66    schedule 24.01.2013    source sumber
comment
apakah Anda yakin seluruh kode dijalankan kedua kali? Bahwa pengaturan baris $inpath dan $srcfiles keduanya dieksekusi untuk kedua kalinya dengan nilai baru?   -  person Frode F.    schedule 24.01.2013
comment
mereka dieksekusi dengan nilai baru, tetapi BERPERILAKU seolah-olah telah melewati nilai LAMA.   -  person dwwilson66    schedule 24.01.2013


Jawaban (3)


Variabel disimpan dalam sesi, jadi jika Anda menutup konsol PowerShell dan membuka yang baru, semua variabel khusus akan hilang. Jika Anda ingin melihat variabel apa saja yang ada, gunakan Get-Variable . Untuk menghapus variabel tertentu (untuk memastikan variabel tersebut hilang), Anda dapat menggunakan:

Remove-Variable varname.

Adapun pertanyaan Anda. Variabel dalam lingkup global (sesi) disimpan dalam sesi hingga dihapus atau ditimpa. Jika Anda menggunakan konsol PowerShell yang sama untuk menjalankan kode tersebut dua kali, maka $inpath seharusnya disetel ke "C:\temp\tx" untuk kedua kalinya, dan $srcfiles akan diperbarui dengan daftar file baru.

person Frode F.    schedule 24.01.2013

Saya tidak menyukai gagasan harus menutup dan membuka kembali setiap kali saya perlu menghapus cache.

Ini berfungsi di PowerShell

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

person Patrick    schedule 22.04.2014
comment
Hapus-Modul * tidak terlalu membantu. Ini harus diikuti dengan Impor-Modul sebaliknya - person GeekzSG; 26.06.2015
comment
Jelas jawaban yang saya cari. Saya telah meletakkan baris ini di bagian atas skrip saya dan sekarang saya tidak perlu membuka kembali/membuka PS ISE setiap saat. - person ; 30.08.2017

Selain jawaban@Patrick Anda dapat menghapus modul yang ditunjuk seperti ini:

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

pipe-way terinspirasi dari di sini

jadi kalimat Patrick akan menjadi Remove-Variable * -ErrorAction SilentlyContinue; ,@("MyModule1","MyModule2") | %{&Remove-Module -ErrorAction:SilentlyContinue $_}; $error.Clear(); Clear-Host

person Andreas Covidiot    schedule 17.08.2018