Цикл по IP-адресу

#powershell #for-loop

#powershell #for-цикл

Вопрос:

У меня есть рабочий код для проверки дома на предмет объема оперативной памяти на каждом устройстве. Я даю ему IP-адрес, и он возвращает объем оперативной памяти и несколько других параметров, все в хорошем формате. Могу ли я просто добавить в это готовый файл, чтобы заставить его принимать список IP-адресов из .txt или .csv?

Я пытался вставить этот код, который у меня есть, в другой файл, который отсутствует в списке, но я продолжаю получать ошибки.

 param([string]$fileInput,[string]$fileOutput )

If ( $fileInput -eq "" -OR $fileOutput -eq ""){ 
    $list =  Import-Csv $fileInput -Header name, licenseKey, keyStatus

    foreach( $computerName in $list){
          export-csv -InputObject $computerName -append $fileOutput -Encoding utf8
    }
}
  

Я не уверен в правильном размещении этих строк в моем коде.

 write-host ""
$strComputer = Read-Host "Enter Computer Name to list memory slot information"
$colSlots = Get-WmiObject -Class "win32_PhysicalMemoryArray" -namespace "rootCIMV2" -computerName $strComputer
$colRAM = Get-WmiObject -Class "win32_PhysicalMemory" -namespace "rootCIMV2" -computerName $strComputer
$NumSlots = 0

write-host ""
$colSlots | ForEach {
  “Total Number of Memory Slots: ”   $_.MemoryDevices
  $NumSlots = $_.MemoryDevices
}

write-host ""
Read-Host "Press Enter to continue"

$SlotsFilled = 0
$TotMemPopulated = 0

$colRAM | ForEach {
   “Memory Installed: ”   $_.DeviceLocator
   “Memory Size: ”   ($_.Capacity / 1GB)   ” GB”       
   $SlotsFilled = $SlotsFilled   1
   $TotMemPopulated = $TotMemPopulated   ($_.Capacity / 1GB)
#      if ($_.Capacity = 0)
#      {write-host "found free slot"}

}

write-host ""
write-host "=== Summary Memory Slot Info for computer:" $strComputer "==="
write-host ""
If (($NumSlots - $SlotsFilled) -eq 0) {
    write-host "ALL Slots Filled, NO EMPTY SLOTS AVAILABLE!"
}
write-host ($NumSlots - $SlotsFilled) " of " $NumSlots " slots Open/Available (Unpopulated)"
write-host ($SlotsFilled) " of " $NumSlots " slots Used/Filled (Populated)."  
write-host ""
write-host "Total Memory Populated = " $TotMemPopulated "GB"

#
  

Ответ №1:

foreach Цикл был бы идиоматическим решением.

Создайте текстовый файл, содержащий имена компьютеров или IP-адреса, подобные этому:

 computer1
computer2
...
computern
  

То есть каждое системное имя или адрес в своей собственной строке без чего-либо дополнительного. Достаточно просто, не так ли? Сохраните его, скажем, как c:tempcomputersToCheck.txt . После того, как у вас будет список имен, измените код для поддержки вышеупомянутого foreach цикла.

 # Read all the computers from the file
$computers = get-content c:tempcomputersToCheck.txt

# Perform an operation for each row in the file
foreach ($strComputer in $computers) {
    $colSlots = Get-WmiObject -Class "win32_PhysicalMemoryArray" -namespace "rootCIMV2" -computerName $strComputer
    # Rest of the code goes here
...
write-host "Total Memory Populated = " $TotMemPopulated "GB"
}