Open6

base64の取り扱い

多田氏多田氏

https://junjun777.hatenablog.com/entry/20140428/powershell_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)
多田氏多田氏

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