Set-Service 帮助信息

本文介绍 PowerShell 中 Set-Service 命令的使用方法,包括如何更改服务的显示名称、描述和启动模式。提供了详细的参数说明及示例,帮助读者掌握服务管理技巧。
 
如下说明是翻译: help Set-Service 产生的帮助信息.
译者: Edengundam(马涛)
 
Set-Service
 
大纲
改变服务的显示名(display name), 描述(description)或开始模式(starting mode).
 
语法
Set-Service [-name] <string> [-displayName <string>] [-description <string>] [-startupType {<Automatic> | <Manual> | <Disabled>}] [-whatIf] [-confirm] [<CommonParameters>]
 
详细描述
Set-Service cmdlet改变服务的属性, 包括: 描述, 显示名和启动类型. 你可以通过服务名称或显示名称(display name)来指定需要挂起的服务.
 
参数
 
-name <string>
指定需要被修改的服务名称, 此参数接受通配符.此参数可以在命令行忽略. 你既可以使用"-Name", 也可以使用其别名"-ServiceName", 甚至忽略此参数名.
 
强制参数?
true
参数位置?
1
默认值
 
允许从管道绑定输入?
true (根据值,根据属性名)
允许通配符扩展?
false
 
-displayName <string>
为服务指定新的显示名.
 
强制参数?
false
参数位置?
named
默认值
 
允许从管道绑定输入?
false
允许通配符扩展?
false
 
-description <string>
为服务指定新的描述.
 
服务描述出现在管理工具的服务中. 描述信息不是通过Get-Service 取得ServiceController对象的属性, 然而Win32_Service WMI类包含了描述属性. 要获取该类的实例, 使用Get-WMIObject cmdlet.
 
强制参数?
false
参数位置?
named
默认值
 
允许从管道绑定输入?
false
允许通配符扩展?
false
 
-startupType <ServiceStartMode>
为服务指定新的启动模式. 合法启动类型如下:
 
·         Automatic: 随着操作系统一起启动.
·         Manual   : 通过用户或程序启动.
·         Disabled : 不能启动.
 
此参数接受的输入值:
 
·         Automatic
·         Manual
·         Disabled
 
强制参数?
false
参数位置?
named
默认值
 
允许从管道绑定输入?
false
允许通配符扩展?
false
 
-whatIf
描述执行此命令将会发生的现象, 不会真正执行此命令.
 
强制参数?
false
参数位置?
named
默认值
 
允许从管道绑定输入?
false
允许通配符扩展?
false
 
-confirm
执行命令前提示你进行确认.
 
强制参数?
false
参数位置?
named
默认值
 
允许从管道绑定输入?
false
允许通配符扩展?
false
 
<公共参数>
此命令支持公共参数: -Verbose, -Debug, -ErrorAction, -ErrorVariable, and -OutVariable. 更多信息, 输入, "get-help about_commonparameters".
 
注意
 
更多信息, 输入"Get-Help Set-Service -detailed".需要技术信息, 输入"Get-Help Set-Service -full".
 
如果需要为该命令提供多个参数, 请使用逗号进行分隔. 例如, "<parameter-name> <value1>, <value2>".
 
Set-Service只有在当前用户有权限时才能控制服务. 如果命令没有正常工作, 可能是您没有执行此操作的必要权限.
 
要查找您系统上服务的服务名称和显示名称, 输入命令"get-service". 服务名称显示在列名为"Name"的列中, 显示名称显示在列名为"DisplayName"的列中.
 
1
 
C:/PS>set-service -name lanmanworkstation -DisplayName "LanMan Workstation"
 
此命令将服务lanmanworkstation的显示名称改变成"LanMan Workstation" (默认值: "Workstation"). 此命令使用参数Name来确定需要更改的服务, 参数DisplayName指定服务的新显示名.
 
2
 
C:/PS>get-wmiobject win32_service -filter "name = 'SysmonLog'"
 
C:/PS>set-service sysmonlog -startuptype automatic
 
C:/PS>get-wmiobject win32_service -filter "name = 'SysmonLog'"
 
这几个命令获得Alerts (SysmonLog)服务的启动类型, 将其设置为automatic, 并显示改变的结果. (译者注: 原文中的Performance Logs没有出现, 因此, 暂时将其删去. )
 
第一个Get-WmiObject cmdlet取得WMI表示SysmonLog服务的对象. 此命令的默认输出将在"StartMode"域中包含启动类型. 第二个命令使用Set-Service改变此服务的启动类型为自动(automatic). 接下来, 再次执行第一个命令查看更改.
 
要显示计算机上所有服务的启动类型, 输入: "get-wmiobject win32_service | format-table Name, StartMode -autosize".
 
3
 
C:/PS>C:/PS>set-service -name Schedule -description "Configures and schedules tasks."
 
get-wmiobject win32_service | where-object {$_.Name -eq "Schedule"} | format-list Name, Description
 
这几条命令改变服务Task Scheduler服务的描述信息, 然后将结果输出.
 
命令首先使用Set-Service改变服务描述. 通过指定服务名称"Schedule"来确定需要修改的服务.
 
第二命令使用Get-WmiObject cmdlet获取WMI Win32_ServiceTask Scheduler服务实例. 命令第一部分用来去的所有Win32_service类的实例. 管道运算符 (|)将结果发送给Where-Object cmdlet, 此命令去则那些名称属性为"Schedule"的实例. 另一个管道运算符将结果发送给Format-List cmdlet,此命令将输入对象的名称和描述属性列表显示.
 
相关链接
Get-Service
Start-Service
Stop-Service
Restart-Service
Resume-Service
Suspend-Service
New-Service
 
 
<think> 嗯,用户让我解释一个特定的PowerShell命令,这个命令看起来是在处理YAML配置文件。用户之前提到过"参考站内引用",但根据上下文,这似乎只是一个通用提醒,并不是真正的引用需求。用户的核心诉求是理解这个命令的每个部分及其功能。 这个命令的结构其实挺典型的PowerShell管道操作,拆解起来应该不难。先看最外层的& {}结构,这是调用操作符加脚本块的标准用法。然后注意到Get-Content用了-Raw参数,说明是要一次性读取整个文件内容,而不是按行读取——这点很重要,因为-replace操作需要处理多行文本。 -replace部分的关键是字符串替换,把模板里的占位符替换成实际路径。有趣的是这里用了%CD%,这是cmd的环境变量语法,在PowerShell里也能用但不够规范。更好的做法是用$PWD.Path或者Resolve-Path,不过既然命令这么写了,说明用户可能是在混合环境下工作。 最后的Set-Content很直接,就是把修改后的内容输出到新文件。整个流程本质上就是配置文件模板化处理,这在部署微服务时很常见。用户可能是运维人员或者开发工程师,正在搭建本地微服务环境。 考虑到这类操作的常见痛点,应该提醒三点:路径分隔符要用反斜杠转义,原模板文件是否保持只读,以及编码问题——YAML对UTF8很敏感。用户没问但隐含的需求可能是想复用这个模式,所以示例部分给出标准化的改写建议会很有帮助。 对了,用户上次问的是PowerShell命令解析,这次还是同类问题,说明在系统管理方面有持续需求。生成的问题特意加入了错误处理和正则表达式进阶,因为这是实际使用中必然遇到的坎儿。 </think> 这个 PowerShell 命令主要用于**自动化修改 YAML 配置文件**,具体功能是**将模板文件中的占位符替换为实际路径,并生成一个新的配置文件**。以下是详细解释: ### 命令拆解与分析 1. **`& { ... }`**: * `&`:调用操作符 (Call operator),用于执行一个脚本块 `{ ... }`。 * `{ ... }`:脚本块 (Script block),包含一组要执行的 PowerShell 语句。这里只有一个管道操作。 2. **`(Get-Content '.\Microservices\nemanage-service-template.yaml' -Raw)`**: * `Get-Content`:读取文件内容的命令。 * `'.\Microservices\nemanage-service-template.yaml'`:指定要读取的文件路径。`.\` 表示当前目录。 * `-Raw`:**关键参数**。它指示 `Get-Content` 将整个文件内容作为**单个多行字符串**一次性读取出来,而不是按行读取成字符串数组。这对于替换跨越多行的文本或保持原始格式(如 YAML 缩进)至关重要。 3. **`-replace 'LCT_SFTP_PATH', '%CD%\Microservices\sftp-service\tempFile'`**: * `-replace`:字符串替换运算符。在管道左侧传入的字符串(即模板文件内容)中搜索匹配项并替换。 * `'LCT_SFTP_PATH'`:要被替换的**文本(占位符)**。通常在模板文件中作为标识符出现。 * `'%CD%\Microservices\sftp-service\tempFile'`:用来替换占位符的**新文本**。 * `%CD%`:这是 **CMD.exe 环境变量**的语法,代表 **当前工作目录 (Current Directory)**。在 PowerShell 中,等效的变量是 `$PWD` 或 `(Get-Location).Path`。 * **注意**:PowerShell 能识别 `%CD%`,但这是因为它继承了父进程(通常是 CMD 或 Explorer)的环境变量。更符合 PowerShell 习惯的写法是 `"$((Get-Location).Path)\Microservices\sftp-service\tempFile"` 或 `"$PWD\Microservices\sftp-service\tempFile"`。 * 替换后的路径是一个**绝对路径**(由当前目录 + 相对路径构成)。 4. **`| Set-Content '.\Microservices\nemanage-service.yaml'`**: * `|`:管道运算符。将前面操作的结果(即替换占位符后的新内容)传递给后面的命令 `Set-Content`。 * `Set-Content`:将内容写入文件的命令。 * `'.\Microservices\nemanage-service.yaml'`:指定要**写入的目标文件路径**。如果文件不存在则创建,存在则覆盖。 ### 命令整体流程与作用 1. **读取模板**:从 `.\Microservices\nemanha ge-service-template.yaml` 文件中读取**全部内容**作为一个长的字符串。 2. **替换占位符**:在这个长字符串中,查找所有的字符串 `LCT_SFTP_PATH`,并将其**替换**为当前工作目录下的绝对路径 `[当前目录]\Microservices\sftp-service\tempFile`。 3. **生成新文件**:将替换后的新字符串内容**写入**(或覆盖)到 `.\Microservices\nemanage-service.yaml` 文件中。 ### 总结该命令的作用 * **核心功能**:实现了一个简单的**配置文件模板化处理**。使用一个包含占位符 `LCT_SFTP_PATH` 的模板文件 (`nemanage-service-template.yaml`),动态地将该占位符替换为基于当前运行环境的实际路径 (`%CD%\...\tempFile`),从而生成一个可直接使用的、包含正确路径的配置文件 (`nemanage-service.yaml`)。 * **典型场景**:在部署脚本、环境设置脚本或自动化构建流程中,用于根据当前环境生成特定配置,避免手动修改配置文件的路径。 * **关键点**: * 使用 `-Raw` 确保 YAML 格式(尤其是缩进和多行值)在读取和替换过程中不被破坏。 * 使用 `-replace` 进行全局字符串替换。 * 最终生成了一个`nemanage-service.yaml`文件(基于模板生成的实际配置文件)。 ### 注意事项 1. **路径分隔符**:替换文本中的 `\` 在字符串中是正常的。但如果占位符出现在 YAML 的值中且需要保留 `\`(例如在 Windows 路径中),这样替换是正确的。 2. **模板文件**:原模板文件 (`nemanage-service-template.yaml`) 保持不变。 3. **目标文件**:目标文件 (`nemanage-service.yaml`) 会被**覆盖**。如果文件已存在且重要,请确保有备份或脚本逻辑安全。 4. **`%CD%`的使用**:虽然该命令中 `%CD%` 能工作,但在纯粹的 PowerShell 脚本中,**建议使用 `$PWD` 或 `(Get-Location).Path`** 来表示当前目录,这样更符合 PowerShell 的规范和可读性。例如: ```powershell & { (Get-Content '.\Microservices\nemanage-service-template.yaml' -Raw) -replace 'LCT_SFTP_PATH', "$($PWD.Path)\Microservices\sftp-service\tempFile" | Set-Content '.\Microservices\nemanage-service.yaml' } ``` 5. **编码问题**:`Get-Content` 和 `Set-Content` 默认使用系统的 ANSI 编码。如果模板文件是 UTF-8 (带或不带 BOM),建议使用 `-Encoding` 参数指定(如 `-Encoding UTF8`),以避免乱码问题。 ### 改写建议 (更 PowerShell 化) ```powershell & { $templatePath = '.\Microservices\nemanage-service-template.yaml' $outputPath = '.\Microservices\nemanage-service.yaml' $newPath = Join-Path -Path $PWD.Path -ChildPath 'Microservices\sftp-service\tempFile' (Get-Content -Path $templatePath -Raw) -replace 'LCT_SFTP_PATH', $newPath | Set-Content -Path $outputPath } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值