【问题标题】:How to extract server information如何提取服务器信息
【发布时间】:2015-07-13 14:26:56
【问题描述】:

目的:如何提取服务器信息?

对于servers.txt中列出的每个服务器名称,我想获得以下信息(以这种格式):

服务器名称、IP 地址、操作系统名称、总物理内存、处理器、每个驱动器号和大小、系统型号

每个服务器的逗号分隔和换行。

下面是我的 PowerShell 代码。你们的家伙能提示一下为什么这不起作用吗?还有为什么我在New-Object 语句中出现错误?

foreach ($ComputerName in (Get-Content -Path .\servers.txt)) {
  $HashProps = @{
    'tHostname' = Get-WmiObject Win32_Computersystem -ComputerName $ComputerName | Select-Object -ExpandProperty Name
    'tIP' = [System.Net.Dns]::GetHostAddresses($computername)
    'tOS' = Get-WmiObject -ComputerName $ComputerName -Class Win32_OperatingSystem | Select-Object -ExpandProperty Caption
    'tMemory' = Get-WmiObject Win32_PhysicalMemory | Measure-Object -Property capacity -Sum | foreach { "$("{0:n2}" -f ( $_.Sum/1GB ) )" }
    'tcpu' = Get-WmiObject Win32_processor | Select-Object name, numberofcores
    'tDisks' = Get-WmiObject Win32_LogicalDisk | foreach { "$($_.DeviceID) $("{0:n2}" -f ( $_.Size/ 1GB ) )" }
    'tsysmodel' = Get-Wmiobject Win32_computersystem | Select-Object model
  }
  New-Object -TypeName psObject -Property $HashProps |
  ConvertTo-Csv -NoTypeInformation | Out-File -Append .\output.csv
}

如果这更容易的话,我愿意接受其他方法。

【问题讨论】:

  • 您需要定义“不起作用”并解释您从New-Object 得到的错误。
  • @alroc:New-Object 出乎意料。如果我没有运行最后两行,则不会出现错误。然后运行最后两行工作正常。但是,我没有了解所有服务器和我寻求的格式。我希望这会有所帮助。
  • 请不要解释错误。按原样准确发布它们。如果需要解释,我们会做的。

标签: powershell server wmi


【解决方案1】:

您是否验证过每一行实际上都返回了您想要的内容?

我刚刚把它扔进了 ISE,它工作正常:

$f = gwmi win32_computersystem | select name,model,totalphysicalmemory
$hash = @{
    'name' = $f.name
    'model' = $f.model
    'memory' = $("{0:n2}" -f ( $f.totalphysicalmemory/1GB ) )
}
New-Object -TypeName psobject -Property $hash | ConvertTo-Csv -NoTypeInformation | Out-File -Append .\test.csv

此外,如果您希望属性在 CSV 中以特定顺序显示,则需要一些额外的魔法,否则它们会按字母顺序排列。

【讨论】:

    【解决方案2】:

    有点拉皮条,也许这会对你有所帮助:

    $Servers = Foreach ($ComputerName in (Get-Content -Path .\Servers.txt)) {
        $CS = Get-WmiObject Win32_ComputerSystem -ComputerName $ComputerName
        $OS = Get-WmiObject Win32_OperatingSystem -ComputerName $ComputerName
        $PM = Get-WmiObject Win32_PhysicalMemory -ComputerName $ComputerName
        $PR = Get-WmiObject Win32_processor -ComputerName $ComputerName
        $LD = Get-WmiObject Win32_LogicalDisk -ComputerName $ComputerName
        $IP = [System.Net.Dns]::GetHostAddresses($ComputerName)
    
        [PSCustomObject]@{
            ServerName = $CS | Select-Object -ExpandProperty Name
            IPAddress  = $IP | Select-Object -ExpandProperty IPAddressToString
            OS         = $OS | Select-Object -ExpandProperty Caption
            Memory     = $PM | Measure-Object -Property Capacity -Sum | foreach { "$("{0:n2}" -f ( $_.Sum/1GB ) )" }
            CPU        = $PR | Select-Object Name, NumberOfCores
            Disks      = $LD | foreach { "$($_.DeviceID) $("{0:n2}" -f ( $_.Size/ 1GB ) )" }
            Model      = $CS | Select-Object -ExpandProperty Model
        }
    }
    
    $File = Join-Path $env:TEMP 'Ouptut.csv'
    $Servers | Export-Csv -Path $File -NoTypeInformation -Delimiter ';'
    Start-Process $File
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 2021-01-28
      • 2011-03-10
      相关资源
      最近更新 更多