我想在每台服务器上运行PowerShell脚本,以便附加到csv
我在一行中需要值“server name”,service,servicename,startname,startmode,因此可以在excel中通过“服务器名称”等进行过滤
我到目前为止......
$computername = $env:computername
$computername | Get-WmiObject win32_service | select $computername,name, startname, startmode | Export-Csv c:\temp\export.csv
但它不会为每一行添加servername
。
答案 0 :(得分:1)
你走在正确的轨道上。这是怎么回事?
Get-WmiObject win32_service | select -property name,startname,startmode,__server | Export-csv \\server1\blah\file.csv -append
答案 1 :(得分:1)
您正在选择要在屏幕上显示的属性列表。 $computername
不是属性名称,而是您尝试添加到列中的值。
您需要添加该属性并填充它。解决这个问题的几种简单方法。首先,就像您在上面描述的那样为ServerName
创建一个calculated property。我们还清理了如何将$computername
传递给函数。
Get-WmiObject win32_service -ComputerName $computername | select @{Name="ServerName";Expression={$computername}},name, startname, startmode
您也可以将cmdlet Add-Member
用于同一事物。
Get-WmiObject win32_service -ComputerName $computername |
Add-Member -MemberType NoteProperty -Name ServerName -Value $computername -PassThru |
select servername, name, startname, startmode
或者你可以创建一个自定义对象(不是我会采取的方法,因为它主要是多余的,但包含完成)。
Get-WmiObject win32_service -ComputerName $computername | ForEach-Object{
$props = @{
"server name" = $computername
"name" = $_.name
"start name" = $_.startname
"start mode" = $_.startmode
}
New-Object -TypeName PSCustomObject -Property $props
} | select "Server Name",name, "start name", "start mode"
还有一个更简单的选项
正如bundyfx指出的那样,有一个属性__SERVER
与System.Management.ManagementObject#root\cimv2\Win32_TerminalService
对象一起返回,您也可以使用它。
如果您正在进行远程处理并希望保留计算机名称的任何友好名称,请使用上述选项之一。否则,您可以在__SERVER
声明中使用Select