【发布时间】:2019-03-01 13:55:20
【问题描述】:
我需要使用New-PsSession 在远程计算机上运行多个命令以从注册表中收集信息。
问题是当我运行New-PsSession 时,它会在计算机上使用我的用户名创建一个用户配置文件,在我断开连接并删除会话后,配置文件被正确“卸载”但文件保留在 C:\USERS\ XXX。
这是一个问题,因为有时我重新映像计算机的同事会在该计算机上看到我的用户配置文件,并认为我正在登录该计算机,即使我只是运行了一些命令来检查注册表设置。
我的问题:有没有一种方法可以创建 PsSession,而无需在目标计算机上为您的姓名创建用户配置文件,或者通过其他方式使其在断开连接和删除后自行清理?
示例代码说明情况:
New-PSSession -ComputerName XXXX -name TEST
start-sleep 3
Disconnect-PSSession -Name TEST
Remove-PSSession -Name TEST
当然我可以在 PsSession 被移除后做这样的事情:
Get-WMIObject -ComputerName X -class Win32_UserProfile | Where {$_.LocalPath -eq "C:\Users\X" } | Remove-WmiObject
它有效,但感觉“脏”。我错过了什么吗?
【问题讨论】:
-
为什么你认为你需要
New-PSSession而不是Invoke-Command? -
事实上我两者都需要,当你运行多个 Invoke-Command 时,我一直听说最好做 Invoke-Command -Session $Session 而不是 Invoke-Command -ComputerName 1234 因为开销它会产生。所以我首先创建会话,然后多次执行调用命令会话(它最终是复杂 GUI 应用程序的一部分)。我测试了它,这种方式也确实更快。
-
我不知道你认为你需要多个
Invoke-Command来做什么。只需将您想要运行的所有内容放入一个脚本或脚本块中,然后运行Invoke-Command一次。*-PSSessioncmdlet 用于交互使用。对于自动化坚持Invoke-Command。 -
它是针对多台计算机的 GUI 应用程序的一部分。有一个清单表明您要收集哪些信息。假设我会做一个收集所有信息的调用命令,然后只显示列表中用户检查的属性,这对于一台计算机来说很好,我不会使用多个调用命令。但是,如果他查询 50 台计算机,这将比多个命令慢得多。 50x3 快速调用命令比 50x1 巨大调用命令快。我测量了一下,最后还是这样更好。
-
脚本块和脚本可以动态构建。你的意思是?
标签: powershell powershell-remoting user-profile