none
Listar propiedades de carpeta servidores remotos. RRS feed

  • Pregunta

  • Hola, les consulto si me pueden facilitar un script que me permita listar las propiedades de una carpeta , de varios servidores remotos, y tomar el nombre de estos equipos de un archivo txt.

    Por ejemplo:

    Servidor01 - Carpeta -> c:\vm

    Servidor02 - Carpeta -> c:\vm

    ..................

    Servidorxx - Carpeta -> c:\vm

    Y el resultado debería, reflejar alga asi.

     

    Gracias.


    Saludos Jorge Argentina


    sábado, 11 de julio de 2015 22:36

Respuestas

  • Hola de nuevo,

    Eso es que sale algún tamaño tan grande que supera el valor máximo permitido por una variable de tipo entero. 

    Cambia donde pone:

     Param ([int]$size)

    Por:

     Param ([long]$size)

    En la función Format-FileSize.

    Si aún así no te funcionara, entonces lo que hacemos es quitar la función que únicamente es para dar los valores de tamaño "bonitos" y dejamos el código en:

    Clear-Host
    
    #Fichero con nombres de servidores. Un nombre por línea. Ej:
    #Servidor1
    #Servidor2
    $Servidores = Get-Content "C:\Temp\SERVIDORES.txt"
    
    #Nombre de la carpeta a leer en cada servidor
    $Carpeta = "C:\Temp"
    
    try
    {
    	foreach ($srv in $Servidores)
    	{
    		$Ruta = ("\\" + $srv + "\" + $Carpeta).replace(":","$")
    		if (Test-Path $Ruta)
    		{
    			$Objetos = Get-ChildItem $Ruta -Recurse  | Select-Object -Property *
    			$NumFicheros = ($Objetos | Where { ! $_.PSIsContainer }).Count
    			$TamañoFicheros = ($Objetos | Measure-Object -Property Length -Sum).sum
    			$NumCarpetas = ($Objetos | Where { $_.PSIsContainer }).Count
    				
    			Write-Host ($srv + "($carpeta): " + $NumFicheros + " ficheros. " + $TamañoFicheros + "bytes - " + $NumCarpetas + " carpetas")
    		}
    		else
    		{
    			Write-Warning ("En el servidor $srv no existe la ruta $Carpeta o no dispones de permisos de acceso.")
    		}
    	}
    }
    catch
    {
    	Write-Error $_
    }

    A ver si ahora lo conseguimos.

    Un saludo.

    Diego

    • Marcado como respuesta Cavallin Jorge miércoles, 15 de julio de 2015 12:33
    miércoles, 15 de julio de 2015 8:29
  • Hola, Diego. Acá dejo tu mismo código con una modificación para grabar el archivo de texto de salida. Comente la parte de calculo , para que el tamaño me salga en bytes , pero es solo un detalle de gusto, en el formato de salida.

    Clear-Host
    $Servidores = hostname
    #archivo de salida
    $File = "e:\sizefolder.txt"
    #Nombre de la carpeta a leer en cada servidor
    $Carpeta = "e:\temp\"
    #Reregistro en al archivo

    Function Format-FileSize() {
        #Param ([int]$size)
        Param ([long]$size)
        # If     ($size -gt 1TB) {[string]::Format("{0:0.00} TB", $size / 1TB)}
        # ElseIf ($size -gt 1GB) {[string]::Format("{0:0.00} GB", $size / 1GB)}
        # ElseIf ($size -gt 1MB) {[string]::Format("{0:0.00} MB", $size / 1MB)}
        # ElseIf ($size -gt 1KB) {[string]::Format("{0:0.00} kB", $size / 1KB)}
        If ($size -gt 0)   {[string]::Format("{0:0.00} Bytes", $size)}
        Else                   {""}
    }

    try
    {
    foreach ($srv in $Servidores)
    {
    $Ruta = ("\\" + $srv + "\" + $Carpeta).replace(":","$")
    if (Test-Path $Ruta)
    {
    $Objetos = Get-ChildItem $Ruta -Recurse  | Select-Object -Property *
    $NumFicheros = ($Objetos | Where { ! $_.PSIsContainer }).Count
    $TamañoFicheros = ($Objetos | Measure-Object -Property Length -Sum).sum
    $MbFicheros = Format-FileSize($TamañoFicheros)
    $NumCarpetas = ($Objetos | Where { $_.PSIsContainer }).Count

    Write-Host ($srv + "($carpeta) " + $NumFicheros + " ficheros " + $NumCarpetas + " carpetas " + " Size " + $MbFicheros |Out-File $File) 
                
    }
    else
    {
    Write-Warning ("En el servidor $srv no existe la ruta $Carpeta o no dispones de permisos de acceso.")
    }
    }
    }
    catch
    {
    Write-Error $_ 


    Saludos Jorge Argentina

    • Marcado como respuesta Cavallin Jorge miércoles, 5 de octubre de 2016 14:28
    lunes, 27 de julio de 2015 20:34

Todas las respuestas

  • Hola,

    Prueba a ver si te sirve algo como esto:

    Clear-Host
    
    #Fichero con nombres de servidores. Un nombre por línea. Ej:
    #Servidor1
    #Servidor2
    $Servidores = Get-Content "C:\Temp\SERVIDORES.txt"
    
    #Nombre de la carpeta a leer en cada servidor
    $Carpeta = "C:\Temp"
    
    Function Format-FileSize() {
        Param ([int]$size)
        If     ($size -gt 1TB) {[string]::Format("{0:0.00} TB", $size / 1TB)}
        ElseIf ($size -gt 1GB) {[string]::Format("{0:0.00} GB", $size / 1GB)}
        ElseIf ($size -gt 1MB) {[string]::Format("{0:0.00} MB", $size / 1MB)}
        ElseIf ($size -gt 1KB) {[string]::Format("{0:0.00} kB", $size / 1KB)}
        ElseIf ($size -gt 0)   {[string]::Format("{0:0.00} B", $size)}
        Else                   {""}
    }
    
    try
    {
    	foreach ($srv in $Servidores)
    	{
    		$Ruta = ("\\" + $srv + "\" + $Carpeta).replace(":","$")
    		if (Test-Path $Ruta)
    		{
    			$Objetos = Get-ChildItem $Ruta -Recurse  | Select-Object -Property *
    			$NumFicheros = ($Objetos | Where { ! $_.PSIsContainer }).Count
    			$TamañoFicheros = ($Objetos | Measure-Object -Property Length -Sum).sum
    			$MbFicheros = Format-FileSize($TamañoFicheros)
    			$NumCarpetas = ($Objetos | Where { $_.PSIsContainer }).Count
    				
    			Write-Host ($srv + "($carpeta): " + $NumFicheros + " ficheros. " + $MbFicheros + " - " + $NumCarpetas + " carpetas")
    		}
    		else
    		{
    			Write-Warning ("En el servidor $srv no existe la ruta $Carpeta o no dispones de permisos de acceso.")
    		}
    	}
    }
    catch
    {
    	Write-Error $_
    }
    

    Ten en cuenta que necesita permisos de acceso a \\nombreservidor\C$ para poder llegar a las carpetas remotas.

    La información se está escribiendo por pantalla, pero la podrías volcar a fichero de texto, etc. sin problema.

    En realidad, varias de las líneas que se ejecutan podrían agruparse en una sola con pipes (|), pero te lo he puesto así para que veas más cláramente lo que hace. Igualmente, la función Format-FileSize está para darte el tamaño en B, Mb, Gb, etc según su valor.

    Espero que te sirva.

    Un saludo.

    Diego

    martes, 14 de julio de 2015 10:49
  • Se ve que algún error se genero.

    E:\carpetas.ps1 : Cannot process argument transformation on parameter 'size'. Cannot convert value "2663544454" to type "System.Int32". Error: 
    "Value was either too large or too small for an Int32."
        + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
        + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,carpetas.ps1
     

    Gracias


    Saludos Jorge Argentina

    martes, 14 de julio de 2015 18:07
  • Hola de nuevo,

    Eso es que sale algún tamaño tan grande que supera el valor máximo permitido por una variable de tipo entero. 

    Cambia donde pone:

     Param ([int]$size)

    Por:

     Param ([long]$size)

    En la función Format-FileSize.

    Si aún así no te funcionara, entonces lo que hacemos es quitar la función que únicamente es para dar los valores de tamaño "bonitos" y dejamos el código en:

    Clear-Host
    
    #Fichero con nombres de servidores. Un nombre por línea. Ej:
    #Servidor1
    #Servidor2
    $Servidores = Get-Content "C:\Temp\SERVIDORES.txt"
    
    #Nombre de la carpeta a leer en cada servidor
    $Carpeta = "C:\Temp"
    
    try
    {
    	foreach ($srv in $Servidores)
    	{
    		$Ruta = ("\\" + $srv + "\" + $Carpeta).replace(":","$")
    		if (Test-Path $Ruta)
    		{
    			$Objetos = Get-ChildItem $Ruta -Recurse  | Select-Object -Property *
    			$NumFicheros = ($Objetos | Where { ! $_.PSIsContainer }).Count
    			$TamañoFicheros = ($Objetos | Measure-Object -Property Length -Sum).sum
    			$NumCarpetas = ($Objetos | Where { $_.PSIsContainer }).Count
    				
    			Write-Host ($srv + "($carpeta): " + $NumFicheros + " ficheros. " + $TamañoFicheros + "bytes - " + $NumCarpetas + " carpetas")
    		}
    		else
    		{
    			Write-Warning ("En el servidor $srv no existe la ruta $Carpeta o no dispones de permisos de acceso.")
    		}
    	}
    }
    catch
    {
    	Write-Error $_
    }

    A ver si ahora lo conseguimos.

    Un saludo.

    Diego

    • Marcado como respuesta Cavallin Jorge miércoles, 15 de julio de 2015 12:33
    miércoles, 15 de julio de 2015 8:29
  • Excelente , muchas gracias.

    Saludos Jorge Argentina

    miércoles, 15 de julio de 2015 12:33
  • Hola Diego. Si me lo permites cambiaría un poco lo que me propones que es excelente. El tema es que esto al consultar en forma remota a varios equipos , el resultado se demora en función de los objetos que tiene la carpeta que medimos. 

    Te consulto si usando esta misma lógica de calculo, en lugar de leer remoto  , seria hacerlo en forma local, generar un archivo que luego se copie en otro equipo remoto.

    y luego los concateno :  Get-Content *.txt | set-Content 3.csv

    Muchas gracias


    Saludos Jorge Argentina

    martes, 21 de julio de 2015 17:55
  • Hola, Diego. Acá dejo tu mismo código con una modificación para grabar el archivo de texto de salida. Comente la parte de calculo , para que el tamaño me salga en bytes , pero es solo un detalle de gusto, en el formato de salida.

    Clear-Host
    $Servidores = hostname
    #archivo de salida
    $File = "e:\sizefolder.txt"
    #Nombre de la carpeta a leer en cada servidor
    $Carpeta = "e:\temp\"
    #Reregistro en al archivo

    Function Format-FileSize() {
        #Param ([int]$size)
        Param ([long]$size)
        # If     ($size -gt 1TB) {[string]::Format("{0:0.00} TB", $size / 1TB)}
        # ElseIf ($size -gt 1GB) {[string]::Format("{0:0.00} GB", $size / 1GB)}
        # ElseIf ($size -gt 1MB) {[string]::Format("{0:0.00} MB", $size / 1MB)}
        # ElseIf ($size -gt 1KB) {[string]::Format("{0:0.00} kB", $size / 1KB)}
        If ($size -gt 0)   {[string]::Format("{0:0.00} Bytes", $size)}
        Else                   {""}
    }

    try
    {
    foreach ($srv in $Servidores)
    {
    $Ruta = ("\\" + $srv + "\" + $Carpeta).replace(":","$")
    if (Test-Path $Ruta)
    {
    $Objetos = Get-ChildItem $Ruta -Recurse  | Select-Object -Property *
    $NumFicheros = ($Objetos | Where { ! $_.PSIsContainer }).Count
    $TamañoFicheros = ($Objetos | Measure-Object -Property Length -Sum).sum
    $MbFicheros = Format-FileSize($TamañoFicheros)
    $NumCarpetas = ($Objetos | Where { $_.PSIsContainer }).Count

    Write-Host ($srv + "($carpeta) " + $NumFicheros + " ficheros " + $NumCarpetas + " carpetas " + " Size " + $MbFicheros |Out-File $File) 
                
    }
    else
    {
    Write-Warning ("En el servidor $srv no existe la ruta $Carpeta o no dispones de permisos de acceso.")
    }
    }
    }
    catch
    {
    Write-Error $_ 


    Saludos Jorge Argentina

    • Marcado como respuesta Cavallin Jorge miércoles, 5 de octubre de 2016 14:28
    lunes, 27 de julio de 2015 20:34