获取服务结果到阵列

时间:2015-09-22 14:02:46

标签: powershell

我确定这应该是直截了当的,但我已经坚持了一段时间......

我正在尝试将服务名称(对于sql server)添加到数组中,但无法弄清楚如何执行此操作。我基本上希望数组内容看起来像这样的输出:

Get-Service -computername $server_name -name sql* | format-table -property name

我尝试过这样的事情,但$ service_name的内容很奇怪:

$service_name = (Get-Service -computername $server_name -name sql* -exclude *sqlwriter | format-table -property name)

无论我尝试错误还是在我的阵列中发出一些奇怪的消息。这应该容易/可能吗?我猜测我可以将结果转储到一个文本文件中,然后使用它的内容,但它有点混乱,而且开销比看上去要多。

2 个答案:

答案 0 :(得分:2)

不确定,但在哪里找到这个(-Name和/或-Exclude的模式有什么变化?

PS> $names = (Get-Service -Name Sql* | select name)
PS> $names.GetType().IsArray
True
PS> $names.Length
3
PS> $names

Name
----
SQLBrowser
SQLSERVERAGENT
SQLWriter

如果您真的希望“名称”为System.String数组,或者甚至沿着以下几行。

PS> $names = (Get-Service -Name Sql* | foreach { $_.Name -as [string]})
PS> $names[0].GetType().FullName
System.String
PS> $names
SQLBrowser
SQLSERVERAGENT
SQLWriter

但是请记住@alroc的答案中的好建议 - 也许你想尽可能长时间地保留Get-Service的结果的实际类型(System.ServiceProcess.ServiceController)并访问/使用{尽可能晚的{1}}属性。 YMMV。

答案 1 :(得分:1)

您正在使用管道中的format-table。无论何时使用format-* cmdlet,这都是数据行的结尾 - 它现在只是一组格式化的文本,它不再是您可以实际获得的数据使用

尝试将格式化为表格的名称进行查看:

$service_name = (Get-Service -computername $server_name -name sql* -exclude *sqlwriter);    
$service_name | format-table -property name;

也就是说,我运行了你的版本和我的版本并得到了相同的 visual 输出 - 关键的区别在于我的数据存储在$service_name中,而不仅仅是一堆文本(就像你的那样)。

编辑:

回应:

  

我真正需要的只是数组中的服务名称,然后在别处使用

$service_name = (Get-Service -computername $server_name -name sql* -exclude *sqlwriter) | select-object -expandproperty name;

或:

$service_name = (Get-Service -computername $server_name -name sql* -exclude *sqlwriter).name;

无需直接调用WMI。