Win32Shutdown通用失败

时间:2015-05-20 13:58:38

标签: powershell wmi vdi

我正在整理一个脚本,该脚本将注销已处于断开状态超过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会话,我试图关闭但是当处于断开连接状态时,它确实有效。
有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

仍然不完全确定为什么第一个脚本会出错,但我转而使用VMWare View内置的PowerCLI snapin来产生相同的结果 - 只是更快,更有效。

get-remotesession -state "Disconnected" | Where-Object {($_.duration -match 'Day' -or $_.duration -match '\d\d hours')} | Send-SessionLogoff

这将查询Horizo​​n视图服务器以查找具有“Disconnected state”的任何会话,然后它将过滤掉生命周期少于10小时的所有对象,并注销剩余的任何对象。

这需要加载VMware View PowerCLI PSSnippets并将其连接到断开的视图连接。