【发布时间】:2015-05-20 13:58:38
【问题描述】:
我正在编写一个脚本,该脚本将注销已处于断开状态超过 10 小时的 VDI 会话。除了最后一个障碍-实际上是强制注销之外,我已经设法将所有东西放在一起。
ForEach ($Desktop in $VDIlist)
{
$win32OS = Get-wmiobject win32_operatingsystem -ComputerName $desktop.'DNS Name' -EnableAllPrivileges
write-host "Shutting down host $Desktop."DNS Name""
$win32OS.Win32Shutdown(4)
}
这会导致以下错误。
Exception calling "Win32Shutdown" : "Generic failure "
At line:1 char:1
+ $win32OS.win32shutdown(4)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : WMIMethodException
不使用参数时似乎不会发生这种情况
($win32os.win32shutdown()),但这也不会像我要求的那样强制注销。
据我所知,-EnableAllPrivileges 参数应该允许远程注销,并且如果我与 VDI 进行实时 PCoIP 会话,它确实可以工作,我试图关闭但在断开连接状态时不会。
谁能指出我正确的方向?
【问题讨论】:
-
你看到这个MSDN documentation了吗?它提到你需要
SE_SHUTDOWN_NAME它还建议在同一个WMI 类上尝试Win32ShutdownTracker方法。所以就我个人而言,我首先会尝试使用Enter-PSSession列出我的权限(whoami /priv)远程访问主机,然后尝试调用相同的 wmi 命令以查看是否可以这样工作。 -
@nohwnd 是的,这就是我一直在使用的文档。我有域管理员权限,所以这不会是问题,我刚刚尝试了
Win32ShutdownTracker并遇到了同样的问题。我已经求助于使用强制关闭参数,因为这似乎有效,并且桌面无论如何都会被刷新,所以它是相同的最终结果(虽然有点慢) -
已经使用 VMware View 的内置“Powercli”通过替代命令解决了这个问题。
get-remotesession -state "Disconnected" | Where-Object {($_.duration -match 'Day' -or $_.duration -match '\d\d hours')} | Send-SessionLogoff
标签: powershell wmi vdi