繁体   English   中英

Powershell 在远程计算机上查找 RAM 信息并将零件编号保存到不同的变量中

[英]Powershell lookup RAM information on remote computer and save Partnumbers in to diffent variable

我有一个简单的脚本,可以从远程计算机中提取 RAM 部件号并在谷歌上搜索它。 但它不能按预期工作。 如果远程计算机上只安装了 1 个 RAM 模块,它会很好用,谷歌打开时会显示部件号的搜索结果,耶!。

如果远程计算机上安装了 1 个以上的 RAM 模块,则在 Google 中搜索变量中的第一个 Partnumber。 将第 2、第 3、第 4 个零件编号作为地址输入到 Chrome 标签页 2、3、4。

如何让 Chrome 通过 Google 搜索所有部件号?

我的脚本:

$ComputerName = Read-Host "Write Computer Name"

Get-WmiObject Win32_PhysicalMemory -computername $ComputerName
$ToChrome = Read-Host 'Do you want to search Google for the Partnumber(s)? Y Or N'

if ($ToChrome -eq 'Y') {$Partnumber = Get-WmiObject Win32_PhysicalMemory -computername $ComputerName | select -expandproperty Partnumber
Start-Process "chrome.exe" ("https://www.google.com/search?q=$Partnumber")}
if ($ToChrome -eq 'n') {Continue}

这是因为 chrome.exe 将部件号之间的空格解释为新地址。

我冒昧地使用 try&catch、日志文件输出和计算机名作为参数对脚本进行了皮条客,以便您可以将其称为 Get-MemoryPropertyAndSearchWithGoogle.ps1 -ComputerName ComputerName1

对于我的测试,我使用了属性 DeviceLocator,因为我的 PartNumber 是空的。

#Get-MemoryPropertyAndSearchWithGoogle.ps1
Param (
      [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
      [string]$ComputerName
    )
$ErrorPreference='Stop'
$ErrorActionPreference='Stop'
$LogFilePath = "C:\Temp\$((Get-Date).ToString("yyyy-MM-dd"))$($ComputerName)Get-MemoryPropertyAndSearchWithGoogle.log"
[string]$LogFileString = ""
#$Property = "PartNumber"
$Property = "DeviceLocator"
$ErrorExists = $false
$ComputerMemoryObjects = @()
try
  {
    $ComputerMemoryObjects = Get-WmiObject Win32_PhysicalMemory -ComputerName $ComputerName -Property *
    $LogFileString += "$((Get-Date).ToString("yyyy-MM-dd_HH:mm:ss"))#INF#Get-WmiObject Win32_PhysicalMemory -ComputerName $($ComputerName)`n"
  }
catch
  {
    $LogFileString += "$((Get-Date).ToString("yyyy-MM-dd_HH:mm:ss"))#ERR#$($error[0].exception.message)`n"
    $ErrorExists = $true
  }
[string]$SearchString = ""
foreach ($SingleComputerMemoryObject in $ComputerMemoryObjects) 
  {
    if ($SearchString)
      {
        $SearchString += "+OR+"
      }
    $SearchString += "$($SingleComputerMemoryObject.$Property)"
  }
$ToChrome = Read-Host 'Do you want to search Google for the Partnumber(s)? Y Or N'
if ($ToChrome -eq 'Y') 
  {
    if ($SearchString)
      {
        try
          {
            Start-Process "chrome.exe" ("https://www.google.com/search?q=$($SearchString)")
            $LogFileString += "$((Get-Date).ToString("yyyy-MM-dd_HH:mm:ss"))#INF#chrome.exe started with searchstring:`"$($SearchString)`"`n"
          }
        catch
          {
            $LogFileString += "$((Get-Date).ToString("yyyy-MM-dd_HH:mm:ss"))#ERR#$($error[0].exception.message)`n"
            $ErrorExists = $true
          }
      }
    else
      {
        $LogFileString += "$((Get-Date).ToString("yyyy-MM-dd_HH:mm:ss"))#INF#`$SearchString is empty`n"
      }
  }
if (!($ErrorExists))
  {
    $LogFileString += "$((Get-Date).ToString("yyyy-MM-dd_HH:mm:ss"))#INF#ScriptCompletedWithoutErrors`n"
  }
$LogFileString | Out-File $LogFilePath
$LogFileString

您可以从Get-WmiObject获得多个对象。 如果你想为每个人做一些事情,你需要一个循环。

此外,您放入 URL 的 URL 编码内容是一个好主意。 也许把它放在双引号中不会有什么坏处。

Add-Type -AssemblyName System.Web   # for [System.Web.HttpUtility]::UrlEncode()

$ComputerName = Read-Host "Write Computer Name"

$installed_memory = Get-WmiObject Win32_PhysicalMemory -ComputerName $ComputerName | Select-Object Manufacturer,PartNumber,SerialNumber,DeviceLocator,Capacity
$installed_memory | Format-Table -AutoSize

$ToChrome = Read-Host 'Do you want to search Google for the Partnumber(s)? Y Or N'

if ($ToChrome -eq 'Y') {
    $unique_numbers = $installed_memory.Partnumber.Trim() | Sort-Object -Unique
    foreach ($number in $unique_numbers) {
        $query = [System.Web.HttpUtility]::UrlEncode('"' + $number + '"')        
        Start-Process chrome.exe "https://www.google.com/search?q=$query"
    }
}

Powershell 有一个方便的功能:当您拥有一组对象时,您可以一次性从所有对象中查询嵌套属性。

例如,如果$installed_memory有 4 个Win32_PhysicalMemory对象,则

$installed_memory.Partnumber.Trim()

一步即可为您提供 4 个易于修剪的零件号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM