使用服务名称的一部分(版本)

时间:2017-04-28 08:46:49

标签: powershell service version

我正在尝试将文件从C:\example复制到D:\example\$version\,我正在尝试从已安装服务的显示名称中获取$version

我想我需要做这样的事情,但我不知道如何只获得myservice的版本:

$version = Get-Service -DisplayName "myservice *"
copy-item "c:\example\*" "d:\example\$version\" -recurse

3 个答案:

答案 0 :(得分:1)

这基本上取决于PowerShell如何使用“get”命令返回数据。请记住,“获取服务”不只是返回包含您的服务名称的字符串,而是返回有关该服务的收集数据的“对象”。

PS C:\storage\scripts> get-service -DisplayName "Windows Search"

Status   Name               DisplayName
------   ----               -----------
Running  WSearch            Windows Search

仅此一项就可以向您显示您的$ version变量不仅仅是服务的名称。您需要的是实际使用返回对象的DisplayName组件:

PS C:\storage\scripts> $version = get-service -DisplayName "Windows Search"
PS C:\storage\scripts> $version.DisplayName
Windows Search

希望这能让你顺利上路。

编辑:就实际服务版本而言,get-service不会扩展到该级别,但可以使用.NET调用从可执行文件中获取此内容:

PS C:\Program Files\7-Zip> [System.Diagnostics.FileVersionInfo]::GetVersionInfo("C:\Program Files\7-Zip\7z.exe").FileVersion 
16.04

答案 1 :(得分:0)

假设您的服务名称的名称末尾有版本号,并且它与名称的其余部分用空格字符分隔,您可以这样做:

$ServiceName = (Get-Service -displayname "myservice *" | Select -Last 1).DisplayName
$Version = ($ServiceName -Split ' ')[-1]

copy-item "c:\example\*" "d:\example\$Version\" -recurse

<强>解释

  • 通过通配符模式获取服务(如您所提供的),然后使用Select -Last 1以防多个匹配,以便按字母顺序获取最后一个(应该是最高版本)。
  • 使用-split运算符将显示名称拆分为空格字符上的字符串数组,然后通过索引标识符-1获取结果数组中的最后一项。

答案 2 :(得分:0)

这是一个使用-replace函数而不是拆分的完整示例:

$serviceName = 'myservice'
$version = (Get-Service -DisplayName "$serviceName*").DisplayName -replace "$serviceName\s*(.*)", '$1'
Copy-Item "c:\example\*" "d:\example\$version\" -recurse