#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"
}