在使用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"