PowerShell询问远程系统



我编写了一个函数来询问我的本地系统。只是以一种有用的形式收集我能得到的任何信息。所以我想知道一个可以以这种方式询问其他系统的函数。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:SOFTWAREMicrosoftWindows NTCurrentVersion' -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
}

没有理由从头开始做这种事情。您正在做的事情有许多现有的脚本。通过Microsoft powershellgallery.com.

用于桌面清单的PowerShell脚本要收集的基本脚本桌面库存。

PowerShell硬件清单脚本场景:PowerShell硬件库存脚本。你有没有想过在没有去每个人那里寻找填写所需信息的麻烦库存信息?保持库存很重要最新的每次发生变化

下载Get-Inventory.ps1

您只需使用脚本并在PowerShell远程会话中使用InvokeCommand(在本地和远程计算机上运行命令(即可获取远程计算机信息。

相关内容

  • 没有找到相关文章

最新更新