|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Запуск скрипта выключения компьютера |
|
PowerShell - [решено] Запуск скрипта выключения компьютера
|
Ветеран Сообщения: 508 |
Всем привет.
Написал PS скрипт для выключения компьютера по расписанию, но он почему-то работает только от администратора. При запуске от ограниченного пользователя выдаёт ошибку: ![]() Function Create-GetSchedTime { Param( $SchedTime ) $script:StartTime = (Get-Date).AddSeconds($TotalTime) $RestartDate = ((get-date).AddSeconds($TotalTime)).AddMinutes(1) $RDate = (Get-Date $RestartDate -f 'dd.MM.yyyy') -replace "\.","/" # формат 16/03/2016 $RTime = Get-Date $RestartDate -f 'HH:mm' # формат 09:31 &schtasks /delete /tn "Post Maintenance Restart" /f &schtasks /create /sc once /tn "Post Maintenance Restart" /tr $RCMD /SD $RDate /ST $RTime /f } [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null [System.Reflection.Assembly]::LoadWithPartialName( "Microsoft.VisualBasic") | Out-Null $Title = "Выключение компьютера" $Message = "Компьютер будет автоматически выключен через:" $Button1Text = "Выключить" $Button2Text = "Отложить на 1 час" $Button3Text = "Отложить на 4 часа" $Form = $null $Button1 = $null $Button2 = $null $Label = $null $TextBox = $null $Result = $null $RCMD = "'C:\Windows\system32\cmd.exe' /c shutdown -r -f -t 0" $timerUpdate = New-Object 'System.Windows.Forms.Timer' $TotalTime = 900 #in seconds Create-GetSchedTime -SchedTime $TotalTime $timerUpdate_Tick={ # Define countdown timer [TimeSpan]$span = $script:StartTime - (Get-Date) # Update the display $hours = "{0:00}" -f $span.Hours $mins = "{0:00}" -f $span.Minutes $secs = "{0:00}" -f $span.Seconds $labelTime.Text = "{0}:{1}:{2}" -f $hours, $mins, $secs $timerUpdate.Start() if ($span.TotalSeconds -le 0) { $timerUpdate.Stop() &schtasks /delete /tn "Post Maintenance Restart" /f shutdown -r -f /t 0 } } $Form_StoreValues_Closing= { #Store the control values } $Form_Cleanup_FormClosed= { #Remove all event handlers from the controls try { $Form.remove_Load($Form_Load) $timerUpdate.remove_Tick($timerUpdate_Tick) #$Form.remove_Load($Form_StateCorrection_Load) $Form.remove_Closing($Form_StoreValues_Closing) $Form.remove_FormClosed($Form_Cleanup_FormClosed) } catch [Exception] { } } # Form $Form = New-Object -TypeName System.Windows.Forms.Form $Form.Text = $Title $Form.Size = New-Object -TypeName System.Drawing.Size(355,165) $Form.StartPosition = "CenterScreen" $Form.Topmost = $true $Form.KeyPreview = $true $Form.ShowInTaskbar = $Formalse $Form.FormBorderStyle = "FixedDialog" $Form.MaximizeBox = $Formalse $Form.MinimizeBox = $Formalse # Hide Close (X) button #$Form.ControlBox = $False $Icon = [system.drawing.icon]::ExtractAssociatedIcon("c:\Windows\System32\UserAccountControlSettings.exe") $Form.Icon = $Icon # Button One (Reboot/Shutdown Now) $Button1 = New-Object -TypeName System.Windows.Forms.Button $Button1.Size = New-Object -TypeName System.Drawing.Size(80,23) $Button1.Location = New-Object -TypeName System.Drawing.Size(10,100) $Button1.Text = $Button1Text $Button1.Add_Click({ &schtasks /delete /tn "Post Maintenance Restart" /f shutdown -r -f /t 0 $Form.Close() }) $Form.Controls.Add($Button1) # Button Two (Postpone for 1 Hour) $Button2 = New-Object -TypeName System.Windows.Forms.Button $Button2.Size = New-Object -TypeName System.Drawing.Size(115,23) $Button2.Location = New-Object -TypeName System.Drawing.Size(97,100) $Button2.Text = $Button2Text $Button2.Add_Click({ $Button2.Enabled = $False $timerUpdate.Stop() $TotalTime = 3600 Create-GetSchedTime -SchedTime $TotalTime $timerUpdate.add_Tick($timerUpdate_Tick) $timerUpdate.Start() }) $Form.Controls.Add($Button2) # Button Three (Postpone for 4 Hours) $Button3 = New-Object -TypeName System.Windows.Forms.Button $Button3.Size = New-Object -TypeName System.Drawing.Size(117,23) $Button3.Location = New-Object -TypeName System.Drawing.Size(218,100) $Button3.Text = $Button3Text $Button3.Add_Click({ $Button3.Enabled = $False $timerUpdate.Stop() $TotalTime = 14400 Create-GetSchedTime -SchedTime $TotalTime $timerUpdate.add_Tick($timerUpdate_Tick) $timerUpdate.Start() }) $Form.Controls.Add($Button3) # Label $Label = New-Object -TypeName System.Windows.Forms.Label $Label.Size = New-Object -TypeName System.Drawing.Size(280,25) $Label.Location = New-Object -TypeName System.Drawing.Size(10,15) $Label.Text = $Message $Form.Controls.Add($Label) # labelTime $labelTime = New-Object 'System.Windows.Forms.Label' $labelTime.AutoSize = $True $labelTime.Font = 'Arial, 24pt, style=Bold' $labelTime.Location = '100, 46' $labelTime.Name = 'labelTime' $labelTime.Size = '43, 15' $labelTime.TextAlign = 'MiddleCenter' $Form.Controls.Add($labelTime) #Start the timer $timerUpdate.add_Tick($timerUpdate_Tick) $timerUpdate.Start() # Show $Form.Add_Shown({$Form.Activate()}) #Clean up the control events $Form.add_FormClosed($Form_Cleanup_FormClosed) #Store the control values when form is closing $Form.add_Closing($Form_StoreValues_Closing) #Show the Form $Form.ShowDialog() | Out-Null |
|
Отправлено: 10:21, 29-11-2016 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать На компьютере настроен Aplocker/SRP(по умолчанию учетные записи Администратора не подпадают под правила) - поэтому PowerShell запускается в “Constrained Mode”, причина и метод обхода -
https://sysadmins.lv/blog-en/powersh...-security.aspx https://sysadmins.lv/blog-en/powersh...ty-part-2.aspx Самое простое создать правила по хэшу: Создаются файлы вида - C:\Users\UserPROFILE\AppData\Local\Temp\xxxxxxx.xxx.ps1 и xxxxxxx.xxx.psm1 - Включите логирование и найдите, т.к. файл не меняет содержимое, то хэши совпадают. shutdown - Для этого есть компандлет Stop-Computer psexec позволяет запускать от System. Ps. Зачем такие сложности, когда есть планировщик заданий. |
Отправлено: 10:48, 29-11-2016 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Забанен Сообщения: 793
|
Цитата snark:
|
|
Последний раз редактировалось greg zakharov, 29-11-2016 в 18:49. Отправлено: 12:36, 29-11-2016 | #3 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Программа для выключения компьютера | mdmvideo | Программное обеспечение Windows | 7 | 05-12-2013 23:06 | |
Разное - Корректность выключения компьютера | starav | Microsoft Windows 2000/XP | 4 | 18-01-2011 10:27 | |
Перезагрузка вместо Выключения Компьютера | boalni | Непонятные проблемы с Железом | 30 | 18-01-2009 22:24 | |
Интерфейс - [решено] Табличка выключения компьютера | RuLe | Microsoft Windows 2000/XP | 1 | 26-08-2007 17:27 | |
Нет возможности выключения компьютера | Mitiy | Сетевые технологии | 5 | 03-10-2003 07:57 |
|