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 - IISiroII

#1
Tengo este código de powershell para generar un excel que crea 1 libro excel con dos hojas a partir de 2 csv (se que es un poco cutroso, pero al menos me funciona en una gran mayoria xD). El tema está en que hay una columna (llamada Name) de la primera hoja que hace un buscarv en los datos de la segunda hoja pero no se como cambiar la formula para que aplique los cambios a cada fila.
El código es el siguiente:


Código (bash) [Seleccionar]
$sesioncsv= 'C:\temp\sesiones.csv'
$sesionxlsx= 'C:\temp\sesiones.xlsx'
$correoscsv= 'C:\temp\correos.csv'
$correosxlsx= 'C:\temp\correos.xlsx'

$processes= Import-Csv -Path $correoscsv
$Excel = new-object -ComObject excel.application
$Excel.Visible = $true
$workBook = $Excel.Workbooks.Add()
$excel.cells.item(1,1) = "SamAccountName"
$excel.cells.item(1,2) = "Name"
$i = 2
foreach($process in $processes) {
$excel.cells.item($i,1) = $process.samaccountname
$excel.cells.item($i,2) = $process.name
$i++
}
$workBook.saveas($correosxlsx)
$Excel.Quit()
Remove-Variable -Name excel
Remove-Variable -Name i
Remove-Item -path $correoscsv

$processes= Import-Csv -Path $sesioncsv
$Excel = new-object -ComObject excel.application
$Excel.Visible = $true
$workBook = $Excel.Workbooks.Open($correosxlsx)
$workSheet = $Excel.WorkSheets.Add()
$worksheet.name = 'sesiones'
$excel.cells.item(1,1) = "ServerName"
$excel.cells.item(1,2) = "SessionId"
$excel.cells.item(1,3) = "UserName"
$excel.cells.item(1,4) = "Name"
$excel.cells.item(1,5) = "DomainName"
$excel.cells.item(1,6) = "ServerIPAddress"
$excel.cells.item(1,7) = "TSProtocol"
$excel.cells.item(1,8) = "ApplicationType"
$excel.cells.item(1,9) = "ResolutionWidth"
$excel.cells.item(1,10) = "ResolutionHeight"
$excel.cells.item(1,11) = "ColorDepth"
$excel.cells.item(1,12) = "CreateTime"
$excel.cells.item(1,13) = "DisconnectTime"
$excel.cells.item(1,14) = "SessionState"
$excel.cells.item(1,15) = "CollectionName"
$excel.cells.item(1,16) = "CollectionType"
$excel.cells.item(1,17) = "UnifiedSessionId"
$excel.cells.item(1,18) = "HostServer"
$excel.cells.item(1,19) = "IdleTime"
$excel.cells.item(1,20) = "RemoteFxEnabled"
$i = 2
foreach($process in $processes) {
$excel.cells.item($i,1) = $process.servername
$excel.cells.item($i,2) = $process.sessionid
$excel.cells.item($i,3) = $process.username
$excel.cells.item($i,4).Formula = '=VLOOKUP(C2,Hoja1!A:B,2,"FALSO")'
$excel.cells.item($i,5) = $process.domainname
$excel.cells.item($i,6) = $process.serveripaddress
$excel.cells.item($i,7) = $process.tsprotocol
$excel.cells.item($i,8) = $process.applicationtype
$excel.cells.item($i,9) = $process.resolutionwidth
$excel.cells.item($i,10) = $process.resolutionheight
$excel.cells.item($i,11) = $process.colordepth
$excel.cells.item($i,12) = $process.createtime
$excel.cells.item($i,13) = $process.disconnecttime
$excel.cells.item($i,14) = $process.sessionstate
$excel.cells.item($i,15) = $process.collectionname
$excel.cells.item($i,16) = $process.collectiontype
$excel.cells.item($i,17) = $process.unifiedsessionid
$excel.cells.item($i,18) = $process.hostserver
$excel.cells.item($i,19) = $process.idletime
$excel.cells.item($i,20) = $process.remotefxenabled
$i++
}
$workBook.saveas($sesionxlsx)
Remove-Variable -Name excel
Remove-Variable -Name i
Remove-Item -path $correosxlsx
Remove-Item -path $sesioncsv
Set-ExecutionPolicy Restricted
exit


En principio tengo localizado el error:
Código (bash) [Seleccionar]

$excel.cells.item($i,4).Formula = '=VLOOKUP(C2,Hoja1!A:B,2,"FALSO")'


Tengo que cambiar ese C2 por algo que cambie por cada fila, es decir (C2, C3, C4,...) asi hasta la ultima fila que genere.

(Por temas de RGPD no puedo mostrar como saco el contenido de cada csv, pero bueno, creo que se sobreentiende viendo cada foreach que es lo que saca xD)

#2
Vale, finalmente he conseguido una solución un poco rocambolesca xD.
Código (sql
) [Seleccionar]
CREATE FUNCTION dbo.captura6()
RETURNS INT
AS
BEGIN
DECLARE @resultado INT;
SELECT @resultado = COUNT(*) FROM dbo.Tabla1
RETURN @resultado
END
GO

Básicamente eliminé el parámetro de entrada y coloqué manualmente el nombre de la tabla en el cuerpo de la función xD.
Luego para comprobarlo hice lo siguiente:
Código (sql) [Seleccionar]
SELECT dbo.captura6();
Y listo xD.
#3
Código (sql) [Seleccionar]

CREATE FUNCTION dbo.captura6(@cuenta nchar(100))
RETURNS INT
AS
BEGIN
DECLARE @numero int;
SELECT @numero = Count(*) FROM @cuenta
RETURN @numero
END
GO


El objetivo es usar esta función es que devuelva el numero de filas de la tabla pasada por parámetro.
El problema es que el SQL Server Management Studio me dice que @cuenta no está definida, y cuando añado la linea DEFINE @cuenta nchar(100) me dice que ya estaba definida...

No doy encontrado el problema y mucho menos como solucionarlo xD.
#4
Scripting / Re: Necesito ayuda con este .bat
4 Marzo 2016, 22:35 PM
archivo.bat carpetaorigen carpetadestino 4(para hacer la operacion4) .bat .txt .exe

En un principio, a partir del 4 parametro, tengo que tener la posibilidad de poner todas las extensiones que quiera, es decir, no solo hasta el sexto
#5
Scripting / Re: Necesito ayuda con este .bat
4 Marzo 2016, 21:40 PM
Lo que quiero hacer basicamente con el ultimo  apartado es que haga esto, que lo haga con n parametros:



El problema que tengo es que cuando pongo for /r %1 %%i in (*%4) do ( ... , aunque ponga más parametros en la ejecución, solo me detecta el 4º parametro, y si pongo
for /r %1 %%i in (*%4, *%5, *%6) do (... y pongo en la ejecución 1 solo parametro me hace esto:


#6
Scripting / Necesito ayuda con este .bat
4 Marzo 2016, 20:49 PM
Tengo que hacer este ejercicio:
Desarrolla un fichero bat que reciba al menos 4 parametros:
• El primer parametro sera una carpeta de ORIGEN.
• El segundo parametro sera una carpeta de DESTINO.
• El ultimo parametro sera la OPERACION a realizar.
• Los parametros existentes entre el tercero y el ultimo seran extensiones de archivos.
El fichero bat validara que al menos hay 4 parametros. En caso de error finalizara.
El fichero bat validara que ORIGEN existe. En caso de que no exista finalizara.
El fichero bat validara que DESTINO existe. En caso de que no exista finalizara.
El fichero bat validara que OPERACION vale 1,2,3 o 4. En caso de que no lo haga el fichero bat
finalizara.
Acciones a realizar en funcion del valor de operación:
OPERACION=1
• Copia el contenido de la carpeta ORIGEN a la carpeta DESTINO.
OPERACION=2
• Muestra los atributos de todos los archivos existentes en la carpeta DESTINO.
OPERACION=3
• Muestra todas las carpetas y subcarpetas (ficheros no) existentes en la carpeta ORIGEN.
OPERACION=4
• Muestra el numero total de archivos (carpetas no) con las extensiones pasadas como
parametros existentes en la carpeta ORIGEN y en la carpeta DESTINO

Por el momento llevo esto hecho:
Código (DOS) [Seleccionar]

@echo off
cls
setlocal enabledelayedexpansion
set contador=0
if "%1%"=="" goto error
if not exist %1 goto fin
if "%2%"=="" goto error
if not exist %2 goto fin
if "%3%"=="" goto error
if %3%==1 goto operacion1
if %3%==2 goto operacion2
if %3%==3 goto operacion3
if %3%==4 goto operacion4
goto fin
if "%4%"=="" goto error

:operacion1
copy %1 %2
goto fin
:operacion2
attrib /s %2\*
goto fin
:operacion3
tree %1
goto fin
:operacion4
for /r %1 %%i in (*%4, *%5, *%6) do (
set /a contador=contador+1
echo %%i
)
for /r %2 %%j in (*%4, *%5, *%6) do (

set /a contador=contador+1
echo %%j
)
echo El programa ha detectado %contador% archivos
goto fin
:error
echo ERROR
:fin
echo El programa ha finalizado
pause



Lo único que me está fallando ahora mismo, obviamente son los for /r de operacion4, ya que quiero que dentro del paréntesis después del in me pille n parámetros, pero que estos parámetros empiecen desde el 4º ( es decir, que no me pille el %1, %2, %3).