【问题标题】:Win32Shutdown Generic FailureWin32Shutdown 一般故障
【发布时间】: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


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 2013-06-01
    • 2015-02-12
    • 2023-03-21
    • 1970-01-01
    • 2021-04-14
    相关资源
    最近更新 更多