导出属性前缀行与servername为附加日志

时间:2015-05-25 06:22:57

标签: windows powershell service

我想在每台服务器上运行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

2 个答案:

答案 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指出的那样,有一个属性__SERVERSystem.Management.ManagementObject#root\cimv2\Win32_TerminalService对象一起返回,您也可以使用它。

如果您正在进行远程处理并希望保留计算机名称的任何友好名称,请使用上述选项之一。否则,您可以在__SERVER声明中使用Select