2016-10-07 2 views
1

OU = _는 개인 회사 이름입니다. 나는 그것이 재시동되고 있다는 것을 안다. 이것은 실제 hutdown 과정에 들어가기 전에 테스트하기위한 것이다.PowerShell 원격 PC 종료, 단일 PC

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 

내가 $ 컴퓨터 대신 입력하면 $ COMPUTERLIST 스크립트들은 일부러 경우에도 해당 OU의 모든 PC를 종료 2 일 이상 경과하십시오. 그래서 전체 회사를 폐쇄하기 위해 1 대의 PC 만 2 일 이상 실행해야합니다. 이는 내가 원하는 것이 아닙니다. 스크립트가 이미 2 일 이상 실행 된 경우에만 PC를 끄도록하려면 어떻게해야합니까?

답변

0

$Computer이 정의되지 않았습니다.

Restart-Computer $_ -Force 

그러나 더 나은 방법은 변수에서 다시 시작해야하는 모든 컴퓨터를 수집 한 다음 모두 다시 시작하는 것입니다. 훨씬 빠르게 작동합니다 : 당신이 _ -Force 지금, 나는 그것이 작동 생각 나는 다시 시작 - 컴퓨터 $를 해결

+0

를 좋아하는 경우에

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

당신은 주위에 좀 더 로깅을 추가 할 수 있습니다. 나는 내가 끝내고 자하는 PC가 충분히 길지 않기 때문에 시간을두고 테스트하지는 않았다. 그러나 월요일에 좀 더 철저히 테스트 할 것이다. 작동하지 않는 경우 다른 솔루션을 사용해 보겠습니다. 감사합니다. – Gunter