2020-03-29

 プログラム歴を振り返ると、太古の時代に触れたPC-8001に搭載されていてたN-BASICとZ80のアセンブラが原体験である。その後長年に渡ってプログラミングと縁は殆ど無かったのである。
 大学時代にFORTRANの授業はあったが、体系的に勉強した訳ではない。

 その経歴を踏まえると、現代に生きる筆者がオブジェクト指向を理解せずにPowerShellでプログラミングしても誰が責めようか。

 そして、何となくオブジェクト指向の存在に気付き、GitHubで公開中のFileMaintenanceの致命的な基本設計ミスが遂に修正された。今まで対象ファイル(フォルダ)の処理ループ内では対象をパス文字列として扱っていたのであるが、これをオブジェクトとして各種パス情報はオブジェクトのプロパティとして取り出す事にした。
 今にして見返せば、お手本では正しくオブジェクト指向で設計実装されていたのだが、理解不測の筆者は何故かパスのStringだけを取り出して処理する実装をしていたという馬鹿さ加減に先日までの自分を殴ってやりたい気分である。

 OOPの深淵にちょっとだけ近づいた!

2020-03-16

備忘録。

arcserve UDPはWindows VSSと連携して一貫性のあるバックアップを取得する。
Windows VSSとOracle VSS Writerとは連携して動作するのだが、VSS動作時に以下の様なエラーが出力される。

この原因はOracle Databaseの起動ユーザが
SYSTEM\CurrentControlSet\Services\VSS\Diag
に対して権限を保有していないため。

上記キーに対して、Oracle起動ユーザへアクセス権フルコントロールを付与する

ボリューム シャドウ コピー サービス エラー: ルーチン RegOpenKeyExW(-2147483646,SYSTEM\CurrentControlSet\Services\VSS\Diag,...) の呼び出し中に予期しないエラーが発生しました。hr = 0x80070005, アクセスが拒否されました。

2020-02-26

 先日より、みずほマイレージクラブの改悪通知が皆さまのお手元に届いているかと思う。他行宛振込無料特典数の削減、コンビニATM手数料無料回数制限など困った特典の山盛りであり、筆者も驚いた。

 それでは上級国民向けの「みずほプレミアム」ではどうであろうか。
 みずほ銀行に利益をもたらす上級国民向けなので、それなりの対応を期待していたのだが、裏切られた。

 これでは通常のみずほマイレージクラブと一緒であろう。ますます「みずほプレミアム」の存在価値が減少した。せめてブリリアントは従来と同一で良かったのでは。
 この手のサービスは利用頻度が高いので安直にサービス削減で経費減としているのだろうが、ケチすぎる。
 

ポイント01
みずほ銀行ATM時間外手数料が24時間無料となります。
ポイント02
イオン銀行ATMご利用手数料・時間外手数料が無料となります。
ポイント03
コンビニATM(イーネット・ローソン・セブン銀行)ご利用手数料・時間外手数料も無料となります。

※本サービスについては、2020年3月1日より以下の通り変更予定です。
<変更前>
(2020年2月29日まで)
回数:無制限
対象コンビニATM:イーネット、ローソン、セブン銀行
<変更後>
(2020年3月1日予定)
回数:月4回
対象コンビニATM:イーネットのみ

2020-02-13

 プログラミングはN-BASICとZ80アセンブラしか経験が無いのですが、数十年ぶりにPowerShellを習得。ログメンテナンススクリプトを作成してみた。
 いろいろあって、当初は職場向けを想定していたのだが、全社的にこの手のものをメンテナンスする体制が無い、品質保証を考慮してApache License 2.0でGit Hubへ公開とした。

2020-02-05

 ある会社(特に名を秘す)でGit系のサービスを社内で使える様になったと情報が。

 しかしながら、SIerのある会社で悲惨な事になりそうな気がしてきた。
 
 筆者の専門はinfrastructureであるが、社内の「詳細設計書」はexcel方眼紙にパラメータの羅列が記載されているものが大半である。

 近年のinfrasctructureはCloud化が進みInfrastructure as a codeになっている。「詳細設計書」は構造化されたcodeを美しくexcelへcopy & pasteしているに過ぎない。
 筆者は詳細設計書作成を「写経」と呼んでいる。excelの「詳細設計書」と同内容が環境に設定してあるので、更新が怪しい「詳細設計書」を見るよりも実機、または実機から取り出したパラメータを確認するので十分。
 それらをexcelにcopy&pasteするのは「心を込めて写す」以上の役割は無い。加えてexcelで「1ページに美しく印刷できること」を重視するものだから、レイアウト微調整と印刷とを繰り返して貴重な時間を浪費してしまう。


 Git系を活用するのであれば、 infrastructure as a codeのcodeをgitへ保管、更新があればgitへpushしてcommentを入力すれば良い。これで詳細設計書は不要になる筈なのだが、この様に生産性を向上させるための仕組みの変更は難しいだろう。
  多分にGitとexcelの二重管理になって、生産性が低下すると思われる。

 纏めると、筆者の主張 は2点。

 excel詳細設計書は止める。代わりにgitによる版管理の維持に注力する。

 生まれた時間は要件定義、方式設計、基本設計に活用する。特に基盤では要件定義と方式設計の軽視が見られるので、これらに注力して後工程の生産性向上を狙うべきである。

2020-01-31

PowerShell 5.1の罠の続きです。

コマンドレットCompress-Archiveにはワイルドカードの扱いで問題がある様子。

1)正しい動き
Compress-Archiveでhoge.zipを生成する。
同じhoge.zipの生成を実行すると、既に存在するとしてエラー
-Forceを付加すると、既に存在しても上書き

PS C:\msys64\home\doctor_d\FileMaintenace> Compress-Archive -Path C:\TEST\*.txt -DestinationPath C:\TEST\A\hoge.zip

PS C:\msys64\home\doctor_d\FileMaintenace> Compress-Archive -Path C:\TEST\*.txt -DestinationPath C:\TEST\A\hoge.zip
Compress-Archive : アーカイブ ファイル C:\TEST\A\hoge.zip は既に存在します。既存のアーカイブ ファイルを更新するには、-Update パラメーターを使用してください。既存のアーカイブ ファイルを上書きするには、-Force パラメーターを使用してください。
発生場所 行:1 文字:1
+ Compress-Archive -Path C:\TEST\*.txt -DestinationPath C:\TEST\A\hoge. ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (C:\TEST\A\hoge.zip:String) [Compress-Archive]、IOException
    + FullyQualifiedErrorId : ArchiveFileExists,Compress-Archive

PS C:\msys64\home\doctor_d\FileMaintenace> Compress-Archive -Path C:\TEST\*.txt -DestinationPath C:\TEST\A\hoge.zip -Force

2)ワイルドカードの扱いに失敗する動き。パスにワイルドカード[が含まれている。
パスにワイルドカード[が含まれているとエラー
バッククオート`を1 個ではエラー
バッククオート``を2個にすると成功、hoge.zipが生成される
生成したファイルを上書きさせる事を狙って再度実行するとPowerShellの内部でエラー

見た感じでは、上書きの内部処理で元ファイルを削除する箇所に問題がある様子。
ファイル削除の箇所でエスケープが上手く処理されていない様だ。
そもそも-DesitinationPathの様な出力側でワイルドカードは使わない(複数のファイルに出力する事は無い)ので、標準でワイルドカードを受け付けないLiteralPath扱いするべきなのである。

3)おまけ
Copy-Itemの-Desitination
エスケープ不要で正常動作

Move-Itemの-Desitination
エスケープ必要で正常動作


どうしてこんな複雑な事に....。




PS C:\msys64\home\doctor_d\FileMaintenace> Compress-Archive -Path C:\TEST\*.txt -DestinationPath C:\TEST\[A\hoge.zip -Force
Compress-Archive : パス 'C:\TEST\[A' が存在しないか、または有効なファイル システム パスではありません。
発生場所 行:1 文字:1
+ Compress-Archive -Path C:\TEST\*.txt -DestinationPath C:\TEST\[A\hoge ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (C:\TEST\[A:String) [Compress-Archive]、InvalidOperationException
    + FullyQualifiedErrorId : ArchiveCmdletPathNotFound,Compress-Archive

PS C:\msys64\home\doctor_d\FileMaintenace> Compress-Archive -Path C:\TEST\*.txt -DestinationPath C:\TEST\`[A\hoge.zip -Force
Compress-Archive : パス 'C:\TEST\[A' が存在しないか、または有効なファイル システム パスではありません。
発生場所 行:1 文字:1
+ Compress-Archive -Path C:\TEST\*.txt -DestinationPath C:\TEST\`[A\hog ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (C:\TEST\[A:String) [Compress-Archive]、InvalidOperationException
    + FullyQualifiedErrorId : ArchiveCmdletPathNotFound,Compress-Archive


PS C:\msys64\home\doctor_d\FileMaintenace> Compress-Archive -Path C:\TEST\*.txt -DestinationPath C:\TEST\``[A\hoge.zip -Force

PS C:\msys64\home\doctor_d\FileMaintenace> Compress-Archive -Path C:\TEST\*.txt -DestinationPath C:\TEST\``[A\hoge.zip -Force
Remove-Item : コマンドレットの動的パラメーターを取得できません。指定されたワイルドカード文字パターンは無効です: [A
発生場所 C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Archive\Microsoft.PowerShell.Archive.psm1:182 文字:13
+             Remove-Item -Path $DestinationPath -Force -ErrorAction St ...
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Remove-Item]、ParameterBindingException
    + FullyQualifiedErrorId : GetDynamicParametersException,Microsoft.PowerShell.Commands.RemoveItemCommand


PS C:\msys64\home\doctor_d\FileMaintenace> Compress-Archive -Path C:\TEST\*.txt -DestinationPath 'C:\TEST\``[A\hoge.zip' -Force
Remove-Item : コマンドレットの動的パラメーターを取得できません。指定されたワイルドカード文字パターンは無効です: [A
発生場所 C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Archive\Microsoft.PowerShell.Archive.psm1:182 文字:13
+             Remove-Item -Path $DestinationPath -Force -ErrorAction St ...
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Remove-Item]、ParameterBindingException
    + FullyQualifiedErrorId : GetDynamicParametersException,Microsoft.PowerShell.Commands.RemoveItemCommand


PS C:\msys64\home\doctor_d\FileMaintenace> Compress-Archive -Path C:\TEST\*.txt -DestinationPath "C:\TEST\``[A\hoge.zip" -Force
Remove-Item : コマンドレットの動的パラメーターを取得できません。指定されたワイルドカード文字パターンは無効です: [A
発生場所 C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Archive\Microsoft.PowerShell.Archive.psm1:182 文字:13
+             Remove-Item -Path $DestinationPath -Force -ErrorAction St ...
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Remove-Item]、ParameterBindingException
    + FullyQualifiedErrorId : GetDynamicParametersException,Microsoft.PowerShell.Commands.RemoveItemCommand


PS C:\msys64\home\doctor_d\FileMaintenace> Compress-Archive -Path C:\TEST\*.txt -DestinationPath "C:\TEST\[A\hoge.zip" -Force
Compress-Archive : パス 'C:\TEST\[A' が存在しないか、または有効なファイル システム パスではありません。
発生場所 行:1 文字:1
+ Compress-Archive -Path C:\TEST\*.txt -DestinationPath "C:\TEST\[A\hog ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (C:\TEST\[A:String) [Compress-Archive]、InvalidOperationException
    + FullyQualifiedErrorId : ArchiveCmdletPathNotFound,Compress-Archive


PS C:\msys64\home\doctor_d\FileMaintenace> Compress-Archive -Path C:\TEST\*.txt -DestinationPath 'C:\TEST\[A\hoge.zip' -Force
Compress-Archive : パス 'C:\TEST\[A' が存在しないか、または有効なファイル システム パスではありません。
発生場所 行:1 文字:1
+ Compress-Archive -Path C:\TEST\*.txt -DestinationPath 'C:\TEST\[A\hog ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (C:\TEST\[A:String) [Compress-Archive]、InvalidOperationException
    + FullyQualifiedErrorId : ArchiveCmdletPathNotFound,Compress-Archive



PS C:\msys64\home\doctor_d\FileMaintenace> Copy-Item -Path C:\TEST\*.txt -Destination C:\test\[A -Force

PS C:\msys64\home\doctor_d\FileMaintenace> Copy-Item -Path C:\TEST\*.txt -Destination C:\test\[A -Force


PS C:\msys64\home\doctor_d\FileMaintenace> Move-Item -Path C:\TEST\*.txt -Destination C:\test\[A -Force
Move-Item : 指定されたワイルドカード文字パターンは無効です: [A
発生場所 行:1 文字:1
+ Move-Item -Path C:\TEST\*.txt -Destination C:\test\[A -Force
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Move-Item], WildcardPatternException
    + FullyQualifiedErrorId : RuntimeException,Microsoft.PowerShell.Commands.MoveItemCommand


PS C:\msys64\home\doctor_d\FileMaintenace> Move-Item -Path C:\TEST\*.txt -Destination C:\test\`[A -Force
Move-Item : 指定されたワイルドカード文字パターンは無効です: [A
発生場所 行:1 文字:1
+ Move-Item -Path C:\TEST\*.txt -Destination C:\test\`[A -Force
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Move-Item], WildcardPatternException
    + FullyQualifiedErrorId : RuntimeException,Microsoft.PowerShell.Commands.MoveItemCommand


PS C:\msys64\home\doctor_d\FileMaintenace> Move-Item -Path C:\TEST\*.txt -Destination C:\test\``[A -Force

PS C:\msys64\home\doctor_d\FileMaintenace> Move-Item -Path C:\TEST\*.txt -Destination C:\test\``[A -Force

2020-01-29

Windowsのパス文字列扱いを観察してみたので、備忘録。

パス文字列長は260文字以下。259文字まで。

PS C:\01234567890123456789012345678901234567890123456789\01234567890123456789012345678901234567890123456789\01234567890123456789012345678901234567890123456789\01234567890123456789012345678901234567890123456789> new-item -ItemType file -Path 12345678901234567890123456789012345678901234567890123
new-item : パス 'C:\01234567890123456789012345678901234567890123456789\01234567890123456789012345678901234567890123456789\01234567890123456789012345678901234567890123456789\01234567890123456789012345678901234567890123456789\1234567890123456789012345
6789012345678901234567890123' の一部が見つかりませんでした。
発生場所 行:1 文字:1
+ new-item -ItemType file -Path 123456789012345678901234567890123456789 ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (C:\012345678901...901234567890123:String) [New-Item], DirectoryNotFoundException
    + FullyQualifiedErrorId : NewItemIOError,Microsoft.PowerShell.Commands.NewItemCommand


PS C:\01234567890123456789012345678901234567890123456789\01234567890123456789012345678901234567890123456789\01234567890123456789012345678901234567890123456789\01234567890123456789012345678901234567890123456789> new-item -ItemType file -Path 1234567890123456789012345678901234567890123456789012

ここで、フォルダのC:\0...89\までで3文字 + 51文字 x4 = 207文字
作成したファイルが52文字である。


PS C:\01234567890123456789012345678901234567890123456789\01234567890123456789012345678901234567890123456789\01234567890123456789012345678901234567890123456789\01234567890123456789012345678901234567890123456789> Get-ChildItem | % {$_.FullName} | % {$_.Length}
259

さて、260文字制限は、フルパスの文字数なのでネットワークドライブとしてマウントすると、さらに深い階層に出来る。

 例えば、C:\01234567890123456789012345678901234567890123456789\01234567890123456789012345678901234567890123456789\01234567890123456789012345678901234567890123456789\01234567890123456789012345678901234567890123456789をネットワークドライブZ:にマウントして、Z:に長いパス名のフォルダを格納する事が出来る。
 無論、260文字を超えるパスのフォルダやファイルはC:から始まるパス表記を指定して削除する事は出来ない。

自己紹介

自分の写真
東京都, Japan
憂鬱な凍死家です。こちらではmixiとは異なり固めの話題中心です。

Total Page View

Categories

Powered by Blogger.

Popular Posts

Blog Archive