获取get-wmiobject的每个对象作为输出



在使用get-wmiobject为服务器获取sql服务时,我没有得到正确的输出。

脚本:

$server='XYZ'
$q = Get-WmiObject -query "SELECT * FROM win32_service WHERE name LIKE '%MSSQL% OR name LIKE '%SQLAgent%'" -computername $server | Sort-Object -property name | select name,startmode,state; 
$out= "$server" + "," + "$q.name" + "," + "$q.startmode" + "," + "$q.state" 
$out>>$pathoutput.csv

输出:

XYZ,Mssqlserver Sqlserveragent sqlserverbrowser,Auto Auto Manual,Running Running Stopped

所需输出:

XYZ,Mssqlserver,Auto,Running
XYZ,Sqlserveragent,Auto,Running
XYZ,Sqlserverbrowser,Manual,Stopped

原因是$q包含一个数组。WMI查询返回服务器对象,因此需要对其进行迭代。要包含computername,请将systemname添加到属性列表中。

$q= Get-WmiObject -query `
"SELECT * FROM win32_service where name like '%mssql%' or name like '%sqlagent%'" -computername $server `
| Sort-Object -property name | select name,startmode,state,systemname

然后很容易将结果集转换为CSV:

$q | ConvertTo-Csv -NoTypeInformation
"myserver","MSSQLSERVER","Auto","Running"
"myserver","MSSQLServerADHelper100","Disabled","Stopped"

最新更新