使用 System.Management.Automation 远程重启计算机的正确方法

Posted

技术标签:

【中文标题】使用 System.Management.Automation 远程重启计算机的正确方法【英文标题】:Correct way to remotely restart a computer using System.Management.Automation 【发布时间】:2022-01-07 11:08:30 【问题描述】:

我正在使用 System.Management.Automation 和 System.Management.Automation.Runspaces 包尝试远程重新启动计算机,然后等待该计算机再次可用。但是,无论我做什么都会导致运行空间处于损坏状态。是否有关于如何使用最新版本的 System.Management.Automation 包在 C# 中执行此操作的任何指导?

抱歉,如果这太神秘/含糊不清,我对用 C#/.net 编写任何东西都很陌生,非常感谢任何帮助。

【问题讨论】:

您要向您的 powershell 实例发送什么 cmdlet?通常,在 PS 上,您只需为此执行 Restart-Computer host01 -Wait “无论我做什么都会导致运行空间处于损坏状态。” - 你能给我们展示一个让运行空间处于损坏状态的“随便什么”的例子吗? 【参考方案1】:

我通常使用 PowerShell 重新启动计算机并等待它在脚本继续之前恢复联机。我留了一个 sn-p 供你使用。

$ServerName = 'Computer1'

#Local Server Admin Account
[STRING] $LocalUser = "Administrator" #Obviously Change Account
[STRING] $LocalPassword = "Password01" #Obviously Change Password
$LocalSecurePassword = $LocalPassword | ConvertTo-SecureString -AsPlainText -Force
$LocalCredentials = New-Object System.Management.Automation.PSCredential -ArgumentList $LocalUser, $LocalSecurePassword

#Restart Server
Restart-Computer -ComputerName "$ServerName" -Credential $LocalCredentials -Impersonation 3 -Authentication 6 -Force
Start-Sleep -s 180
#Wait for Server to Restart
    Do (Write-Host "The Server $ServerName is restarting"),(Start-Sleep -seconds 60)
    Until ((Get-WmiObject Win32_Service -ComputerName $ServerName -Credential $LocalCredentials -Impersonation 3 -Authentication 6 | Where-Object$_.Name -eq 'RemoteRegistry').State -eq 'Running')
                
Write-Host "Remove PS Session"
Get-PSSession | Remove-PSSession
                
Start-Sleep -s 60
#Exit

【讨论】:

以上是关于使用 System.Management.Automation 远程重启计算机的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)