1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PowerShell なんちゃってクリックワンス Part2(最終更新日付比較)

Last updated at Posted at 2024-07-11

概要

サーバー上のファイルとローカルのファイルの最終更新日を比較して起動するファイルを選別する

要件

①サーバーのファイルが新しいorローカルファイルがない=ダウンロードして起動
②ローカルのファイルが新しい=ローカルファイルを起動

実装

①WEBディレクトリに対象のファイルを配置
②テキストファイルに以下コードを貼り付け.ps1で保存

ps1

$url = "http:///test.xlsm"
$localFilePath = "C:\test\test.xlsm"

#-- 多重起動防止
if((Get-Process|Where-Object{$_.MainWindowTitle -like '*test.xlsm*'}).Count -gt 0)
{
    Exit
}

#-- サーバーファイルのレスポンスを取得
$response = Invoke-WebRequest -Uri $url

#-- 最終更新日を取得
$lastModified = $response.Headers.'Last-Modified'

#-- 日付型に変換
$lastModifiedDate = [DateTime]::ParseExact($lastModified, "ddd, dd MMM yyyy HH:mm:ss 'GMT'", 
    [System.Globalization.CultureInfo]::InvariantCulture, [System.Globalization.DateTimeStyles]::AssumeUniversal)

#-- フォーマットして変数へ格納
$server = $lastModifiedDate.ToString("yyyy-MM-dd HH:mm:ss")

#-- ローカルファイルの存在チェック
$fileExists = (Test-Path $localFilePath)

if($fileExists){
#-- ローカルファイルがある

    #-- フォーマットして変数へ格納
    $local = (Get-ItemProperty $localFilePath).LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss")

    if($server -gt $local){
    #-- サーバーのファイルが新しい場合はダウンロード
        
        Invoke-WebRequest -uri $url -outfile .\test.xlsm

        #-- 終了遅延
      Start-Sleep -s 2

        #-- 
        Write-Host "最新ファイルをダウンロード中" -ForegroundColor White -BackgroundColor DarkCyan

        #-- Web のマークを削除する
      Get-ChildItem -Recurse -File | ?{
        $_ | Get-Item -Stream Zone.Identifier -ErrorAction Ignore;
        } | Remove-Item -Stream Zone.Identifier;

    }else{
    #-- ローカルのファイルが新しい場合はダウンロードしない

        Write-Host "起動中" -ForegroundColor White -BackgroundColor DarkGreen

        }

}else{

    #-- ローカルのファイルがない場合はダウンロード
    Invoke-WebRequest -uri $url -outfile .\test.xlsm

    #-- 終了遅延
  Start-Sleep -s 2

    #-- 
    Write-Host "最新ファイルをダウンロード中" -ForegroundColor White -BackgroundColor DarkCyan

    #-- Web のマークを削除する
  Get-ChildItem -Recurse -File | ?{
    $_ | Get-Item -Stream Zone.Identifier -ErrorAction Ignore;
    } | Remove-Item -Stream Zone.Identifier;

}

#-- VBA起動
try {
    $excel = New-Object -ComObject Excel.Application
    # 表示する・しない            
    $excel.Visible = $false
    # ブックを開く                                     
    $book = $excel.Workbooks.Open([string](Resolve-Path (Get-ChildItem "test.xlsm")))
}
finally {
    # プロセスを開放する
    $excel = $null
    [GC]::Collect()
Exit
}
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?