powershell - 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:\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
}
解决方案
没有理由从头开始做这种事情。您正在做的事情有许多现有的脚本。通过 Microsoft powershellgallery.com。
用于桌面清单的PowerShell 脚本 用于收集桌面清单的基本脚本。
PowerShell 硬件清单脚本方案:PowerShell 硬件清单脚本。您是否曾经想要拥有一份库存,而无需费力地去寻找填写库存信息所需的信息?保持您的库存是最新的很重要。每次都有变化
您可以在 PowerShell 远程会话中使用您的脚本并使用Invoke-Command(在本地和远程计算机上运行命令。)来获取远程计算机信息。
推荐阅读
- laravel - 如何使用 laravel 同时减少 3 个操作(添加数据库、通知和广播)的执行时间?
- ajax - Pinterest Addtocart 事件代码 | 购物 | 涡轮主题
- java - 在Java中计算两个字符串之间的错误
- r - 如何按第一个和最后一个数据输入对特定数据帧进行排序?
- timer - attiny85 bit bang uart 与 arduino
- python - 在 Python 的 Line2D 中使用属性“figsize”的等价物是什么
- lua - 在 Lua 中用另一个“对象”制作一个“对象”的原型
- php - php正则表达式从字符串中提取单个参数值
- css - ScrollToView在Angular中水平
- python - 在 Pandas 中跨多个日期时间列获取最小值