2017-08-16 132 views
0

使用用戶登錄名和計算機名的特定輸入我想刪除遠程計算機上該用戶的臨時Internet文件。我幾乎可以使它工作,但是當我嘗試將文件路徑作爲變量傳遞時,它將失敗,並且爲空,或者不包含用戶名。我已經Google搜索並試圖自己修復幾個小時。 我已經玩了一段時間的PowerShell,但我的'腳本'是我定義變量和管道命令。除此之外的任何事情都可能會讓我感到困惑,儘管如此,任何幫助都不勝感激。以下是我到目前爲止。冗餘只是檢查我的變量是否被傳遞,直到-Scriptblock,這是出錯的地方。調用命令清除Internet Explorer緩存

$User = Read-Host -Prompt 'Please input the user logon name.' 
$CompName = Read-Host -Prompt 'Please enter the target computername.' 
$UNC = "C:\Users\$User\AppData\Local\Microsoft\Windows\Temporary Internet Files" 
$Block = { Remove-Item $UNC -Recurse -Force -EA Continue } 
Invoke-Command -ComputerName $CompName -ScriptBlock {$Block} 
+0

爲什麼需要在遠程計算機上刪除該目錄的內容? –

+0

用戶已經爲OWA緩存了憑據,並且已經更改了密碼。舊憑證不斷嘗試認證並鎖定用戶。 –

+0

清除緩存修復程序? (奇數) –

回答

1

這會被問到很多。您正在調用一個新的會話或運行時環境,其中$ UNC的內容不存在。您需要將該值從調用腳本傳遞給被調用的調用。你可以用-ArgumentList來完成。該參數的Invoke-CommandInvoke-Expression的語法相同。這是一個完整的例子:

Cannot bind parameter to argument 'command' beacuse it is null. Powershell

另外,我想改變這種: Invoke-Command -ComputerName $CompName -ScriptBlock {$Block} 這樣: Invoke-Command -ComputerName $CompName -ScriptBlock $Block

意義是非常不同的。 {$Block}將運行輸出$ Block的值(空白)的腳本。而沒有{},你傳遞一個scriptblock變量來解析。


這裏是一個工作示例:

$OutsideVar = "Hello World!" 

invoke-command -ArgumentList $OutsideVar -ScriptBlock { 
    param($InsideVar) 
    Write-Host $InsideVar 
} 

理解的關鍵是什麼在這裏發生的是理解範圍。 $ OutsideVar存在於頂級進程範圍。當您使用Invoke-Command開始一個新範圍$ OutsideVar不再存在。就像你可以用參數調用一個.EXE文件一樣,你可以用參數調用這個新的作用域。你必須告訴內部範圍如何處理這些參數,這就是param()塊正在做的事情。它說:「你將得到1個參數,存儲在$ InsideVar中」。現在你在內部範圍內具有這個價值。您可以通過添加更多像這樣傳遞多個值:

invoke-command -ArgumentList $OutsideVar, $OutsideVar2, $OutsideVar3 -ScriptBlock { 
    param($InsideVar, $InsideVar2, $InsideVar3) 
} 
+0

我知道該變量不再存在,但我無法完全弄清楚如何使這個工作適合我的情況。有沒有一本我可以閱讀的書來使這有意義? –

+0

這裏是該方法的文檔:https://msdn.microsoft.com/en-us/library/bb355170(v=vs.110).aspx 我還將更新答案與工作代碼供您測試用。 –