Quantcast
Channel: foreach | Operating systems, scripting, PowerShell and security | jesusninoc.com
Viewing all 409 articles
Browse latest View live

Detectar si una palabra está contenida en una línea de un fichero

$
0
0

[System.Collections.ArrayList] $arraylist = New-Object System.Collections.ArrayList

#Añadir todas las palabras del fichero al ArrayList (el fichero contiene una frase por línea)
#Ejemplo de fichero
#hola
#adios
#hola amigo mio
#pepito
#grillo
#amigo

ForEach ($elemento in (gc .\palabras.txt)){
    #Agrega un objeto al final de ArrayList
    [void]$arraylist.Add($elemento)
}

#Agrupar las palabras para saber cuántas hay en el fichero
#$arraylist | Group-Object | select Name,Count

#Detectar coincidencias de palabras dentro de una frase
$coincidencia = 0
ForEach ($elemento in $arraylist)
{
    ForEach ($elemento2 in $arraylist)
    {
        if ($elemento -match $elemento2)
        {
            $coincidencia += 1
        }
    }
    "La frase: " + $elemento + " tiene " + ($coincidencia - 1) + " coincidencias"
    $coincidencia = 0
}

The post Detectar si una palabra está contenida en una línea de un fichero appeared first on Scripting and security.


Analizar la extensión de un archivo según sus cabeceras con PowerShell

$
0
0

ForEach ($fichero in Get-ChildItem *.*)
{
    #Datos del fichero
    $fichero
    
    #Fichero en formato decimal
    [System.IO.File]::ReadAllBytes($fichero)[0..3] -join ""
    
    #Ficheor en formato hexadecimal
    $magic = [System.IO.File]::ReadAllBytes($fichero)[0..3] | %{
        [System.String]::Format("{0:X}",[System.Convert]::ToUInt32($_))
    }
    $magic -join ""
}

Listado de caberas más utilizadas

Tipo de Archivo Cabecera En ASCII
.ZIP 50 4B 03 04 PK
.RAR 52 61 72 21 Rar!
.TAR 1F 8B 08 00
.TGZ 1F 9D 90 70
.DOC D0 CF 11 E0 ÐÏ.à
.XLS D0 CF 11 E0
.PDF 25 50 44 46 %PDF
.WMV 30 26 B2 75
.FLV 46 4C 56 01 FLV
.BMP 42 4D F8 A9/ 62 25 / 76 03 BM, BMp% , BMv
.GIF 47 49 46 38 39 61 / 37 61 GIF89a GIF87a
.ICO 00 00 01 00
.JPEG FF D8 FF E0 / FE JFIF
.PNG 89 50 4E 47 PNG
.SFW 43 57 53 06 / 08 Cws
.MP3 49 44 33 2E /03 ID3
.EXE 4D 5A 50 00 /90 00 MZP / MZ
.DLL 4D 5A 90 00 MZ
Linux bin 7F 45 4C 46 ELF

The post Analizar la extensión de un archivo según sus cabeceras con PowerShell appeared first on Scripting and security.

Agrupar palabras contenidas en un fichero

$
0
0

[System.Collections.ArrayList] $arraylist = New-Object System.Collections.ArrayList

#Añadir todas las palabras del fichero al ArrayList (el fichero contiene una palabra por línea)
ForEach ($elemento in (gc .\palabras.txt).Split(" ")){
    #Agrega un objeto al final de ArrayList
    [void]$arraylist.Add($elemento)
}

#Agrupar las palabras para saber cuántas hay en el fichero
$arraylist | Group-Object | select Name,Count

The post Agrupar palabras contenidas en un fichero appeared first on Scripting and security.

Obtener empresas del IBEX 35 en formato JSON

$
0
0

[System.Collections.ArrayList] $arraylist = New-Object System.Collections.ArrayList

# Obtener empresas del IBEX 35
$web = Invoke-WebRequest 'http://www.bolsamadrid.es/esp/aspx/Mercados/Precios.aspx?indice=ESI100000000'
$result = $web.AllElements | Where Class -eq “DifFlBj” | %{$_.innerText}
$result += $web.AllElements | Where Class -eq “DifFlSb” | %{$_.innerText}
$result += $web.AllElements | Where Class -eq “DifFlIg” | %{$_.innerText}

# Almacenar en un array cada empresa del IBEX 35
ForEach ($elemento in $result){
    $null = $arraylist.Add(
    [pscustomobject] @{
    Empresa = $elemento
    Cotización = 0
    }
)
}

# Eliminar el primer elemento del array porque contiene una empresa no válida
$arraylist.Removeat(0)
# Número de empresas, tiene que ser 35
$arraylist.Count

# Convertir a JSON
$json = $arraylist | ConvertTo-Json

# Importar el contenido JSON y listar las empresas
($json | ConvertFrom-Json).empresa

The post Obtener empresas del IBEX 35 en formato JSON appeared first on Scripting and security.

Calcular el valor nutricional de una o varias comidas del día con PowerShell

$
0
0

# Suma de todas las Kcal de la comida 
$SumaKcal = 0

# En el fichero alimento se encuentra el nombre del producto y la cantidad consumida
# Macarrones+gallo,200
# aceituna+hojiblanca+de+cultivo,50
# Aceite+de+oliva+virgen+extra+carbonell,10
# Nueces,50
# Pan,200

foreach ($alimentos in gc .\alimentos.txt){

    # Buscar el producto sobre el que calcular el valor nutricional
    $enlaces = Invoke-WebRequest ("https://www.alcampo.es/compra-online/search/?text="+$alimentos.split(",")[0])

    # Seleccionar el primer producto de la lista y calcular con dicho producto el valor nutricional
    $web = Invoke-WebRequest ("https://www.alcampo.es/" + (($enlaces.Links | Where Class -eq "productMainLink").href)[0])

    # Sirve para ver el producto elegido
    Start-Process chrome ("https://www.alcampo.es/" + (($enlaces.Links | Where Class -eq "productMainLink").href)[0])

    # Datos nutricionales del producto
    $productos = @{}

    # Extraer los valores nutricionales del producto
    ($web.AllElements | Where Class -eq “productNutritionalInformation valoresNutricionalesTabla”).innerHtml | %{
        ($_ -replace "</SPAN> <SPAN ","</SPAN>|<SPAN " -replace "<.*?>" -replace " g" -replace " Kj" -replace " Kcal" -split "`n" | ? {$_.trim() -ne ""} | ? {$_.trim() -notmatch "nutricionales"}).trim()
    } | %{$productos.add($_.split("|")[0],$_.split("|")[1])}

    $pesos = ($web.AllElements | Where Class -eq “productNutritionalInformation valoresNutricionalesTabla tablaInformacionAdicional”).innerText | %{
        ($_  -replace "<.*?>" -split "`n" | ? {$_.trim() -ne ""}).trim() -replace "g"
    }

    # Añadir los valores nutricionales del producto a la estructura
    0..$pesos.Count | % {if($_%2-eq 0 -and $_ -lt 19){$productos.add($pesos[$_],$pesos[$_+1])}}

    # Calcular el valor nutricional en función de la cantidad del alimento consumida
    $comidacantidad = $alimentos.split(",")[1]

    $productos.'Peso neto escurrido'
    $productos.add('Valor energético(Kcal) Neto',($productos.'Valor energético(Kcal)' / $productos.'Peso Neto')*$comidacantidad)
    $productos.add('Hidatos de carbono Neto',($productos.'Hidratos de carbono' / $productos.'Peso Neto')*$comidacantidad)
    $productos.add('Grasas Netas',($productos.Grasas / $productos.'Peso Neto')*$comidacantidad)
    $productos.add('Grasas saturadas Netas',($productos.'Grasas saturadas' / $productos.'Peso Neto')*$comidacantidad)
    $productos.add('Azúcares Netos',($productos.Azúcares / $productos.'Peso Neto')*$comidacantidad)
    $productos.add('Proteínas Netas',($productos.Proteínas / $productos.'Peso Neto')*$comidacantidad)

    $alimentos
    [Int]$productos.'Valor energético(Kcal) Neto'
    $SumaKcal += [Int]$productos.'Valor energético(Kcal) Neto'

    # Mostrar la estructura con los valores nutricionales
    # $productos.GetEnumerator() | sort -Property name
}

# Total de Kcal consumidas
$SumaKcal

The post Calcular el valor nutricional de una o varias comidas del día con PowerShell appeared first on Scripting and security.

Ejecutar el cmdlet de PowerShell que recupera el contenido de la caché de cliente DNS desde C#

$
0
0

using System;
using System.Management.Automation;  // Windows PowerShell namespace.

namespace HostPS1
{
    class HostPS1
    {
        static void Main(string[] args)
        {

            // Call the PowerShell.Create() method to create an 
            // empty pipeline.
            PowerShell ps = PowerShell.Create();

            // Call the PowerShell.AddCommand(string) method.
            ps.AddCommand("Get-DnsClientCache");

            Console.WriteLine("Entry                 Data");
            Console.WriteLine("----------------------------");


            // Call the PowerShell.Invoke() method to run the 
            // commands of the pipeline in the default runspace.
            foreach (PSObject result in ps.Invoke())
            {
                Console.WriteLine("{0,-24}{1}",
                        result.Members["Entry"].Value,
                        result.Members["Data"].Value);
            } // End foreach.
        } // End Main.
    } // End HostPs1.
}

The post Ejecutar el cmdlet de PowerShell que recupera el contenido de la caché de cliente DNS desde C# appeared first on Scripting and security.

Ejecutar el cmdlet de PowerShell para obtener información de la memoria RAM desde C#

$
0
0

using System;
using System.Management.Automation;  // Windows PowerShell namespace.

namespace HostPS1
{
    class HostPS1
    {
        static void Main(string[] args)
        {

            // Call the PowerShell.Create() method to create an 
            // empty pipeline.
            PowerShell ps = PowerShell.Create();

            ps.AddCommand("Get-WmiObject");
            ps.AddArgument("win32_physicalmemory");
            ps.AddCommand("sort-object");
            ps.AddArgument("Manufacturer");

            // Call the PowerShell.Invoke() method to run the 
            // commands of the pipeline in the default runspace.
            foreach (PSObject result in ps.Invoke())
            {
                Console.WriteLine(result.Members["Manufacturer"].Value);
            } // End foreach.
        } // End Main.
    } // End HostPs1.
}

The post Ejecutar el cmdlet de PowerShell para obtener información de la memoria RAM desde C# appeared first on Scripting and security.

Ejecutar un código de C# desde PowerShell que ejecuta un cmdlet de PowerShell

$
0
0

$CodigoC = @”

using System;
using System.Management.Automation;  // Windows PowerShell namespace.

namespace HostPS1
{
    public class HostPS1
    {
        public static void Main()
        {

            // Call the PowerShell.Create() method to create an 
            // empty pipeline.
            PowerShell ps = PowerShell.Create();

            ps.AddCommand("Get-WmiObject");
            ps.AddArgument("win32_physicalmemory");
            ps.AddCommand("sort-object");
            ps.AddArgument("Manufacturer");

            // Call the PowerShell.Invoke() method to run the 
            // commands of the pipeline in the default runspace.
            foreach (PSObject result in ps.Invoke())
            {
                Console.WriteLine(result.Members["Manufacturer"].Value);
            } // End foreach.
        } // End Main.
    } // End HostPs1.
}

“@

Add-Type -TypeDefinition $CodigoC -ErrorAction SilentlyContinue

[HostPS1.HostPS1]::Main()

The post Ejecutar un código de C# desde PowerShell que ejecuta un cmdlet de PowerShell appeared first on Scripting and security.


Mostrar un mensaje si se ha ejecutado correctamente un script de PowerShell desde C#

$
0
0

using System;
using System.Collections.ObjectModel;
using System.Management.Automation;  // Windows PowerShell namespace.

namespace PowerSh
{
    class PowerSh
    {
        static void Main(string[] args)
        {
                using (PowerShell PowerShellInstance = PowerShell.Create())
                {
                    // use "AddScript" to add the contents of a script file to the end of the execution pipeline.
                    // use "AddCommand" to add individual commands/cmdlets to the end of the execution pipeline.
                    PowerShellInstance.AddScript("Get-Process | out-file out.txt");

                    Collection<PSObject> PSOutput = PowerShellInstance.Invoke();
                    foreach (PSObject outputItem in PSOutput)
                    {
                        // if null object was dumped to the pipeline during the script then a null
                        // object may be present here. check for null to prevent potential NRE.
                        if (outputItem != null)
                        {
                            Console.WriteLine(outputItem.BaseObject.ToString() + "\n");
                        }
                    }
                if (PowerShellInstance.Streams.Error.Count > 0)
                {
                    Console.Write("Error");
                }
                else
                {
                    Console.Write("Correcto");
                }
                    Console.ReadKey();
                }

        } // End Main.
    } // End PowerSh.
}

The post Mostrar un mensaje si se ha ejecutado correctamente un script de PowerShell desde C# appeared first on Scripting and security.

Recorrer el segundo nivel de un sitio web y obtener información de todos los enlaces

$
0
0

$url="http://www.jesusninoc.com"
foreach($links in (Invoke-WebRequest $url).Links.href){foreach($links2 in (Invoke-WebRequest $links).Links.href){$links2,(Invoke-WebRequest $links2).RawContentLength,2}}

Ejemplo (el segundo nivel NO corresponde con el segundo nivel de directorios, corresponde con los enlaces que aparecen al recorrer los enlaces del primer nivel)

The post Recorrer el segundo nivel de un sitio web y obtener información de todos los enlaces appeared first on Scripting and security.

Ofuscación en PowerShell

$
0
0

####################################################################
#Convertir una cadena de caracteres a binario (Char - Int - Binario)
$resultado = ""
$codificar = 'GC'
foreach($letra in [Char[]]$codificar)
{
$decimal = [Int][Char]$letra
$resultado += [Convert]::ToString($decimal, 2)
}
$resultado
####################################################################

####################################################################
#Convertir una cadena de caracteres a binario (char - int - binario)
([Char[]]"GC" | %{[Convert]::ToString([Int][Char]$_, 2)}) -join ""
####################################################################

####################################################################
#Convertir números en binario en caracteres (agrupando de 7 en 7 bits)
(10001111000011 -split "(?<=\G\d{7})(?=.)" | %{[Char][Convert]::ToInt32($_,2)}) -join ""
####################################################################

####################################################################
#Invertir un script
$valor = '(10001111000011 -split "(?<=\G\d{7})(?=.)" | %{[Char][Convert]::ToInt32($_,2)}) -join ""'
$invertido = $valor[$valor.Length..0]-join ""
$invertido
####################################################################

####################################################################
#Obtener el alias del cmdlet Get-Content mediante Get-Command
(gcm g?)[0].Name
####################################################################

####################################################################
#Obtener el alias del cmdlet Get-Content mediante Get-Command y abrir un fichero
(gcm g?)[0].Name + ' fichero.txt' | Invoke-Expression
####################################################################

 

The post Ofuscación en PowerShell appeared first on Scripting and security.

Recorrer el primer nivel de un sitio web y obtener información de todos los enlaces del sitio

Recorrer el segundo nivel de un sitio web y obtener todos los enlaces del sitio

Automatizar el recorrido de niveles de un sitio web, obteniendo información de todos los enlaces del sitio y añadir la información creando una clase a un array

$
0
0

#Clase Enlace con información sobre el enlace: URL, tamaño y nivel de recorrido
class Enlace
{ 
    $URL
    $Long
    $Level

    Enlace($URL,$Long,$Level)
    {
        $this.URL=$URL
        $this.Long=$Long
        $this.Level=$Level
    }
}

#Iniciar array
$myArray = @()
$myArray += [Enlace]::new("https://www.jesusninoc.com/",1,1)

#Eliminar el fichero que contiene la expresión que se va a ejecutar
rm .\fichero.txt
"" | Out-File -FilePath fichero.txt -NoNewline

#Crear una función que permite automatizar el recorrido de una web por niveles
$url="https://www.jesusninoc.com/"
function insertar($numeroveces)
{
for($i;$i -lt $numeroveces;$i++){'foreach($links'+($i+1)+' in (Invoke-WebRequest $links'+$i+').Links.href){' | Add-Content -Path fichero.txt -NoNewline}
'if(!$myArray.URL.Contains($links'+$numeroveces+')){$myArray += [Enlace]::new($links'+$numeroveces | Add-Content -Path fichero.txt -NoNewline
',(Invoke-WebRequest $links'+$numeroveces+').RawContentLength,' | Add-Content -Path fichero.txt -NoNewline
$numeroveces | Add-Content -Path fichero.txt -NoNewline
')' | Add-Content -Path fichero.txt -NoNewline
';start-sleep -s 2' | Add-Content -Path fichero.txt -NoNewline
';$links'+$numeroveces | Add-Content -Path fichero.txt -NoNewline
'}' | Add-Content -Path fichero.txt -NoNewline
for($j;$j -lt $numeroveces;$j++){"}" | Add-Content -Path fichero.txt -NoNewline}
}

#Ejecutar la función y leer la información que ha generado la función
insertar(1)
gc .\fichero.txt

#Ejecutar la expresión generada al ejecutar la función que permite automatizar el recorrido de una web por niveles
foreach($links in (Invoke-WebRequest $url).Links.href){Invoke-Expression(gc .\fichero.txt)}

#Ordenar el array por tamaño
$myArray | sort Long

Resultado de la ejecución del script

Ver el contenido del array con la clase Enlace

The post Automatizar el recorrido de niveles de un sitio web, obteniendo información de todos los enlaces del sitio y añadir la información creando una clase a un array appeared first on Scripting and security.

Realizar una comunicación enviando preguntas y respondiendo de forma automática mediante el motor de síntesis de voz en PowerShell

$
0
0

Introducción

####################################################################################################
####################################################################################################
#Teniendo en cuenta la idea de comunicar dos ordenadores mediante la voz del sistema operativo
#https://www.jesusninoc.com/2016/01/10/comunicar-dos-ordenadores-mediante-la-voz-del-sistema-operativo/
#Realizar una comunicación enviando preguntas y respondiendo de forma automática
####################################################################################################
####################################################################################################

Reconocimiento y respuesta (ejecutar primero)

####################################################################################################
#RECONOCIMIENTO Y RESPUESTA
####################################################################################################
#Crear objeto para reconocimiento
Add-Type -AssemblyName System.Speech
$rec = New-Object 'System.Speech.Recognition.SpeechRecognitionEngine'
$rec.LoadGrammar((New-Object 'System.Speech.Recognition.DictationGrammar'))
$rec.SetInputToDefaultAudioDevice()

#Añadir posibles respuestas
"tal|Bien y tú?" | Out-File frases.txt
"años|40" | Out-File frases.txt -Append
"novia|Sí" | Out-File frases.txt -Append
"novio|Sí" | Out-File frases.txt -Append

#Crear un ArrayList con las respuestas
[System.Collections.ArrayList]$arraylist = New-Object System.Collections.ArrayList
ForEach ($elemento in (gc .\frases.txt).split("|")){[void]$arraylist.Add($elemento)}

#Función para comprobar si el mensaje que llega está entre las posibles respuestas
#La función responde mediante la voz del Sistema Operativo
function comprobar($frase){
    [System.Collections.ArrayList]$arraylist2 = New-Object System.Collections.ArrayList
    ForEach ($elemento in $frase.split(" ")){[void]$arraylist2.Add($elemento)}

    $arraylist2 | %{
        if($arraylist.IndexOf($_) -ne -1){
            (New-Object -TypeName System.Speech.Synthesis.SpeechSynthesizer).Speak($arraylist[($arraylist.IndexOf($_))+1])
        }
    }
}

#Comenzar a reconocer los audios que vayan llegando y comprobar qué mensajes llegan
do{
$mensaje=$rec.Recognize().Text
$mensaje
comprobar $mensaje
}while(1)

Enviar preguntas

####################################################################################################
#ENVIAR PREGUNTAS
####################################################################################################
#Leer el texto contenido dentro de un fichero mediante la voz del Sistema Operativo
Add-Type -AssemblyName System.Speech

#Añadir textos para que se lean
"¿Qué tal?" | Out-File conversacion.txt
"¿Cuántos años tienes?" | Out-File conversacion.txt -Append
"¿Tienes novia?" | Out-File conversacion.txt -Append

#Leer los textos mediante la voz del Sistema Operativo
gc conversacion.txt | %{
$_
(New-Object -TypeName System.Speech.Synthesis.SpeechSynthesizer).Speak($_)
Start-Sleep -Seconds 3
}

The post Realizar una comunicación enviando preguntas y respondiendo de forma automática mediante el motor de síntesis de voz en PowerShell appeared first on Scripting and security.


El bucle ForEach en PowerShell

El bucle ForEach en PowerShell con exit, break, continue y return

$
0
0

El ForEach se ejecuta normal

# El ForEach se ejecuta normal
1..5 | %{
    $_
}

exit

# Se detiene TODO y sale del ámbito
# Muestra 1 y sale de TODO
1..5 | %{
    if($_ -eq 2){exit;$_;}
    else{$_}
}

break

# Sale del bucle
# Muestra 1 y sale del bucle
1..5 | %{
    if($_ -eq 2){break;$_}
    else{$_}
}

continue

# Sale del bucle
# Muestra 1 y sale del bucle
1..5 | %{
    if($_ -eq 2){continue;$_}
    else{$_}
}

return

# Devuelve el control al bucle para pueda continuar
# Muestra 1 3 4 y 5
1..5 | %{
    if($_ -eq 2){return;$_}
    else{$_}
}

The post El bucle ForEach en PowerShell con exit, break, continue y return appeared first on Scripting and security.

Convertir una web con una tabla de calorías de todos los alimentos en una tabla interactiva en PowerShell

$
0
0

$url = "http://recetasdecocina.elmundo.es/tabla-calorias"
$result = Invoke-WebRequest $url
$objetoresult = $result.AllElements | Where tagName -eq “TR” | %{$_.outerHTML -replace "<TD width=193>","|"}
$objetoresultgrid = ($objetoresult -replace "<.*?>" -replace "`n","").trim() | %{($_)}
$objetoresultgrid | %{($_.split("|").trim())[0]}

$mostrar = foreach ($item in $objetoresultgrid)
{
    if($item -notmatch "CALORÍAS")
    {
        $item | select @{l='Producto';e={$_.split("|").trim()[0]}},@{l='Calorías';e={[Int]$_.split("|").trim()[1]}}
    }
}

$mostrar | Out-GridView

The post Convertir una web con una tabla de calorías de todos los alimentos en una tabla interactiva en PowerShell appeared first on Scripting and security.

Calcular el valor nutricional (azúcares) de todos los fabricantes de productos encontrados en la tienda online de un supermercado en PowerShell

$
0
0

$productosconurl = @{}

$web = Invoke-WebRequest "https://www.alcampo.es/compra-online/bebidas/zumos-de-frutas/naranja/c/W110201?q=%3Arelevance&show=All"

foreach($link in ($web.links.href | Group-Object).name){
    if ($link -match "compra-online/bebidas/zumos-de-frutas/naranja" -and $link -notmatch "/c/")
    {
        $urlsanalizar = "https://www.alcampo.es$link"
        $urlsanalizar
        
        $web = Invoke-WebRequest $urlsanalizar
 
        # Datos nutricionales del producto
        $productos = @{}
 
        # Extraer los valores nutricionales del producto
        ($web.AllElements | Where Class -eq “productNutritionalInformation valoresNutricionalesTabla”).innerHtml | %{
            ($_ -replace "</SPAN> <SPAN ","</SPAN>|<SPAN " -replace "<.*?>" -replace " g" -replace " Kj" -replace " Kcal" -split "`n" | ? {$_.trim() -ne ""} | ? {$_.trim() -notmatch "nutricionales"}).trim()
        } | %{$productos.add($_.split("|")[0],$_.split("|")[1])}
 
        $pesos = ($web.AllElements | Where Class -eq “productNutritionalInformation valoresNutricionalesTabla tablaInformacionAdicional”).innerText | %{
            ($_  -replace "<.*?>" -split "`n" | ? {$_.trim() -ne ""}).trim() -replace "g"
        }

        $nombre = ($web.AllElements | Where Class -eq “productDesc”).innerText | %{
            $_
        }
 
        # Añadir los valores nutricionales del producto a la estructura
        0..$pesos.Count | % {if($_%2-eq 0 -and $_ -lt 19){$productos.add($pesos[$_],$pesos[$_+1])}}
 
        # Calcular el valor nutricional en función de la cantidad del alimento consumido
        $comidacantidad = 100
 
        $productos.'Peso neto escurrido'
        $productos.Add('Valor energético(Kcal) Neto',($productos.'Valor energético(Kcal)' / $productos.'Peso Neto')*$comidacantidad)
        $productos.Add('Hidatos de carbono Neto',($productos.'Hidratos de carbono' / $productos.'Peso Neto')*$comidacantidad)
        $productos.Add('Grasas Netas',($productos.Grasas / $productos.'Peso Neto')*$comidacantidad)
        $productos.Add('Grasas saturadas Netas',($productos.'Grasas saturadas' / $productos.'Peso Neto')*$comidacantidad)
        $productos.Add('Azúcares Netos',($productos.Azúcares / $productos.'Peso Neto')*$comidacantidad)
        $productos.Add('Proteínas Netas',($productos.Proteínas / $productos.'Peso Neto')*$comidacantidad)
 
        # Mostrar la estructura con los valores nutricionales
        $productos.GetEnumerator() | sort -Property name

        $productosconurl.Add($nombre,$productos.Azúcares)
    }
}

$productosconurl.GetEnumerator() | Select-Object Key,@{n='Valor';e={[Double]($_.Value)}} | Out-GridView

The post Calcular el valor nutricional (azúcares) de todos los fabricantes de productos encontrados en la tienda online de un supermercado en PowerShell appeared first on Scripting and security.

Mostrar y comparar la cantidad de azúcar que tienen los productos de consumo encontrados en la tienda online de un supermercado mediante PowerShell

$
0
0

Productos analizados:

  • Bollería y pastelería
  • Leche
  • Galletas
  • Zumo de naranja
  • Zumo de melocotón
  • Zumo de mosto

Importante

  • VALOR NUTRICIONAL MEDIO POR 100 (Columna Valor).
  • ALGUNOS PRODUCTOS PUEDEN TENER CANTIDAD 0 DE AZÚCAR PORQUE EL SUPERMERCADO NO HA INDICADO LA CANTIDAD EN LA INFORMACIÓN ADICIONAL DEL PRODUCTO.

Cantidad de azúcar que tiene la bollería y pastelería

https://www.alcampo.es/compra-online/alimentacion/desayuno-y-merienda/bolleria-y-pasteleria/c/W1011

Cantidad de azúcar que tiene la leche

https://www.alcampo.es/compra-online/alimentacion/huevos-leche-yogures-y-lacteos/leche/c/W1603

Cantidad de azúcar que tienen las galletas

https://www.alcampo.es/compra-online/alimentacion/desayuno-y-merienda/galletas/c/W100805?q=%3Arelevance&show=All

Cantidad de azúcar que tienen los zumos de naranja

https://www.alcampo.es/compra-online/bebidas/zumos-de-frutas/naranja/c/W110201

Cantidad de azúcar que tienen los zumos de melocotón

https://www.alcampo.es/compra-online/bebidas/zumos-de-frutas/melocoton/c/W110202

Cantidad de azúcar que tienen los zumos de mosto

https://www.alcampo.es/compra-online/bebidas/zumos-de-frutas/mosto/c/W110208


El código genérico que se ha utilizado para realizar el cálculo es:

$productosconurl = @{}

$web = Invoke-WebRequest "https://www.alcampo.es/compra-online/bebidas/zumos-de-frutas/naranja/c/W110201?q=%3Arelevance&show=All"

foreach($link in ($web.links.href | Group-Object).name){
    if ($link -match "compra-online/bebidas/zumos-de-frutas/naranja" -and $link -notmatch "/c/")
    {
        $urlsanalizar = "https://www.alcampo.es$link"
        $urlsanalizar
        
        $web = Invoke-WebRequest $urlsanalizar
 
        # Datos nutricionales del producto
        $productos = @{}
 
        # Extraer los valores nutricionales del producto
        ($web.AllElements | Where Class -eq “productNutritionalInformation valoresNutricionalesTabla”).innerHtml | %{
            ($_ -replace "</SPAN> <SPAN ","</SPAN>|<SPAN " -replace "<.*?>" -replace " g" -replace " Kj" -replace " Kcal" -split "`n" | ? {$_.trim() -ne ""} | ? {$_.trim() -notmatch "nutricionales"}).trim()
        } | %{$productos.add($_.split("|")[0],$_.split("|")[1])}
 
        $pesos = ($web.AllElements | Where Class -eq “productNutritionalInformation valoresNutricionalesTabla tablaInformacionAdicional”).innerText | %{
            ($_  -replace "<.*?>" -split "`n" | ? {$_.trim() -ne ""}).trim() -replace "g"
        }

        $nombre = ($web.AllElements | Where Class -eq “productDesc”).innerText | %{
            $_
        }
 
        # Añadir los valores nutricionales del producto a la estructura
        0..$pesos.Count | % {if($_%2-eq 0 -and $_ -lt 19){$productos.add($pesos[$_],$pesos[$_+1])}}
 
        # Calcular el valor nutricional en función de la cantidad del alimento consumido
        $comidacantidad = 100
 
        $productos.'Peso neto escurrido'
        $productos.Add('Valor energético(Kcal) Neto',($productos.'Valor energético(Kcal)' / $productos.'Peso Neto')*$comidacantidad)
        $productos.Add('Hidatos de carbono Neto',($productos.'Hidratos de carbono' / $productos.'Peso Neto')*$comidacantidad)
        $productos.Add('Grasas Netas',($productos.Grasas / $productos.'Peso Neto')*$comidacantidad)
        $productos.Add('Grasas saturadas Netas',($productos.'Grasas saturadas' / $productos.'Peso Neto')*$comidacantidad)
        $productos.Add('Azúcares Netos',($productos.Azúcares / $productos.'Peso Neto')*$comidacantidad)
        $productos.Add('Proteínas Netas',($productos.Proteínas / $productos.'Peso Neto')*$comidacantidad)
 
        # Mostrar la estructura con los valores nutricionales
        $productos.GetEnumerator() | sort -Property name

        $productosconurl.Add($nombre,$productos.Azúcares)
    }
}

$productosconurl.GetEnumerator() | Select-Object Key,@{n='Valor';e={[Double]($_.Value)}} | Out-GridView

The post Mostrar y comparar la cantidad de azúcar que tienen los productos de consumo encontrados en la tienda online de un supermercado mediante PowerShell appeared first on Scripting and security.

Viewing all 409 articles
Browse latest View live