none
Server Storage Management RRS feed

  • Domanda

  • Buongiorno!

    Oggi sto lavorando con una VM con Windows server 2008 R2 avente come ruolo File Services, in particolare File Server e File Server Resource Manager. Ho impostato una cartella, su cui ho il controllo completo, chiamata Test sulla quale vorrei effettuare un test appunto per capire come posso fare quanto segue.

    Premetto che ciò che voglio fare va schedulato in modo che venga applicato ogni giorno alle 13.

    Voglio eliminare tutti i file Temporanei quali Thumbs.db o i file di "Backup" di office, per chiarirci quelli che hanno il $ e che vengono creati quando il programma crasha, o simili.

    Per lo specifico file Thumbs.db ho già introdotto una regola ad obiectum, ma per gli altri file no...
    Inoltre esiste un modo per eliminare le cartelle vuote in automatico?

    Non sono molto pratico in merito; avreste qualche suggerimento?

    Grazie

    A


    • Modificato Albiz venerdì 15 novembre 2013 14:04 update
    venerdì 15 novembre 2013 11:31

Risposte

  • Per la serie sono un rompi*****...

    Sto tentando di creare un report per i file duplicati, dato che non ho intenzione di affidarmi a software o regole di default...
    Quindi ho preso uno script per i file duplicati e un generatore di file html e sto tentando di metterli assieme...

    function Get-Double {
        [CmdletBinding()]
        param (
            [Parameter(Mandatory=$true,
                       Position=0,
                       ValueFromPipeline=$true,
                       ValueFromPipelineByPropertyName=$true)]
            [System.String]
            [Alias('PSPath')]
            $Path
        )
    
        if ((Test-Path -Path $Path) -eq $false) {
            throw New-Object System.IO.FileNotFoundException($Path)
        }
    
        try {
            $item = Get-Item -Path $Path -Force -ErrorAction Stop
        } 
        catch {
            throw
        }
    
        if ($item -isnot [System.IO.FileInfo]) {
            throw New-Object System.ArgumentException('Specified path must refer to a File object.','Path')
        }
    
        try {
            $bytes = [System.IO.File]::ReadAllBytes($item.FullName)
        } catch {
            throw
        }
    
        $md5Hash = [System.Security.Cryptography.MD5]::Create()
        $hashBytes = $md5Hash.ComputeHash($bytes)
    
        $sb = New-Object System.Text.StringBuilder
    
        foreach ($byte in $hashBytes) {
            $sb.Append($byte.ToString("x2")) | Out-Null
        }
    
        Write-Output $sb.ToString()
    }
    
    $files = @{}
    $folder = 'C:\Test\'  # Il percorso su cui lavorare
    
    Get-ChildItem -Path $folder -Force -Recurse | 
    Where-Object { $_ -is [System.IO.FileInfo] } |
    ForEach-Object {
        try {
            $hash = $_ | Get-Double
        } catch {
            Write-Error -ErrorRecord $_
            return
        }
    
        if ($files.ContainsKey($hash) -eq $false) {
            $files[$hash] = New-Object 'System.Collections.Generic.List[System.String]'
        } else {
            # I'm just identifying duplicates by adding all their names to a list.
            # Keep in mind that if two files have identical hashes, they could have
            # different contents; it's possible for two different inputs to produce the same
            # hash code.
        }
    
        $files[$hash].Add($_.FullName)
    }
    
    $data=@()
    foreach ($entry in $files.GetEnumerator()) {
        if ($entry.Value.Count -gt 1) {
            $data=$data+$entry.Value
        }
    }
    
    #$data= $data | sort{Split-Path( $data ) -leaf} possibilità di ordinare per nome(Verificare)
    $drives = foreach ($path in $data) {
                $prophash = @{
                Nome= split-path $path -leaf
                Percorso = $path
                }
    
            #create a new object from the property hash
            New-Object PSObject -Property $prophash
            }
            #embed the style in the html header
    
    $head = @'
    <Title>Double Report</Title>
    <style>
    body 
    { 
     background-color:#FFFFFF;
     font-family:Verdana;
     font-size:12pt; 
    }
    td, th 
    { 
     border:1px solid blue; 
     border-collapse:collapse; 
    }
    th 
    {
     color:white;
     background-color:green; 
    }
    table, tr, td, th { padding: 5px; margin: 0px }
    table { margin-left:50px; }
    </style>
    '@
    
    #create an xml document from the HTML fragment
    [xml]$html = $drives | ConvertTo-Html -fragment
    
    
    #check each row, skipping the TH header row
    for ($i=1;$i -le $html.table.tr.count-1;$i++) {
      $class = $html.CreateAttribute("class")
    }
    
    #create the final report from the innerxml which should be html code
    $body = @"
    <H1>Double Report for $Folder</H1>
    $($html.innerxml)
    "@
    
    #put it all together
    ConvertTo-HTML -head $head  -PostContent "<br><i>$(Get-date)</i>" -body $body | 
    Out-File "C:\Test\Double.html" -Encoding ascii
    
    Invoke-Item "C:\Test\Double.html"

    Viene generato un file html, se ad esempio ho 3 serie di doppioni, alla fine del processo ho sempre e solo 1 file html che mi riporterà  i valori di tutte le serie...
    Lo si può modificare un po' magari...
    Grazie di tutto!!!!
    A



    • Modificato Albiz giovedì 21 novembre 2013 13:07 [SOLVED]
    • Contrassegnato come risposta Albiz giovedì 21 novembre 2013 13:08
    • Contrassegno come risposta annullato Fabrizio-GMVP, Moderator lunedì 25 novembre 2013 13:14
    • Contrassegnato come risposta Fabrizio-GMVP, Moderator lunedì 25 novembre 2013 13:16
    mercoledì 20 novembre 2013 12:52
  • qui hai l'esempio per la sola lettura

    http://blogs.technet.com/b/heyscriptingguy/archive/2004/10/19/how-can-i-change-a-read-only-file-to-a-read-write-file.aspx

    per l'hidden file è lo stesso, cambia solo l'attributo.

    ciao.


    Edoardo Benussi
    Microsoft MVP - Directory Services
    edo[at]mvps[dot]org

    lunedì 25 novembre 2013 13:00
    Moderatore

Tutte le risposte

  • forse non ho ben capito la domanda ma non ti basta uno script da lanciare con le operazioni pianificate ?

    Edoardo Benussi
    Microsoft MVP - Directory Services
    edo[at]mvps[dot]org

    • Contrassegnato come risposta Albiz mercoledì 20 novembre 2013 14:09
    • Contrassegno come risposta annullato Fabrizio-GMVP, Moderator lunedì 25 novembre 2013 13:14
    venerdì 15 novembre 2013 15:55
    Moderatore
  • Buongiorno!

    Per le cartelle vuote in effetti ho copiato uno script, con qualche modifica, ed è stato inserito  tra le operazioni pianificate, per i file temporanei però ho utilizzato il file management tasks; il problema è che per ogni estensione devo creare una procedura mentre in realtà vorrei una procedura unica, anche perché se devo ricrearla su un altro server o un altra VM risulta più veloce, se questo può essere fatto con uno script ben venga.

    Nel frattempo è emersa l'esigenza di creare un report per i file duplicati, l'eliminazione al momento non è in programma, utilizzando lo storage reports management non riesco a trovare tutti i duplicati: lo stesso file con nomi diversi non viene identificato come duplicato. Purtroppo non ho modo di editare alcun parametro (non ce ne sono...) quindi pensavo di utilizzare un software come Anti Twin; una terza via è plausibile?

    Grazie

    A

    • Contrassegnato come risposta Albiz mercoledì 20 novembre 2013 14:09
    • Contrassegno come risposta annullato Albiz venerdì 22 novembre 2013 14:27
    martedì 19 novembre 2013 08:07
  • non credo che ci sia una terza via per trovare i duplicati analizzando il contenuto dei files.

    Edoardo Benussi
    Microsoft MVP - Directory Services
    edo[at]mvps[dot]org

    • Contrassegnato come risposta Albiz martedì 19 novembre 2013 14:12
    • Contrassegno come risposta annullato Albiz mercoledì 20 novembre 2013 14:10
    martedì 19 novembre 2013 08:59
    Moderatore
  • Per le cartelle vuote in effetti ho copiato uno script, con qualche modifica, ed è stato inserito  tra le operazioni pianificate

    Ed ecco che puntualmente appare l'errore di distrazione...

    Alcune cartelle iniziano con dei numeri es 00-Documenti, sebbene vuote NON VANNO CANCELLATE.

    Pensavo a uno script

    if(Folder start with(list)){skip}

    ma non ho idea di come si scrive esattamente in powershell.

    $Dir="C:\Test" 
    $Et1="0"
    $Et2="9"
    foreach( $In in(Get-ChildItem $Dir -Recurse)){ #per ogni cartella in $Dir
    if(!(Get-ChildItem -Path $In.FullName)){ #se non hai figli
    $Sav=Split-Path( $In ) -leaf; #prendi il nome della cartella
    if(!($Sav.StartsWith($Et1)) -and (!($Sav.StartsWith($Et2)))){ #se non fa parte delle eccezioni
    echo $In.FullName; #stampa
    #Remove-Item $In.FullName
    }
    }
    }


    • Modificato Albiz martedì 19 novembre 2013 14:11 [SOLVED]
    • Contrassegnato come risposta Edoardo BenussiMVP, Moderator martedì 19 novembre 2013 14:30
    • Contrassegno come risposta annullato Albiz venerdì 22 novembre 2013 14:27
    martedì 19 novembre 2013 11:30
  • Per la serie sono un rompi*****...

    Sto tentando di creare un report per i file duplicati, dato che non ho intenzione di affidarmi a software o regole di default...
    Quindi ho preso uno script per i file duplicati e un generatore di file html e sto tentando di metterli assieme...

    function Get-Double {
        [CmdletBinding()]
        param (
            [Parameter(Mandatory=$true,
                       Position=0,
                       ValueFromPipeline=$true,
                       ValueFromPipelineByPropertyName=$true)]
            [System.String]
            [Alias('PSPath')]
            $Path
        )
    
        if ((Test-Path -Path $Path) -eq $false) {
            throw New-Object System.IO.FileNotFoundException($Path)
        }
    
        try {
            $item = Get-Item -Path $Path -Force -ErrorAction Stop
        } 
        catch {
            throw
        }
    
        if ($item -isnot [System.IO.FileInfo]) {
            throw New-Object System.ArgumentException('Specified path must refer to a File object.','Path')
        }
    
        try {
            $bytes = [System.IO.File]::ReadAllBytes($item.FullName)
        } catch {
            throw
        }
    
        $md5Hash = [System.Security.Cryptography.MD5]::Create()
        $hashBytes = $md5Hash.ComputeHash($bytes)
    
        $sb = New-Object System.Text.StringBuilder
    
        foreach ($byte in $hashBytes) {
            $sb.Append($byte.ToString("x2")) | Out-Null
        }
    
        Write-Output $sb.ToString()
    }
    
    $files = @{}
    $folder = 'C:\Test\'  # Il percorso su cui lavorare
    
    Get-ChildItem -Path $folder -Force -Recurse | 
    Where-Object { $_ -is [System.IO.FileInfo] } |
    ForEach-Object {
        try {
            $hash = $_ | Get-Double
        } catch {
            Write-Error -ErrorRecord $_
            return
        }
    
        if ($files.ContainsKey($hash) -eq $false) {
            $files[$hash] = New-Object 'System.Collections.Generic.List[System.String]'
        } else {
            # I'm just identifying duplicates by adding all their names to a list.
            # Keep in mind that if two files have identical hashes, they could have
            # different contents; it's possible for two different inputs to produce the same
            # hash code.
        }
    
        $files[$hash].Add($_.FullName)
    }
    
    $data=@()
    foreach ($entry in $files.GetEnumerator()) {
        if ($entry.Value.Count -gt 1) {
            $data=$data+$entry.Value
        }
    }
    
    #$data= $data | sort{Split-Path( $data ) -leaf} possibilità di ordinare per nome(Verificare)
    $drives = foreach ($path in $data) {
                $prophash = @{
                Nome= split-path $path -leaf
                Percorso = $path
                }
    
            #create a new object from the property hash
            New-Object PSObject -Property $prophash
            }
            #embed the style in the html header
    
    $head = @'
    <Title>Double Report</Title>
    <style>
    body 
    { 
     background-color:#FFFFFF;
     font-family:Verdana;
     font-size:12pt; 
    }
    td, th 
    { 
     border:1px solid blue; 
     border-collapse:collapse; 
    }
    th 
    {
     color:white;
     background-color:green; 
    }
    table, tr, td, th { padding: 5px; margin: 0px }
    table { margin-left:50px; }
    </style>
    '@
    
    #create an xml document from the HTML fragment
    [xml]$html = $drives | ConvertTo-Html -fragment
    
    
    #check each row, skipping the TH header row
    for ($i=1;$i -le $html.table.tr.count-1;$i++) {
      $class = $html.CreateAttribute("class")
    }
    
    #create the final report from the innerxml which should be html code
    $body = @"
    <H1>Double Report for $Folder</H1>
    $($html.innerxml)
    "@
    
    #put it all together
    ConvertTo-HTML -head $head  -PostContent "<br><i>$(Get-date)</i>" -body $body | 
    Out-File "C:\Test\Double.html" -Encoding ascii
    
    Invoke-Item "C:\Test\Double.html"

    Viene generato un file html, se ad esempio ho 3 serie di doppioni, alla fine del processo ho sempre e solo 1 file html che mi riporterà  i valori di tutte le serie...
    Lo si può modificare un po' magari...
    Grazie di tutto!!!!
    A



    • Modificato Albiz giovedì 21 novembre 2013 13:07 [SOLVED]
    • Contrassegnato come risposta Albiz giovedì 21 novembre 2013 13:08
    • Contrassegno come risposta annullato Fabrizio-GMVP, Moderator lunedì 25 novembre 2013 13:14
    • Contrassegnato come risposta Fabrizio-GMVP, Moderator lunedì 25 novembre 2013 13:16
    mercoledì 20 novembre 2013 12:52
  • Dopo una settimana sono ancora alle prese con gli script XD.

    Avrei bisogno di capire come cambiare attributi a un file, in particolare come rimuovere lo stato nascosto

    Grazie!!

    A


    • Modificato Albiz lunedì 25 novembre 2013 10:07 problemi...
    venerdì 22 novembre 2013 14:33
  • qui hai l'esempio per la sola lettura

    http://blogs.technet.com/b/heyscriptingguy/archive/2004/10/19/how-can-i-change-a-read-only-file-to-a-read-write-file.aspx

    per l'hidden file è lo stesso, cambia solo l'attributo.

    ciao.


    Edoardo Benussi
    Microsoft MVP - Directory Services
    edo[at]mvps[dot]org

    lunedì 25 novembre 2013 13:00
    Moderatore