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
พวกเขาถูกดำเนินการด้วยค่าใหม่ แต่ BEHAVED ราวกับว่าพวกเขาได้ส่งผ่านค่า OLD   -  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's 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