24 Dic 2015 |
Lanciando per la prima volta questo semplice script con Robocopy:
> robocopy %SOURCE% %DESTINATION% /COPYALL /MIR /ZB /R:3 /W:5 /LOG:%LOGFILE%
dove:
- %SOURCE% era un percorso locale (Server Windows), ad esempio C:\Test
- %DESTINATION% era un percorso di rete, nello specifico, una cartella di un NAS, ad esempio \\MyNAS1\share1\Test
- %LOGFILE% era il percorso in cui aveva il mio file di log
mi sono accorto che erano state copiate soltanto cartelle e sottocartelle vuote.
Analizzando il log mi sono accorto dei seguenti errori:
[...]
New File 6148 .DS_Store
2015/12/24 10:41:56 ERROR 1314 (0x00000522) Copying NTFS Security to Destination Directory C:\\Test\\
A required privilege is not held by the client.
New File 41.3 m test.doc
2015/12/24 10:41:56 ERROR 1314 (0x00000522) Copying NTFS Security to Destination Directory C:\\Test\\
A required privilege is not held by the client.
New File 659 README.txt
2015/12/24 10:41:56 ERROR 1314 (0x00000522) Copying NTFS Security to Destination Directory C:\\Test\\
A required privilege is not held by the client.
New File 17920 TESTxlsx.xlsx
2015/12/24 10:41:56 ERROR 1314 (0x00000522) Copying NTFS Security to Destination Directory C:\\Test\\
[...]
lo stesso errore per ogni file.
Per risolvere il problema ho modificato lo script togliendo l’opzione /COPYALL e mettendo al suo posto /COPY:DAT, così:
> robocopy %SOURCE% %DESTINATION% /COPY:DAT /MIR /ZB /R:3 /W:5 /LOG:%LOGFILE%
Molto probabilmente il NAS che ha un sistema UNIX al suo interno, non riesce a mantenere le informazioni di sicurezza, proprietari e auditing che vengono passate rispettivamente con le opzioni S, O e U.
Attenzione: nel mio caso, la rimozione delle opzioni faceva al caso mio perché non avevo la necessità di mantenere quelle informazioni nel mio backup. In caso contrario, consiglio di cercare altrove la causa del problema.
Note utili tratte dal sito ufficiale
- /COPYALL : Copy ALL file info (equivalent to /COPY:DATSOU).
- /COPY:copyflag[s] : What to COPY (default is /COPY:DAT)
(copyflags : D=Data, A=Attributes, T=Timestamps, S=Security=NTFS ACLs, O=Owner info, U=aUditing info).
Link utili su Robocopy per capire e approfondire la sintassi
3 Dic 2015 |
Se si vogliono copiare due cartelle in Linux si può usare rsync da linea di comando.
Preparo l’ambiente di test creando le seguenti cartelle e file:
cartella “/share/source”
cartella “/share/destination”
cartella “/share/source/folder 1”
cartella “/share/source/folder 2”
file “/share/source/folder 1/file 1”
file “/share/source/folder 2/file 2”
Voglio copiare il contenuto della cartella “source” nella cartella “destination”. Quindi lancio:
[/share] # rsync -avc "source/" "destination"
Come mi aspettavo, ecco il risultato:
sending incremental file list
./
folder 1/
folder 1/file 1.txt
folder 2/
folder 2/file 2.txt
sent 253 bytes received 61 bytes 628.00 bytes/sec
total size is 12 speedup is 0.04
Verifico il risultato:
[/share] # ls -lR destination/
destination/:
drwxrwx--- 2 admin administ 4096 Dec 2 17:24 folder 1/
drwxrwx--- 2 admin administ 4096 Dec 2 17:24 folder 2/
destination/folder 1:
-rwxrwx--- 1 admin administ 6 Dec 2 17:24 file 1.txt*
destination/folder 2:
-rwxrwx--- 1 admin administ 6 Dec 2 17:24 file 2.txt*
Con un bel man rsync si possono vedere le opzioni che ho usato: https://linux.die.net/man/1/rsync
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
-v, --verbose increase verbosity
-c, --checksum skip based on checksum, not mod-time & size
Qualche nota:
- Nel comando del confronto, la slash “/” di “source/” vuol dire “il contenuto di source”.
- L’opzione “-a” equivale a “-rlptgoD”. Incollo qui sotto le spiegazioni:
-r, --recursive recurse into directories
-l, --links copy symlinks as symlinks
-p, --perms preserve permissions
-t, --times preserve modification times
-g, --group preserve group
-o, --owner preserve owner (super-user only)
-D same as --devices --specials
--devices preserve device files (super-user only)
--specials preserve special files
2 Dic 2015 |
Se si vogliono confrontare due cartelle in Linux si può usare rsync da linea di comando.
Preparo l’ambiente di test creando le seguenti cartelle e file:
cartella “/share/source”
cartella “/share/destination”
cartella “/share/source/folder 1”
cartella “/share/source/folder 2”
file “/share/source/folder 1/file 1”
file “/share/source/folder 2/file 2”
cartella “/share/destination/folder 1”
file “/share/destination/folder 1/file 1”
Voglio confrontare la cartella “source” con la cartella “destination”. Quindi lancio:
[/share] # rsync -avnc "source/" "destination"
Come mi aspettavo, ecco il risultato:
sending incremental file list
./
folder 2/
folder 2/file 2.txt
sent 155 bytes received 23 bytes 356.00 bytes/sec
total size is 12 speedup is 0.07 (DRY RUN)
la cartella “folder 2” e il file “folder 2/file 2.txt” sono quelli che mancano nella cartella “destination”.
Con un bel man rsync si possono vedere le opzioni che ho usato: https://linux.die.net/man/1/rsync
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
-v, --verbose increase verbosity
-n, --dry-run perform a trial run with no changes made
-c, --checksum skip based on checksum, not mod-time & size
Qualche nota:
- Nel comando del confronto, la slash “/” di “source/” vuol dire “il contenuto di source”.
- L’opzione “-a” equivale a “-rlptgoD”. Incollo qui sotto le spiegazioni:
-r, --recursive recurse into directories
-l, --links copy symlinks as symlinks
-p, --perms preserve permissions
-t, --times preserve modification times
-g, --group preserve group
-o, --owner preserve owner (super-user only)
-D same as --devices --specials
--devices preserve device files (super-user only)
--specials preserve special files
- L’opzione “-n” è indispensabile per il confronto!!
22 Nov 2015 |
Dopo aver eseguito questo comando PowerShell che incolla una formula dentro una cella di un file Excel:
$excelObject = New-Object -ComObject Excel.Application
$targetWorkbook = $excelObject.Workbooks.Open($myFile)
$firstSheet = $targetWorkbook.Worksheets.Item(1)
$firstSheet.Cells.Item(6,2).Formula = "=SE(VAL.ERRORE(MEDIA(..."
appariva il seguente errore:
Eccezione da HRESULT: 0x800A03EC
In riga:1 car:1
+ $firstSheet_N.Cells.Item(6,2).Formula = "=SE(VAL.ERRORE(MEDIA(..."
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : OperationStopped: (:) [], COMException + FullyQualifiedErrorId : System.Runtime.InteropServices.COMExcep tion
Dopo qualche ricerca e qualche intuizione, ho ricondotto l’errore alle impostazioni internazionali di Excel.
Ho modificato l’ultima riga nel modo seguente:
$firstSheet.Cells.Item($r,2).FormulaLocal = "=SE(VAL.ERRORE(MEDIA(..."
Come si vede, al posto di .Formula ho usato .FormulaLocal che fa funzionare il passaggio di stringhe con le impostazioni internazionali locali (inclusi i separatori,…).
Ho rilanciato lo script e ha funzionato tutto correttamente.
27 Mag 2013 |
# ifconfig eth0 | grep HWaddr | awk '{print $5}'
14 Feb 2012 |
Oltre al semplice NET USE, in PowerShell è possibile usare il ComObject “WScript.Network” per gestire la mappatura di un disco di rete (map network drive).
Questo semplice script serve per mappare un disco di rete e per rimuovere la mappatura:
Write-Host "] Mapping Network Drive . . ."
# Credentials
$serverName = 'TESTPC01'
$userName = 'TESTPC01\Administrator'
$serverPwdSec = Read-Host -assecurestring "] Server password" # Ask for the user password
$serverPwd = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($serverPwdSec))
$network = New-Object -ComObject WScript.Network
try {
# Previous method: NET USE T: \\$serverName\folderTest /USER:$userName $serverPwd
$network.MapNetworkDrive("T:", "\\$serverName\folderTest", $false, "$userName", "$serverPwd")
# $network.MapNetworkDrive("T:", "\\$serverName\folderTest") # Without credential
Write-Host "] Network Drive mapped!`n" -BackgroundColor Green -ForegroundColor Black;
} catch {
Write-Host "[An error occurred in drive mapping!]" -BackgroundColor Red -ForegroundColor Black;
Write-Host "[Error message:" $_.Exception.Message "`n" -BackgroundColor Red -ForegroundColor Black;
}
Write-Host "] Remove Network Drive . . ."
try {
$network.RemoveNetworkDrive("T:")
# Previous method: NET USE T: /delete
} catch {
Write-Host "[An error occurred in drive unmapping!]`n" -BackgroundColor Red -ForegroundColor Black;
}