Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Eleкtro

#7221
Scripting / Re: porcentaje de uso de cpu
5 Marzo 2014, 12:11 PM
Para ser sincero no suelo ayudar nada en este tipo de tareas complejas en Batch, ya que como podrás comprobar a continuación, Batch es tán simple y escaso de utilidades que eso lo convierte en su peor enemigo, ya que por su limitada escasez de elementos de programación actual (un maldito Array, por ejemplo), requiere un sacrificio enorme y demasiado esfuerzo para malgastar invertir un tiempo de escritura elevado para llevar a cabo ciertas tareas que en cualquier otro lenguaje (decente) se podría realizar en menos de 10 lineas o en un equivalente de 5 minutos, y por supuesto con un código mucho más óptimo y una gran diferencia de rendimiento comparado con lo que se puede llegar a conseguir en Batch (o VBS).

Es un engorro y también lo considero una pérdida de tiempo hacer este tipo de cosas en Batch/VBS, y por ese motivo no creo que lo vuelva a hacer de aquí a mucho tiempo, me limitaré a recomendar el uso de lenguajes de verdad.




El siguiente Script escribe la salida de la query del comando WMIC, en formato CSV (delimitado por comas), en un archivo de texto,
Y después envio el archivo de texto como parámetro de un archivo VBS préviamente escrito con las instrucciones necesarías para partir el contenido del archivo de texto en un Array e iterar los elementos para hacer un BubbleSort y así ordenar los elementos de forma numérica de mayor a menor porcentaje, y no ordenar como texto,
por último, enviio la salida a la consola, un output que puedes customizar de la manera que quieras modificando el Script VBS y puedes capturar dicha salida con el comando FOR /F en Batch si fuese necesario, yo dejé la salida así:



El Script:
Código (dos) [Seleccionar]
@echo off & setlocal enabledelayedexpansion

:: By Elektro

REM Obtengo los processos
(For /F "Tokens=*" %%a in (
'wmic.exe path win32_PerfFormattedData_PerfProc_Process get PercentProcessorTime^,Name /Format:csv ^| FINDSTR "[0-9]"'
) Do (
REM Elimino caracteres unicode.
set "line=%%a"
set "line=!line:~0,-1!"
Echo !line!
))>"%TEMP%\WMIC.tmp"

(
Echo Set objFSO = CreateObject^("Scripting.FileSystemObject"^)
Echo Set objFile = objFSO.OpenTextFile^(Wscript.Arguments^(0^), 1^)
Echo arr = Split^(objFile.ReadAll, VBcrlf^)
Echo n = UBound^(arr^)
Echo Do
Echo   nn = -1
Echo   For j = LBound^(arr^) to n - 1
Echo    num1 = cint^(split^(arr^(j^),","^)^(2^)^)
Echo    if not arr^(j+1^) = "" Then
Echo     num2 = cint^(split^(arr^(j+1^),","^)^(2^)^)
Echo    end if
Echo       If num1 ^< num2 Then
Echo          TempValue = arr^(j + 1^)
Echo          arr^(j + 1^) = arr^(j^)
Echo          arr^(j^) = TempValue
Echo          nn = j
Echo       End If
Echo   Next
Echo   n = nn
Echo Loop Until nn = -1
Echo For i = LBound^(arr^) To UBound^(arr^)
Echo   if not arr^(i^) = "" Then
Echo     WScript.Echo _
Echo     "Process: " ^& split^(arr^(i^),","^)^(1^) ^& ".exe" ^& vbnewline ^& _
Echo     "CPU....: " ^& split^(arr^(i^),","^)^(2^) ^& "%%"    ^& vbnewline
Echo      End If
Echo Next
)>"%TEMP%\SortWMIC.vbs"

CScript.exe /Nologo "%TEMP%\SortWMIC.vbs" "%TEMP%\WMIC.tmp"

Pause&Exit


Y el script de VisualBasicScript sin escapar los caracteres:

Código (vb) [Seleccionar]
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(Wscript.Arguments(0), 1)

arr = Split(objFile.ReadAll, VBcrlf)

n = UBound(arr)

Do
 nn = -1
 For j = LBound(arr) to n - 1
 
   num1 = cint(split(arr(j),",")(2))

   if not arr(j+1) = "" Then
    num2 = cint(split(arr(j+1),",")(2))
   end if

     If num1 < num2 Then
        TempValue = arr(j + 1)
        arr(j + 1) = arr(j)
        arr(j) = TempValue
        nn = j
     End If

 Next

 n = nn

Loop Until nn = -1

For i = LBound(arr) To UBound(arr)

    if not arr(i) = "" Then
    WScript.Echo _
    "Process: " & split(arr(i),",")(1) & ".exe" & vbnewline & _
    " CPU...: " & split(arr(i),",")(2) & "%"    & vbnewline
    End If

Next    


Saludos!
#7222
Puedes redirigir la salida del comando Echo, al Input de otro comando, pero esto no siempre funcionará en todos los casos.

Código (dos) [Seleccionar]
Echo CONTRASEÑA|Net.exe user "usuario" *

Código (dos) [Seleccionar]
Echo S|Choice.exe

Saludos
#7223
Te faltó usar el caracter de continuación de linea al principio:

Código (vb,1) [Seleccionar]
payload = unescape( _
                  "%fc%e8%89%00%00%00%60%89%e5%31%d2%64%8b%52" & _
                  "%30%8b%52%0c%8b%52%14%8b%72%28%0f%b7%4a%26" & _
                  "%31%ff%31%c0%ac%3c%61%7c%02%2c%20%c1%cf%0d" & _
                  "%01%c7%e2%f0%52%57%8b%52%10%8b%42%3c%01%d0" & _
                  "%8b%40%78%85%c0%74%4a%01%d0%50%8b%48%18%8b" & _
                  "%58%20%01%d3%e3%3c%49%8b%34%8b%01%d6%31%ff" & _
                  "%31%c0%ac%c1%cf%0d%01%c7%38%e0%75%f4%03%7d" & _
                  "%f8%3b%7d%24%75%e2%58%8b%58%24%01%d3%66%8b" & _
                  "%0c%4b%8b%58%1c%01%d3%8b%04%8b%01%d0%89%44" & _
                  "%24%24%5b%5b%61%59%5a%51%ff%e0%58%5f%5a%8b" & _
                  "%12%eb%86%5d%6a%01%8d%85%b9%00%00%00%50%68" & _
                  "%31%8b%6f%87%ff%d5%bb%f0%b5%a2%56%68%a6%95" & _
                  "%bd%9d%ff%d5%3c%06%7c%0a%80%fb%e0%75%05%bb" & _
                  "%47%13%72%6f%6a%00%53%ff%d5%63%61%6c%63%2e" & _
                  "%65%78%65%00" _
                 )


· Statement Breaks in VBScript

Saludos!
#7224
Este snippet sirve para rotar la posición de las palabras que contiene un String.

Código (vbnet) [Seleccionar]
    ' Rotate String
    ' ( By Elektro )
    '
    ' Usage Examples:
    ' MsgBox(RotateString("a b c d e f", RotationDirectorion.Left, 2)) ' Result "c d e f a b"
    ' MsgBox(RotateString("Hello_World_!", RotationDirectorion.Right, 1, "_"c)) ' Result: "!_Hello_World"

    ''' <summary>
    ''' Indicates the rotation direction of an String.
    ''' </summary>
    Public Enum RotationDirectorion

        ''' <summary>
        ''' Rotates to the left.
        ''' </summary>
        Left

        ''' <summary>
        ''' Rotates to the right.
        ''' </summary>
        Right

    End Enum

    ''' <summary>
    ''' Rotates the words in a String.
    ''' </summary>
    ''' <param name="String">Indicates the string to rotate.</param>
    ''' <param name="Direction">Indicates the rotation direction.</param>
    ''' <param name="Rotation">Indicates the rotation count.</param>
    ''' <param name="Delimiter">
    ''' Indicates the delimiter that is used to split the words of the string.
    ''' Default is 'Space' character.
    ''' </param>
    ''' <returns>System.String.</returns>
    ''' <exception cref="Exception">Rotation count is out of range.</exception>
    Private Function RotateString(ByVal [String] As String,
                                  ByVal Direction As RotationDirectorion,
                                  ByVal Rotation As Integer,
                                  Optional ByVal Delimiter As Char = " "c
                                  ) As String

        Dim Parts As String() = [String].Split(Delimiter)

        If String.IsNullOrEmpty([String]) OrElse Not [String].Contains(CStr(Delimiter)) Then
            Throw New Exception(String.Format("Delimiter '{0}' not found in the String.", CStr(Delimiter)))
        End If

        If Rotation = 0 OrElse Rotation >= Parts.Length Then
            Throw New Exception("Rotation count is out of range.")
        End If

        Select Case Direction

            Case RotationDirectorion.Left
                Return String.Format("{0}{1}",
                                     String.Join(Delimiter,
                                                 From s As String In Parts Skip Rotation) & CStr(Delimiter),
                                     String.Join(Delimiter,
                                                 From s As String In Parts Take Rotation))

            Case RotationDirectorion.Right
                Return String.Format("{0}{1}",
                                     String.Join(Delimiter,
                                                 From s As String In Parts Skip (Parts.Length - Rotation)) & CStr(Delimiter),
                                     String.Join(Delimiter,
                                                 From s As String In Parts Take (Parts.Length - Rotation)))

            Case Else
                Return String.Empty

        End Select ' Direction

    End Function


#7225


Yo solo pasaba por aquí para comentar...

¡ GRAN TRABAJO @Unlock !

#7226
Software / Re: Windows 7 desatendido con?
4 Marzo 2014, 15:32 PM
Sé que el siguiente comentario no va a satisfacer tu urgencia, pero es que lo mejor y más fiable es hacérselo uno mismo, lo cual no es nada dificil.

Si te lo llegas a plantear entonces te recomiendo usar la aplicación WinToolkit, es una excelente herramienta para crear una ISO de Windows desatendida, y además, la aplicación provee esta serie de 'Software Addons' descargables, que son aplicaciones desatendidas que puedes añadir a tu ISO, aunque no están disponibles las que tu requieres ...pero por otro lado un InstallBuilder desatendido para las aplicaciones que nombraste es algo faicl de realizar, por ejemplo con InnoSetup y un poco de ingenieria inversa (muy básica).

PD: Yo hice mi propio instalador desatendido de NOD32 y de Skype, te los puedo pasar por privado si quieres.

Saludos.
#7227
Ese tipo de páginas se denominan Surveys, y son servicios engañosos (Osea, ESTAFAS), como muchas otras estafas legales que hay en internet (y así va el mundo).

Yo una vez estuve muy interesado en descargar un archivo, pero solo lo pude encontrar en una survey,
en fín, tal era mi desesperación que rellené la survey (es decir, introduje el nº de movil) para probar suerte y así poder descargar el archivo que me interesaba, aunque yo ya sabía lo que me podia esperar, pero aún así, quise probar suerte.

El problema que me surgió es que, después de rellenar la Survey, no me reirigía a ningún enlace de descarga, así que tuve que contactar con el servicio de la Survey mediante el email de asistenci al usuario para reclamarles el enlace de descarga (y de paso advertirles de una posible denuncia si no me lo daban),
y al final, ellos mismos me pasaron un enlace de descarga (y dejándo notar como estaban bastante acojonados por mi posible denuncia, cosa que no me extraña, ya que su servicio es muy falso), y por fín pude descargar lo que se suponia que era un archivo executable ...pero este no funcionaba, así que lo examiné por encima y descubrí que el archivo .exe no era más que un archivo de texto plano (.txt) que contenia una palabra escrita repetida en el interior para así agrandar el tamaño del archivo unos cuantos MegaBytes, y después le cambiaron la extensión "txt" a "exe" para intentar camuflar la estafa un poco mejor.

Asi que, en resumen, fue una pérdida de tiempo.

No te puedes fiar ni de los Trolls las personas que hostean un archivo en ese tipo de servicios, ya que como para descargar hay que pagar, nunca sabes si el archivo va a ser reálmente lo que dice ser, ni tampoco puedes confiar en el propio servicio en si mismo, que sabe muy bien que el 99% de los usuarios usan su servicio para estafar a los demás.

...Y ese tipo de cosas es lo único que te vas a encontrar si te atreves a rellenar una Survey.

Saludos!
#7228
Puedes hacerlo de la siguiente manera:

Cita de: http://foro.elhacker.net/scripting/script_batch_que_no_se_cierra_estilo_saw-t409335.0.html;msg1922316#msg1922316@Echo OFF & TITLE Unclosable-Script

:: By Elektro


REM La ubicación del script temporal que servirá como monitorizador de este script.
Set "MonitorFilepath=%TEMP%\CMDMonitor.cmd"

REM Si no existe el script monitor, lo creo y lo ejecuto...
If Not exist "%MonitorFilepath%" (
Call :StartMonitorScript "%~0"
)


REM Ya estamos listos para jugar.
Echo Intenta cerrarme! :D   | MORE
Echo Intento de cierres: %1 | MORE
Pause&Exit



REM Métodos
:StartMonitorScript
(
Echo @Echo OFF ^& Title CMD Monitor
Echo REM El resultado del monitor. ^(0=False, 1=True^)
Echo Set /A "ProcessIsTerminated=0"
Echo Set /A "ClosingCount=0"
Echo+
Echo :MonitorLoop
Echo CMDOW.exe ^| Find /I "Unclosable-Script" ^&^& ^(
Echo Set /A "ProcessIsTerminated=0"
Echo ^) ^|^| ^(
Echo Set /A "ProcessIsTerminated=1"
Echo   Set /A "ClosingCount+=1"
Echo ^)
Echo+
Echo If %%ProcessIsTerminated%% EQU 1 ^(
Echo Start "Reinitialize Unclosable-Script" CMD.exe /K %* %%ClosingCount%%
Echo ^)
Echo+
Echo Ping.exe -n 2 LocalHost 1^>NUL
Echo Goto :MonitorLoop
)>"%MonitorFilepath%"

(
Echo WScript.CreateObject^("WScript.Shell"^).Run """%MonitorFilepath%""", 0, False
)>"%MonitorFilepath%.vbs"

Start /B "Run Hidden" WScript.exe "%MonitorFilepath%.vbs"

Goto:EOF

Saludos
#7229
Scripting / Re: porcentaje de uso de cpu
4 Marzo 2014, 10:22 AM
Claro, en el output estás trabajando 5 lineas en total así que se procesa linea por linea para setear la variable, debes modificar la expresión del FOR para obtener la única linea que te interesa, prueba a reemplazar la expresión, por esta otra:

Código (dos) [Seleccionar]
'pslist.exe -s 2 idle ^| Findstr.exe "[0-9]:"'

De todas formas no necesitas utilizar herramientas de terceros, puedes hacerlo con el comando externo WMIC de Windows:
Código (dos) [Seleccionar]

@Echo OFF

Set    "ProcessName=Firefox"
Set /A "PercentCPU=0"

FOR /F "Tokens=2 Delims==" %%# IN (
'WMIC.exe Path Win32_PerfFormattedData_PerfProc_Process Where Name^="%ProcessName%" Get PercentProcessorTime /Format:List ^| FINDSTR.exe "[0-9]"'
) DO (
Set /A "PercentCPU=%%#"
)

Echo Process   : %ProcessName%
Echo CPU Usage : %PercentCPU%%%

Pause&Exit


Saludos.
#7230
Te vas a reir, pero a mi me funciona perféctamente tu programa, el archivo de lectura ...se lee xD, no ha sido necesario efectuarle ninguna modificación para que me funcione.

¿Has probado tu app en una VM?, debería funcionar.

De todas formas tenías el archivo 'Diccionario1.txt' desperdigado en varias carpetas, lo único que he echo ha sido dejarlo únicamente como recurso y modificar las órdenes para leer el recurso en los 2 métodos que intentaban leer un archivo local, en fín lo tienes en la carpeta .\WindowsApplication7\Resources


Es probable que lo que a ti te sucede sea un problema de VisualStudio (algo que no se ha actualizado corréctamente en el proyecto) o de la configuración de la App, si con la simple modificación que hice sigue sin funcionarte entonces prueba a hacer lo siguiente:

1. Eliminar el archivo oculto de opciones ("WindowsApplication7.suo") que está en la carpeta raiz de la solución.  (verás otro archivo SUO, ese lo ha generado mi VS 2012)
2. Limpiar la solución y reconstruirla (En las opciones de VS, el botón 'Clean solution', y 'Rebuild')
3. Eliminar el directorio que comentaste, me da muy mala espina porque estoy casi convencido de que tiene algo que ver con todo esto y quizás es lo que te está causando el problema:
C:\Documents and Settings\PRIMERO\Configuración local\Apps\2.0\X16CBQ9K.6OB\GRDP0DY2.Z7J
(no se que habrá dentro del directorio, quizás prefieras hacer un backup antes de elimiar).


PD: Hay muchas cosas que podrías mejorar en el código (demasiadas), y también me fijé que tenías un bug (al cerrar el Form1.vb la aplicación seguía activa sin cerrarse y había que matarla o detener el debugger), lo he corregido.

Saludos