Я пишу скрипт, который будет передавать две переменные и файл CSV для изменения служб на компьютере, указанном в файле CSV.
команда будет в следующем формате: напр.start SQLService
или stop PBIService
данный файл CSV:
сервер, служба
сервер1, SQLService
сервер2, PBIService
server3, PBIService
param($task, $service) #arguments from cmd line input
if($task -eq "start")
{
Set-Variable -Name "task" -Value "running"
}
elseif($task -eq "stop")
{
Set-Variable -Name "task" -Value "stopped"
}
if($service -eq "SQLService")
{
Set-Variable -Name "SQLsvc" -Value "SQLService"
}
elseif($service -eq "PBIService")
{
Set-Variable -Name "PBIsvc" -Value "PBIService"
}
Import-CSV .\csvfile.csv |
ForEach {
if($_.service -eq "SQLService")
{
$getService = Get-Service $SQLsvc -ComputerName $_.Server
$oldstatus = $getService.status
$getService |
Set-Service -Status $task -PassThru |
Select MachineName, Name, Status,
@{n='OldStatus';e={$oldStatus}}
}
elseif($_.Service -eq "PBIService")
{
$getService = Get-Service $PBIsvc -ComputerName $_.Server
$oldstatus = $getService.status
$getService |
Set-Service -Status $task -PassThru |
Select MachineName, Name, Status,
@{n='OldStatus';e={$oldStatus}}
}
} |
tee output.txt
Однако, когда я запускаю это по какой-то причине, это затрагивает ВСЕ службы ...
MachineName Name Status OldStatus
----------- ---- ------ ---------
server1 SQLService Running Running
server2 PBIService Running Running
Set-Service : Service 'Microsoft Monitoring Agent Audit Forwarding (AdtAgent)' cannot be started due to the following
error: Cannot start service AdtAgent on computer 'server3'.
+ Set-Service -Status $task -PassThru |
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OpenError: (System.ServiceProcess.ServiceController:ServiceController) [Set-Service], Se
rviceCommandException
+ FullyQualifiedErrorId : CouldNotStartService,Microsoft.PowerShell.Commands.SetServiceCommand
server3 AdtAgent Stopped ...ed...}
Set-Service : Service 'AllJoyn Router Service (AJRouter)' cannot be started due to the following error: Cannot start
service AJRouter on computer 'server3'.
+ Set-Service -Status $task -PassThru |
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OpenError: (System.ServiceProcess.ServiceController:ServiceController) [Set-Service], Se
rviceCommandException
+ FullyQualifiedErrorId : CouldNotStartService,Microsoft.PowerShell.Commands.SetServiceCommand
server3 AJRouter Stopped ...ed...}
Кроме того, почему, если я командую start SQLService
, PBIService тоже запускается?по какой-то причине условие не работает должным образом ... единственным затронутым сервером и службой в этом случае должен быть server1, поскольку согласно условию if этот сервер имеет service = SQLService