【发布时间】:2018-02-28 17:52:18
【问题描述】:
我在远程系统上高效地运行脚本有一段很长的时间。在本地运行时,该命令需要 20 秒。使用Invoke-Command 运行该命令需要 10 或 15 分钟 - 即使“远程”计算机是我的本地计算机。
有人可以向我解释这两个命令之间的区别以及为什么 Invoke-Command 需要这么长时间吗?
在 MACHINE 上本地运行:get-childitem C:\ -Filter *.pst -Recurse -Force -ErrorAction SilentlyContinue
在 \MACHINE 上远程运行(表现相同,而 MACHINE 是我的本地机器或远程机器:invoke-command -ComputerName MACHINE -ScriptBlock {get-childitem C:\ -Filter *.pst -Recurse -Force -ErrorAction SilentlyContinue}
注意:该命令返回5个文件对象
编辑:我认为部分问题可能是重解析点。在本地运行时get-childitem(和DIR /a-l)不要跟随连接点。当远程运行时,即使我使用-attributes !ReparsePoint 开关,它们也会这样做)
EDIT2:但是,如果我运行命令 invoke-command -ComputerName MACHINE -ScriptBlock {get-childitem C:\ -Attributes !ReparsePoint -Force -ErrorAction SilentlyContinue},我看不到连接点(即文档和设置)。因此,很明显DIR /a-l 和get-childitem -attributes !ReparsePoint 都不会阻止它递归到重解析点。相反,它似乎只过滤实际条目本身。
非常感谢!
【问题讨论】:
-
`-Recurse -Path C:` 这是你的问题。您正在遍历整个驱动器中的所有对象。
-
@TheIncorrigible1 本地与远程有何不同? Appleoddity - 你真的没有将任何凭据传递给调用命令吗?我想远程连接具有管理员权限,因此必须查看和搜索比本地更多的文件夹,但这仍然是一个很大的区别。
-
@TheIncorrigible1 - 这是故意的。在本地,SSD 需要 20 秒。远程需要 10 分钟或更长时间。
-
@TessellatingHeckler - 这些是我从 Powershell ISE 窗口运行的确切命令。我的帐户是域管理员。我确实注意到通过调用命令运行的 get-childitem 遵循连接点(即文档和设置),而在本地运行的 get-childitem 在到达连接点时会给出错误(没有静默继续开关)。这可能是一个原因吗?
-
@Appleoddity 您的 ISE 进程是否以管理员身份启动?
标签: powershell scripting remote-access