Войти

Показать полную графическую версию : [решено] Powershell и службы


a1ek9
18-05-2024, 15:11
Добрый вечер! Помогите сделать на powershell этот скрипт, ничего не выходит, нужно чтобы он был однострочным, и желательно без двойных ковычек (') такая допускается.
for /f %I in ('reg query "HKLM\SYSTEM\CurrentControlSet\Services" /k /f "BcastDVRUserService" ^| find /i "BcastDVRUserService"') do (reg add "%I" /v "Start" /t reg_dword /d 4 /f)

DJ Mogarych
18-05-2024, 19:24
Set-Service BcastDVRUserService -StartupType Disabled

a1ek9
19-05-2024, 20:21
Set-Service BcastDVRUserService -StartupType Disabled »
Это не то, в windows есть службы которые генерируются, имя вернее. Пример как раз выше я написал. Ваша команда отключает только BcastDVRUserService, а BcastDVRUserService_34220 по прежнему функционирует. Скрипт видимо не прочитали до конца что я указал)

YuS_2
19-05-2024, 21:48
в windows есть службы »
а в powershell есть "дикие карты" :)
get-service l*

Пример в полном виде:
Get-Service -Name l* | Set-Service -Status Paused
- скорректируйте как нужно Вам...

a1ek9
20-05-2024, 14:18
скорректируйте как нужно Вам... »
Благодарю, почитал теперь знаю что такое в powershell есть "дикие карты" »
Но теперь ругается на | . Пробовал так же через переменную, ничего не вышло(
Get-Service -Name 'BcastDVRUserService*' | Set-Service -StartupType Disabled

DJ Mogarych
20-05-2024, 15:57
теперь ругается на | »
Как именно ругается?
Вы эти команды где пишете и как запускаете?
Пишите, чтобы не приходилось к телепатии прибегать.

a1ek9
20-05-2024, 17:32
Как именно ругается? »
Set-Service : Не удается настроить службу "Пользовательская служба DVR для игр и трансляции_34220 (BcastDVRUserService_
34220)" из-за следующей ошибки: Параметр задан неверно
строка:1 знак:44
+ ... vice -Name 'BcastDVRUserService*' | Set-Service -StartupType Disabled
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (System.ServiceProcess.ServiceController:ServiceController) [Set-Servi
ce], ServiceCommandException
+ FullyQualifiedErrorId : CouldNotSetService,Microsoft.PowerShell.Commands.SetServiceCommandВы эти команды где пишете и как запускаете? »
powershell от имени администратора.

DJ Mogarych
20-05-2024, 20:54
Понятно, дело не в пайпе, а в том, что нет прав на отключение этой службы даже под администратором.

В интернете приводятся разные способы типа этого (https://www.majorgeeks.com/content/page/game_recording_and_broadcasting.html), но я рекомендовать такие способы не могу.

Sham
20-05-2024, 21:56
это т.н. per-user services (https://learn.microsoft.com/en-us/windows/application-management/per-user-services-in-windows)

a1ek9
20-05-2024, 22:10
for /f %I in ('reg query "HKLM\SYSTEM\CurrentControlSet\Services" /k /f "BcastDVRUserService" ^| find /i "BcastDVRUserService"') do (reg add "%I" /v "Start" /t reg_dword /d 4 /f) »
тут прав хватает, а через powershell нет? что то тут не так.
В интернете приводятся разные способы типа этого, но я рекомендовать такие способы не могу. »
Это всем известный твик, рабочий. Но на все службы такого типа их не найти) Изначально в .bat работает через реестр, может в powershell такой вариант сделать? Что то я затупил..

YuS_2
21-05-2024, 09:28
тут прав хватает, а через powershell нет? что то тут не так. »
Дело не в этом, прав не хватает на остановку службы. А в cmd не служба останавливается, там в реестре изменяется тип запуска службы... в powershell Вы тоже можете это сделать.
Выше, Вам дали верную ссылку на описание подобных служб... почитайте, что там написано (про powershell там тоже есть описание). Если аглицкий вызывает затруднения, есть такая ссылка (https://learn.microsoft.com/ru-ru/windows/application-management/per-user-services-in-windows) на ту же страницу, но на русском.
Вот так:
Set-Service -Name BcastDVRUserService -StartupType Disabled
- это должно работать. По сути, так задается шаблон для запускаемых отдельных служб...
Когда пользователь входит в Windows, ОС создает службы для каждого пользователя. При выходе пользователя эти службы останавливаются и удаляются.
Windows создает эти службы для каждого пользователя на основе шаблонов, определенных в реестре. Если вам нужно управлять поведением этих служб или управлять ими, можно настроить шаблон. Например, можно задать для типа запуска службы шаблонов значение Отключено.
При отключении службы для отдельных пользователей Windows по-прежнему создает ее при входе пользователя, но в остановленном и отключенном состоянии. При выходе пользователя Windows удаляет службу для каждого пользователя.
Т.е. управлять уже запущенной "службой для каждого пользователя", не получится, можно только настроить шаблон для её запуска в отключенном состоянии.

a1ek9
25-05-2024, 20:31
Добрый вечер! Помогите сделать на powershell этот скрипт, ничего не выходит, нужно чтобы он был однострочным, и желательно без двойных ковычек (') такая допускается. »
В общем понятно что ничего не понятно. Я понял что нельзя так сделать, хорошо. Тогда помогите лишить выше указанный код двойных ковычек, в одну строку! Я так понял, из за параметра find не получиться, или все же возможно как то?

YuS_2
26-05-2024, 00:15
Я понял что нельзя так сделать, хорошо. »
Сделать как?
Вы переходили по ссылке? Там есть всё, что надо для настройки. Сформулируйте задачу точнее.
Запретить запуск службы с LUID? Ссылка для решения вопроса (https://learn.microsoft.com/ru-ru/windows/application-management/per-user-services-in-windows#example-3-prevent-the-creation-of-per-user-services)
Или что Вы хотите автоматизировать скриптом? Это же одноразовая задача. Но тем не менее и она решается с помощью powershell

Тогда помогите лишить выше указанный код двойных ковычек, в одну строку! »
Вы понимаете, что делает тот код на cmd, который Вы пытаетесь модернизировать? Он, всего лишь изменяет записи в реестре, с чем powershell также умеет работать.
Вопрос только в том, какова конечная цель.

YuS_2
26-05-2024, 10:57
#Requires -runas
$pth = 'HKLM:\SYSTEM\CurrentControlSet\Services\BcastDVRUserService'
$iprop = gp $pth
$nusf = 'UserServiceFlags'
$nst = 'Start'
if (!$iprop.$nusf.count){
new-itemproperty -path $pth -name $nusf -prop 'DWORD' -val 0|out-null
} elseif ($iprop.$nusf) {
sp -path $pth -name $nusf -val 0
}
if($iprop.$nst -ne 4){
sp -path $pth -name $nst -val 4
}
- скрипт Powershell, который либо добавляет, либо изменяет значение 0 с типом 'DWORD' параметра UserServiceFlags для сервиса BcastDVRUserService, а также переводит сервис в тип запуска "Отключено"

a1ek9
27-05-2024, 11:21
Вы понимаете, что делает тот код на cmd, который Вы пытаетесь модернизировать? »
Это не то, в windows есть службы которые генерируются, имя вернее. Пример как раз выше я написал. Ваша команда отключает только BcastDVRUserService, а BcastDVRUserService_34220 по прежнему функционирует. Скрипт видимо не прочитали до конца что я указал) »
Я понимаю. И написал я тут, чтобы люди которые понимали что тут написано, помогли мне реализовать код на powershell.
И еще раз напишу, скрипт ищет службу по началу имени, так как последние цифры генерируются всегда. Скрипт вносит изменения в службу BcastDVRUserService, потом ищет службу по ключевому слову и добавляет еще там значение. Если и сейчас не понятно, тогда я не смогу вам объяснить.
Или что Вы хотите автоматизировать скриптом? »
Просто прочитайте скрипт что я указал в шапке, и вы поймете что я хочу.
for /f %I in ('reg query "HKLM\SYSTEM\CurrentControlSet\Services" /k /f "BcastDVRUserService" ^| find /i "BcastDVRUserService"') do (reg add "%I" /v "Start" /t reg_dword /d 4 /f) »
Благодарю всех! Что откликнулись и за ваше время! Буду искать дальше..




© OSzone.net 2001-2012