Powershell 脚本停止服务并设置为手动

Powershell 脚本停止服务并设置为手动

我希望这是在正确的地方。我知道这个问题以前被问过很多次,但我找不到我需要的东西。

我正在寻找一个可以同时在多个远程服务器上运行的脚本,以停止正在运行的特定服务并将其设置为手动启动。

那部分是比较简单的部分,我还希望它能反馈给我它正在执行什么任务,然后再次检查服务以确认它已停止并设置为手动。

这是我目前所拥有的。

##Get user credentials
$credtentials = Get-Credential


##Services
$servicename = 'Spooler'
##Server List
$server = 'myserver'

$service = Get-Service -Name $servicename -ComputerName $server

if ($service.StartType -eq 'Automatic') {
    $service | Set-Service -StartupType Manual
}

有人可以为此做出贡献吗?

答案1

$Servers为服务器名称创建一个数组变量( ),并将-ComputerName其传递给调用命令-ScriptBlock. 这将针对数组中列出的每台机器运行 PowerShell 逻辑。

这也使用您输入的凭证,并使用该凭证运行脚本块中调用的命令作为针对所有这些服务器的安全上下文。

如果设置为,它将设置StartType为,如果服务状态为 ,它将停止服务。之后,它将输出远程服务器名称、服务、和。ManualAutomaticRunningNameStatusStartType

请注意,这假定您放入变量的凭据$credential对您运行远程命令的每个服务器具有管理员访问权限;$servers每次运行相应地调整列表。

电源外壳

$credentials = Get-Credential;
$Servers = "server0004","server0982";
$servicename = 'Spooler';

Invoke-Command -ComputerName $Servers -ScriptBlock {
    $service = Get-Service -Name $args[0];
    If($service.StartType -eq 'Automatic'){$service | Set-Service -StartupType Manual};
    If($service.Status -eq 'Running'){$service | Stop-Service -Force};
    $service = Get-Service -Name $args[0];
    $service | Select @{n="Server"; e={$env:COMPUTERNAME}}, Status, Name, StartType | FT
    } -ArgumentList $servicename -Credential $credentials;

输出

Server      Status Name    StartType
------      ------ ----    ---------
server0982 Stopped Spooler    Manual



Server      Status Name    StartType
------      ------ ----    ---------
server0004 Stopped Spooler    Manual

支持资源

  • 调用命令

    -ArgumentList Object[]

    在命令中设置局部变量。在远程计算机上运行命令之前,命令中的变量将被这些值替换。以逗号分隔的列表形式输入值。值按列出的顺序与变量相关联。ArgumentList 的别名为“Args”。

  • 停止服务

相关内容