PowerShell询问远程系统

问题描述 投票:0回答:1

我编写了一个查询本地系统的函数。只要收集我能以有用格式获得的所有信息即可。所以我想知道一个功能是否可以这种方式询问其他系统。 function sys-remote <$ip-or-hostname>这样,它就可以尝试并尽可能多地返回有关该系统的信息。这实际上只是一个想法,我想有很多要点:

•使用IP地址,我们如何以最类似于PowerShell的方式解析主机名?

•是否提供IP地址的主机名,我们能否解析尽可能多的信息。即MAC地址,主机名,IP(以及可能对我们可见的其他IP地址)?

•我们可以在该系统上恢复共享驱动器吗,所以可以看到要连接的共享列表。

•关于系统信息,总是需要WinRM,还是WMI或CIM可以满足以下大多数情况?

•可能的话,还可能返回该远程系统上打开的任何端口的逗号分隔列表?

•如果远程系统是Linux,该怎么办。从我们可以从Windows系统远程查询的Linux系统中,可以合理地从上述系统中获得多少(我猜WinRM和WMI已经淘汰,但也许CIM仍然可行?)?

通常,从诊断的角度返回这样的信息转储非常有用,因为它将提供有关要使用的系统的大量信息。像上面的任何事情(或者实际上是我在这里没有想到的其他有用的检查内容)都将不胜感激。

function sys {
    $System = get-wmiobject -class "Win32_ComputerSystem"
    $Mem = [math]::Ceiling($System.TotalPhysicalMemory / 1024 / 1024 / 1024)

    $wmi = gwmi -class Win32_OperatingSystem -computer "."
    $LBTime = $wmi.ConvertToDateTime($wmi.Lastbootuptime)
    [TimeSpan]$uptime = New-TimeSpan $LBTime $(get-date)
    $s = "" ; if ($uptime.Days -ne 1) {$s = "s"}
    $uptime_string = "$($uptime.days) day$s $($uptime.hours) hr $($uptime.minutes) min $($uptime.seconds) sec"

    $job_cpu         = Start-Job -ScriptBlock { (Get-WmiObject -Class Win32_Processor).Name }
    $job_cpu_cores   = Start-Job -ScriptBlock { (Get-WmiObject -Class Win32_Processor).NumberOfCores }
    $job_cpu_logical = Start-Job -ScriptBlock { (Get-WmiObject -Class Win32_Processor).NumberOfLogicalProcessors }
    ""
    "Hostname:        $($System.Name)"
    "Domain:          $($System.Domain)"
    "PrimaryOwner:    $($System.PrimaryOwnerName)"
    "Make/Model:      $($System.Manufacturer) ($($System.Model))"  #     "ComputerModel:  $((Get-WmiObject -Class:Win32_ComputerSystem).Model)"
    "SerialNumber:    $((Get-WmiObject -Class:Win32_BIOS).SerialNumber)"
    "PowerShell:      $($PSVersionTable.PSVersion)"
    "Windows Version: $($PSVersionTable.BuildVersion),   Windows ReleaseId: $((Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name 'ReleaseId').ReleaseId)"
    "Display Card:    $((Get-WmiObject -Class:Win32_VideoController).Name)"
    "Display Driver:  $((Get-WmiObject -Class:Win32_VideoController).DriverVersion),   Description: $((Get-WmiObject -Class:Win32_VideoController).VideoModeDescription)"
    "Last Boot Time:  $([Management.ManagementDateTimeConverter]::ToDateTime((Get-WmiObject Win32_OperatingSystem | select 'LastBootUpTime').LastBootUpTime)),   Uptime: $uptime_string"
    $IPDefaultAddress = @(Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object {$_.DefaultIpGateway})[0].IPAddress[0]
    $IPDefaultGateway = @(Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object {$_.DefaultIpGateway})[0].DefaultIPGateway[0]
    "Default IP:      $IPDefaultAddress / $IPDefaultGateway"
    Get-Netipaddress | where AddressFamily -eq IPv4 | select IPAddress,InterfaceIndex,InterfaceAlias | sort InterfaceIndex
    ""
    Wait-Job $job_cpu         | Out-Null ; $job_cpu_out = Receive-Job -Job $job_cpu
    Wait-Job $job_cpu_cores   | Out-Null ; $job_cpu_cores_out = Receive-Job -Job $job_cpu_cores 
    Wait-Job $job_cpu_logical | Out-Null ; $job_cpu_logical_out = Receive-Job -Job $job_cpu_logical
    "CPU:   $job_cpu_out"
    "CPU Cores:   $job_cpu_cores_out,      CPU Logical Cores:   $job_cpu_logical_out"
    # Get-PSDrive | sort -Descending Free | Format-Table
    gwmi win32_logicaldisk | Format-Table DeviceId, VolumeName, @{n="Size(GB)";e={[math]::Round($_.Size/1GB,2)}},@{n="Free(GB)";e={[math]::Round($_.FreeSpace/1GB,2)}}
    gwmi win32_winsat | select-object CPUScore,D3DScore,DiskScore,GraphicsScore,MemoryScore,WinSPRLevel | ft   # removed ,WinSATAssessmentState
    get-WmiObject -class Win32_Share | ft
}
powershell tcp system.diagnostics arp traceroute
1个回答
1
投票

没有理由从头开始做这种事情。有许多用于执行操作的现有脚本。通过Microsoft powershellgallery.com。

PowerShell Script For Desktop Inventory要收集的基本脚本桌面广告资源。

© www.soinside.com 2019 - 2024. All rights reserved.