#powershell #shutdown
#powershell #завершение работы
Вопрос:
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 дней. Сценарий вроде как выполнен, но он показывает ошибку, когда дело доходит до сути:
restart-Computer $Computer -Force
Если я введу вместо $Computer, $ComputerList, скрипт отключит все компьютеры в этом подразделении, даже если они не работали дольше 2 дней.
Таким образом, одному КОМПЬЮТЕРУ требуется работать дольше, чем 2 дня, чтобы закрыть всю компанию, а это не то, чего я хочу.
Как я могу указать сценарию выключать компьютеры только тогда, когда они уже работают более 2 дней?
Ответ №1:
Ваш $Computer
не определен. Вы должны использовать:
Restart-Computer $_ -Force
Но лучшим подходом было бы собрать все компьютеры, которые должны перезапускаться, в переменной, а затем полностью перезапустить их. Будет работать намного быстрее:
$toBeRestarted = $ComputerList | Where-Object { $ShutdownDate -gt (Get-LastBootUpTime -ComputerName $_) }
Restart-Computer $toBeRestarted -Force
Вы можете добавить еще несколько журналов, если хотите
Комментарии:
1. Я только что решил проблему перезагрузки компьютера с помощью $ _ -Force, я думаю, это работает. Я не тестировал его со временем, потому что компьютеры, которые я хочу выключить, не подключены достаточно долго, но в понедельник я протестирую его более тщательно. Если это не сработает, я попробую другое ваше решение, спасибо.