none
Buscar dato dentro de un archivo y copiarlo a otra carpeta

    Pregunta

  • Hola, como están?.... necesito un poco de ayuda, estoy intentando hacer un script con PowerShell donde se busque un valor dentro de varios archivos y en el caso que se encuentre este valor me copie este archivo a otra ubicación,

    Arme este código pero no se si la funcion Get-ChildItem sirva para crear un array de archivos donde deba buscar... Si me pueden ayudar se los agradecería...

    #declaro las carpetas donde deberia busar y filtro por tipo de archivo $Server1 = @(Get-ChildItem -Path \\Serverweb01\FrontEnd -Include *.log)

    #declaro el valor a buscar $Buscardato = "local user" #Funcion de busqueda function buscarCadena([String]$cadena , [String]$file) { # Se verifica que el fichero existe y la cadena no es nula if ((Test-Path -Path $file) -and $cadena) { $list = Get-Content $file # Si se encuentra la cadena se devuelve true if ($list -match $cadena) { return $true } } # Se devuelve false si no encuentra nada o el fichero no existe return $false } #Busco en cada archivo foreach ($file in $Server1) { if (buscarCadena $Buscardato $file = true) { #copio el archivo Copy-Item -Path $file -Destination C:\Users\%username%\Desktop\Logs\ -Force } }

    una cosa mas que me gustaría que haga es que al copiar el archivo lo copie con el mismo nombre y le agregue _Server1 esto se puede hacer? con que función?.

    Muchas gracias,

    Saludos.

    viernes, 12 de enero de 2018 19:00

Respuestas

  • Logre hacerlo de esta manera

    #declaro las carpetas donde deberia busar y filtro por tipo de archivo
    $Server1 = @(Get-ChildItem -Path \\Serverweb01\FrontEnd\logs)
    
    #declaro el valor a buscar
    $cadena = "Local User"
    
    #Funcion de busqueda
    function buscarCadena($cadena, $file) {
        # Se devuelve true si encuentra la cadena
            if (Select-String -InputObject $file -Pattern $cadena -CaseSensitive) {
                return $true
            }
            else{
        
        # Se devuelve false si no encuentra nada o el fichero no existe
        return $false
        }
    }
    
    #Busco en cada archivo
    foreach ($file in $Server1){
        if (buscarCadena $cadena $file) {
            #copio el archivo
                Copy-Item -Path $file.FullName -Destination "C:\logs\" -Force
            #Muestro el nombre del archivo
                echo $file.FullName
    }
    } 
    Lo que me faltaría hacer es que me agregue al final de estos archivos _Server1 ya que también quiero que busque en otros servidores y tienen el mismo nombre y no quiero que los reemplace.

    • Marcado como respuesta 20Daniel viernes, 19 de enero de 2018 13:39
    viernes, 12 de enero de 2018 20:52