使用 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有三种方式(不使用,动态使用,静态使用,默认是动态使用)