PowerShell远程PC关机,单台PC

时间:2016-10-07 09:47:44

标签: powershell shutdown ps1

OU = _是私人公司名称。我知道它重新开始,这只是在进入真正的hutdown过程之前进行测试。

function Get-LastBootUpTime {            
param (
    $ComputerName
)
    $OperatingSystem = Get-WmiObject Win32_OperatingSystem -ComputerName $ComputerName               
    [Management.ManagementDateTimeConverter]::ToDateTime($OperatingSystem.LastBootUpTime)            
}

$Days = -0
$ShutdownDate = (Get-Date).adddays($days)

$ComputerList = Get-ADComputer -SearchBase 'OU=TEST-OU,OU=_,DC=_,DC=_' ` -Filter '*' | Select -EXP Name

$ComputerList | foreach {
    $Bootup = Get-LastBootUpTime -ComputerName $_

    Write-Host "$_ last booted: $Bootup"

    if ($ShutdownDate -gt $Bootup) {
        Write-Host "Rebooting Computer: $_" -ForegroundColor Red
        restart-Computer $Computer -Force
    }
    else {
        Write-Host "No need to reboot: $_" -ForegroundColor Green
    }
}

我正在尝试关闭运行时间超过2天的公司中的所有PC。脚本已经完成,但是当涉及到这一点时它会显示错误:

restart-Computer $Computer -Force

如果我输入而不是$ Computer,$ ComputerList脚本会关闭该OU中的每台PC,即使它们的运行时间不超过2天。 因此,关闭整个公司只需要一台PC运行超过2天,这不是我想要的。 当他们已经运行超过2天时,我怎么能告诉脚本只关闭PC?

1 个答案:

答案 0 :(得分:0)

您的$Computer未定义。你应该使用:

Restart-Computer $_ -Force

但更好的方法是收集应该在变量中重新启动的所有计算机,然后重新启动它们。会更快地工作:

$toBeRestarted = $ComputerList | Where-Object { $ShutdownDate -gt (Get-LastBootUpTime -ComputerName $_) }
Restart-Computer $toBeRestarted -Force

如果您愿意,可以添加更多日志记录