Open6
base64の取り扱い
# $pathにファイルパスがあるとして
[Convert]::ToBase64String([System.IO.File]::ReadAllBytes($path))
# $b64strにBase64文字列があり$pathに出力するとして
[System.IO.File]::WriteAllBytes($path, [Convert]::FromBase64String($b64str))
Linux と同じ様に折り返す場合
$br = [base64formattingoptions]::InsertLineBreaks
[Convert]::ToBase64String([System.IO.File]::ReadAllBytes($path), $br)
Linux の場合
bash
base64 foo.dat
base64 にしたときに時間とファイル名を保存する
bash
# $path にファイル名が入るとして
hostname=$(uname -n)
name=$(basename $path)
time=$(ls --time-style=long-iso -l $path | awk '{print $6 " " $7}')
echo hostname,time,name,seq,base64 > ${name}.base64
base64 $path | nl -n ln | sed -E -e 's/\s+/,/' -e 's/^/'$hostname','"$time"','$name'/'>> "${name}.base64"
PowerShell
$hostname = $Env:ComputerName
$name = (Get-Item $path).Name
$time = (Get-Item $path).lastwritetime.ToString("yyyy/MM/dd HH:mm:ss")
$br = [base64formattingoptions]::InsertLineBreaks
[Convert]::ToBase64String([System.IO.File]::ReadAllBytes($path), $br).Split("`r`n") `
| foreach-object -begin {$i=0; "hostname,time,name,seq,base64"} -process { "$hostname,$date,$name,{0},$_" -f ++$i } `
| out-file "${name}.base64"
時間とファイル名は一行目にだけ入れたら良いんじゃないのという話はさておき
ファイルを復元する
PowerShell
$folder = pwd
import-csv $path | % { $name = $_.Name; $time = $_.Time; $_.Base64 } | set txt
[System.IO.File]::WriteAllBytes("$folder\$name", [Convert]::FromBase64String($txt))
Set-ItemProperty "$folder\$name" -name LastWriteTime -value $time