Вы получаете несколько объектов от Get-WmiObject
. Вам нужно все oop, если вы хотите что-то сделать для каждого из них.
Кроме того, хорошая вещь - кодирование 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 имеет удобную удобную функцию: когда у вас есть массив объектов, вы можете запрашивать вложенные свойства у всех них в one go.
Например, если в $installed_memory
имеется 4 Win32_PhysicalMemory
объектов, то
$installed_memory.Partnumber.Trim()
дает вам 4 легко обрезанных номера детали за один шаг.