テックブログ

インフラエンジニア3年目の中の人が備忘録残すブログ

Windows Powershellを使用して日時で作成されるフォルダを圧縮するシェルを作成してみた

業務上で日時フォルダを圧縮したいとの要件が出たため作成した時のメモを残します。

 

今回条件が類似していたのでhagure_m様のサイトを参考に少し変更を加えPowershellを作成しております。

 

1. Powershellスクリプト仕様
2. スクリプト内容
3. Compress-Archiveについて

 

Powershellスクリプト仕様


日時で新規フォルダが作成されその中にバックアップが置かれる。

そのフォルダの最終更新日付が2週間以前のフォルダだったら、同一フォルダ名.zipを作成する。

その後元のフォルダは削除し、結果はログに残す。

#LOG Function
function LOG ($SIV, $MSG){
 "{0}:{1}:{2}" -f (Get-Date),$SIV, $MSG | Out-File -Append -FilePath $LOGFILE -Encoding default
 }

#info
$PS = 'C:\Windows\System32\WindowsPowershell\v1.0\powershell.exe'
$BKUPDIR = 'C:\Backup'
$LOGDIR = "C:\logs"
$LOGFILE = '$LOGDIR\Commpress_$Date.log'
$EXEC_DT = Get-Date
$BEF_DT = $EXEC_DT.AddDays(-15)
$Date = $EXEC_DT.ToString('yyyyMMdd')

$Folder_List = Get-ChildItem -Path $BKUPDIR -Recurse -Directory |
Where-Object {$_.LastWriteTime -lt $M_DT -and $_.Attributes -ne "Compressed"}

#Counts
$i = 0

#処理分岐
LOG "INF" "Commpress Start"

foreach($Folder in $Folder_List)
{
 $Folder_FULL = $Folder.FullName
 $Folder_NAME = [System.IO.Path]::GetFileNameWithoutExtension($Folder.Name)
 $ZIP_NAME = $Folder_FULL+".zip"
 LOG "INF" "Tagert Folder-$Folder_FULL / zip-$ZIP_NAME"
 if($Folder.PSContainer)
 {
   try{
     Compress-Archive -Path $Folder_FULL -DestinationPath $ZIP_NAME
     LOG "INF" "$($Folder.FullName) Commpressed"
     Remove-Item -Path $Folder_FULL -Recurse -Force
     LOG "INF" "$($Folder.FullName) removed"
     $i++
    }
    catch {
     LOG "ERR" "Error. $($Folder.FullName) Commpress Failed"
     $ERRString = $error[0] |Out-String LOG "ERR" "$ERRString"
     }
  }
}

LOG "INF" "Compressed END. FolderCounts:$($i)" 

 

Compress-Archiveについて


Compress-ArchiveコマンドはPowershell5.0以上で利用できるコマンドです。

Windows2012の環境では利用できませんのでご注意ください。

詳しい情報については以下Microsoftのサイトをご確認ください。

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.archive/compress-archive?view=powershell-7.1

VritualBox,Vagrantインストール済みWin10環境にCentOS8をインストールする方法について

Windows10環境にVirtualBOX,Vagrantを利用してCentOS8をインストールしていきます。

VirtualBoxVagrantについてはインストールされていることが前提である記事となります。

 

CentOS8のインストール方法について

Powershellもしくはコマンドプロンプトを使用し、CentOS8をインストールしていきます。

Cドライブ直下にVagrantフォルダを作成するディレクトリを移動します。

PS C:\>mkdir vagrant
PS C:\>cd vagrant

次にvagrant box addコマンドを使用し、CentOS8のBoxをダウンロードしていきます。

Enter your choice:の表示画面で5を入力し、Enterを押します。

PS C:\vagrant>vagrant box add generice/centos8
==> box: Loading metadata for box 'generic/centos8'
     box: URL: https://vagrantcloud.com/generic/centos8
 This box can work with multiple providers! The providers that it
 can work with are listed below. Please review the list and choose
 the provider you will be working with.
 1) docker
 2) hyperv
 3) libvirt
 4) parallels
 5) virtualbox
 6) vmware_desktop

Enter your choice: 5

 

以下のように表示されていれば問題なくBoxがダウンロードできています。

==> box: Successfully added box 'generic/centos8' (v3.2.6) for 'virtualbox'!

 

ダウンロード完了後以下のコマンドを実行して、Vagrantfileを作成します。

PS C:\vagrant>vagrant init generic/centos8

 

Vagrant fileの設定

エクスプローラーからvagrantフォルダにある、Vagrantfileを以下のように編集し、保存します。

■推奨設定

# 35行目に記載のある以下行の#コメントアウトを外してIDアドレスを変更します。

#【修正前】

# config.vm.network "private_network", ip: "192.168.33.10"

#【修正後】

 config.vm.network "private_network", ip: "192.168.33.x"

#51行目にホスト名を追記します。

 config.vm.hostname = 'example.localhost'

 

■必要であれば設定する

# 46行目に記載のある以下行の#コメントアウトを外してホストOSの./workを共有ディレクトに設定

#【修正前】

# config.vm.synced_folder "../data", "/vagrant_data"

#【修正後】

 config.vm.synced_folder "./work", "/Oracle"

 

  #メモリのスペック変更が必要であれば57行目をコメントアウトを外してメモリ容量を修正します。(MB表記)

#【修正前】 # vb.memory = "1024"

#【修正後】 vb.memory = "2048"

 

仮想マシンの起動とSSHでの接続確認

Vagrantfileの保存を確認したところで、いよいよ仮想マシンの起動とSSHで接続を確認します。

#仮想マシンの起動

PS C:\vagrant up #SSH接続

PS C:\vagrant ssh

[vagrant@example.localhost ~]$

 

ターミナル画面が表示されれば問題なく接続ができている状態です。