Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Restart-Computer

Ответить
Настройки темы
PowerShell - Restart-Computer

Новый участник


Сообщения: 48
Благодарности: 0

Профиль | Отправить PM | Цитировать


Нашел скрипт для проверки статуса "Требуется перезагрузка для завершения установки обновлений". Хочу чтобы серверы ночью перегружались по наличию этого статуса.
Код: Выделить весь код
Function Get-WURebootStatus
{
    <#
	.SYNOPSIS
	    Show Windows Update Reboot status.

	.DESCRIPTION
	    Use Get-WURebootStatus to check if reboot is needed.
		
	.PARAMETER Silent
	    Get only status True/False without any more comments on screen. 
	
	.EXAMPLE
        Check whether restart is necessary. If yes, ask to do this or don't.
		
		PS C:\> Get-WURebootStatus
		Reboot is required. Do it now ? [Y/N]: Y
		
	.EXAMPLE
		Silent check whether restart is necessary. It return only status True or False without restart machine.
	
        PS C:\> Get-WURebootStatus -Silent
		True
		
	.NOTES
		Author: Michal Gajda
		Blog  : http://commandlinegeeks.com/
		
	.LINK
		http://gallery.technet.microsoft.com/scriptcenter/2d191bcd-3308-4edd-9de2-88dff796b0bc

	.LINK
        Get-WUInstallerStatus
	#>    

	[CmdletBinding(
    	SupportsShouldProcess=$True,
        ConfirmImpact="Low"
    )]
    Param
	(
		[Alias("StatusOnly")]
		[Switch]$Silent,
		[String[]]$ComputerName = "localhost",
		[Switch]$AutoReboot
	)
	
	Begin
	{
		$User = [Security.Principal.WindowsIdentity]::GetCurrent()
		$Role = (New-Object Security.Principal.WindowsPrincipal $user).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)

		if(!$Role)
		{
			Write-Warning "To perform some operations you must run an elevated Windows PowerShell console."	
		} #End If !$Role
	}
	
	Process
	{
        ForEach($Computer in $ComputerName)
		{
			If ($pscmdlet.ShouldProcess($Computer,"Check that Windows update needs to restart system to install next updates")) 
			{				
				if($Env:COMPUTERNAME,"localhost","." -contains $Computer)
				{
				    Write-Verbose "$($Computer): Using WUAPI"
					$objSystemInfo= New-Object -ComObject "Microsoft.Update.SystemInfo"
					$RebootRequired = $objSystemInfo.RebootRequired
				} #End if $Computer -eq $Env:COMPUTERNAME
				else
				{
					Write-Verbose "$($Computer): Using Registry"
					$RegistryKey = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]"LocalMachine",$Computer) 
					$RegistrySubKey = $RegistryKey.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\") 
					$RegistrySubKeyNames = $RegistrySubKey.GetSubKeyNames() 
					$RebootRequired = $RegistrySubKeyNames -contains "RebootRequired" 

				} #End else $Computer -eq $Env:COMPUTERNAME
				
				Switch($RebootRequired)
				{
					$true	{
						If($Silent) 
						{
							Return $true
						} #End If $Silent
						Else 
						{
							if($AutoReboot -ne $true)
							{
								$Reboot = Read-Host "$($Computer): Reboot is required. Do it now ? [Y/N]"
							} #End If $AutoReboot -ne $true
							Else
							{
								$Reboot = "Y"
							} #End else $AutoReboot -ne $true
							
							If($Reboot -eq "Y")
							{
								Write-Verbose "Rebooting $($Computer)"
								Restart-Computer -ComputerName $Computer -Force
							} #End If $Reboot -eq "Y"
						} #End Else $Silent
					} #End Switch $true
						
					$false	{ 
						If($Silent) 
						{
							Return $false
						} #End If $Silent
						Else 
						{
							Write-Output "$($Computer): Reboot is not Required."
						} #End Else $Silent
					} #End Switch $false
				} #End Switch $objSystemInfo.RebootRequired
				
			} #End If $pscmdlet.ShouldProcess($Env:COMPUTERNAME,"Check that Windows update needs to restart system to install next updates")
		} #End ForEach $Computer in $ComputerName
	} #End Process
	
	End{}				
} #In The End :)
Все красиво работает, НО после перезагрузки всплывает окошко с требованием указать причину перезагрузки.
В cmd в команде shutdown были параметры указать причину. В powershell Restart-computer (который выполняется в этом скрипте) такого параметра не нашел (мб плохо искал).
Кто, чего может подсказать?

Отправлено: 07:02, 20-11-2014

 

Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


У Restart-Computer нет такого параметра. Поэтому самое простое использовать утилиту shutdown или метод Win32ShutdownTracker класса Win32_OperatingSystem - http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx.

Код: Выделить весь код
invoke-wmimethod -path Win32_OperatingSystem -name Win32ShutdownTracker -argumentlist 0,$null,0,6
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:50, 20-11-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Restart-Computer

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Restart NIK_46 Непонятные проблемы с Железом 14 13-12-2010 10:00
ISA 2000 error at restart service !! dosim Сетевые технологии 1 05-03-2005 10:37
"Сообщение от COMPUTER ALERT для COMPUTER USER" Guest Защита компьютерных систем 3 21-08-2004 23:01
Restart+Restart+Restart=:( Wlad L Непонятные проблемы с Железом 13 13-12-2003 05:10
Restart XP дает error!!! grenata Microsoft Windows 2000/XP 41 04-03-2003 09:42




 
Переход