当前位置: 首页 > 知识库问答 >
问题:

从txt文件循环服务,根据需要更改启动类型,根据需要启动

方季同
2023-03-14

我正在尝试创建一个脚本,该脚本将循环txt文件中列出的所有服务,检查服务启动类型是否正确(如果不正确,则更改它),并在需要时启动服务。我不太擅长Powershell,也不会真正从谷歌找到任何有用的东西。

我的文本文件:

Service A
Service B
Service C
Service D
Service E

我当前的脚本看起来是这样的,目前我能够从文本文件中打印每一个服务,但缺少下一步的信息。

$services = Get-Content .\services.txt

## Pass each service object to the pipeline and process them with the Foreach-Object cmdlet
foreach ($service in $services) {
    
    Get-Service $service | Select-Object -Property Name, StartType, Status, DisplayName
    }

困难的是每个服务都不具有相同的启动类型和状态,因此它更加复杂,例如

  • 服务A需要手动并正在运行
  • 服务B需要自动运行
  • 服务C需要手动并停止

因此,如果服务A不是手动的并且正在运行,脚本将更改它们并给出有关更改的信息(write-host?)。

我知道我可以用命令set-service更改服务启动类型和状态,用get-service更改列表状态,但我的技能还不足以在脚本中设置。不知道这是不是可能的,或者他们是更好的方法来做这件事。

共有1个答案

廉博赡
2023-03-14

最好将服务文本文件更改为Csv文件,在该文件中不仅可以列出服务的名称,还可以列出所需的StartType和状态,如:

Service,StartType,Status
Service A,Manual,Running
Service B,Automatic,Running
Service C,Manual,Stopped

那么您可以编写如下代码

Import-Csv -Path .\services.csv | ForEach-Object {
    $changed = $false
    $service = Get-Service -Name $_.Service
    if ($service.StartType -ne $_.StartType) {
        Write-Host "Changing StartType for service $($service.Name)" -ForegroundColor Yellow
        $service | Set-Service -StartupType $_.StartType
        $changed = $true
    }
    if ($service.Status -ne $_.Status) {
        Write-Host "Changing Status for service $($service.Name)" -ForegroundColor Yellow
        $service | Set-Service -Status $_.Status
        $changed = $true
    }

    # refresh the info if you changed anything above
    if ($changed) { $service = Get-Service -Name $_.Service }
    # write out current status
    Write-Host "Service: $($service.Name) - StartType: $($service.StartType) - Status: $($service.Status)"
}
 类似资料:
  • 问题内容: 如果我更改了php.ini文件中的设置,是否需要重新启动Apache才能使其生效? 问题答案: 实际上取决于。取决于您如何在该Web服务器中使用php: 使用php一个模块:您必须重新启动服务器进程 使用PHP作为CGI后端:你 没有 重新启动服务器进程 使用php fastcgi:不确定,实际上…(但是重启是安全的) 使用PHP-FPM:您必须重新启动fpm服务器进程以防止不一致

  • 向整个社区致意。我的payara 5.2020应用程序服务器有问题。当我想用命令systemctl start payara.service启动它时,它不会启动并向我显示此错误消息: 启动服务器需要主密码。没有控制台,没有提示。您应该创建域java[3370]:命令启动域失败。 我试图改变我的域名的默认密码,但它仍然不起作用。 谢谢大家

  • 我必须通过传递header和body来发出HTTP POST请求。在正文中,我需要在发布数据之前提供,所以我最初以“1”开头。之后,我将发布数据,并返回JSON响应,如下所示。 现在,根据的响应,我将决定还需要进行多少次调用。现在在上面的响应中,是3,所以我需要对同一个URL总共进行三次调用。由于我们已经进行了1个调用,我将再进行2个调用,在主体中使用“2”和“3”。 下面是我的工作代码。我只需要

  • 我有一个用例,我想使用flume将远程文件复制到hdfs中。我还希望复制的文件应与HDFS块大小(128MB/256MB)对齐。远程数据的总大小为33GB。 我使用avro源和接收器将远程数据复制到hdfs中。类似地,在接收端,我正在进行文件大小滚动(128,256)。但是从远程机器复制文件并存储到hdfs(文件大小128/256 MB)中,flume平均需要2分钟。 水槽配置:阿夫罗源(远程机器

  • 我在JFrame内部的JTabbedPane中工作。我有一个jRadioButton,当我选择激活/启用两个选择日期的jSpner控件时,我需要它 我需要在jRadioButton清除时禁用jSpinner,并在选中时启用它。jRadioButton是由两个按钮组成的按钮组的一部分。启用后的另一个jRadioButton将打开一个jTextField来输入数据。 任何对留档的帮助或链接都会有帮助。

  • 我有一个Firebase实时数据库,其中有一组与谷歌地图上的位置相关的项目。所以Firebase中的每个孩子都有这样的数据结构。 在我的应用程序中,数据库中的每个项目,以标记的形式添加到Google地图上的相关位置。现在我认为将所有项目发送给所有用户不是一个好主意。仅向用户发送与他们相关的这些项目会更有效。这些项目是与用户位于同一区域中的一个,在这种情况下,相同的区域意味着相同的邮政编码。 为了处