调用命令以清除 Internet Explorer 缓存

Invoke-Command to clear Internet Explorer Cache

使用用户登录名和计算机名的特定输入,我想删除远程计算机上该用户的临时 Internet 文件。我几乎可以让它工作,但是当我尝试将文件路径作为变量传递时,它失败了,要么为空,要么不包括用户名。我已经用谷歌搜索并尝试自己修复了几个小时。 我玩 powershell 有一段时间了,但我的 'scripting' 是我定义变量和管道命令。除此之外的任何事情都可能会让我感到困惑,但我们将不胜感激。以下是我到目前为止所拥有的。冗余只是我检查我的变量是否一直传递到 -Scriptblock,这是出错的地方。

$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} 

很多人问这个问题。您正在调用 $UNC 内容不存在的新会话或 运行time 环境。您需要将该值从调用脚本传递给被调用的调用。你用 -ArgumentList 来做。 Invoke-CommandInvoke-Expression 的语法对于此参数是相同的。这是一个完整的例子:

另外,我会改变这个: Invoke-Command -ComputerName $CompName -ScriptBlock {$Block} 对此: Invoke-Command -ComputerName $CompName -ScriptBlock $Block

意义大不相同。 {$Block} 将 运行 一个输出 $Block 值(空白)的脚本。如果没有 {},您将传递一个要解析的脚本块变量。


这是一个工作示例:

$OutsideVar = "Hello World!"

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

理解这里发生的事情的关键是理解范围。 $OutsideVar 存在于顶级流程范围内。当您使用 Invoke-Command 开始新范围时,$OutsideVar 不再存在。就像您可以使用参数调用 .EXE 文件一样,您可以使用参数调用这个新范围。您必须告诉内部范围如何处理这些参数,这就是 param() 块正在做的事情。它说:"You are going to get 1 argument, store it in $InsideVar"。现在您在内部范围内拥有该值。您可以通过添加更多参数来传递多个值,如下所示:

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