長すぎるパスのファイルを「以前のバージョン」から取り出す方法

NTFSが約 32,767 文字という長いパスを受け入れるようになって久しいですが、2022年10月末時点、いまだに Windows のデフォルト設定は長いパスを許容しないままです

learn.microsoft.com

上記の通り、レジストリをいじれば長いパスが取り扱えるようになる「らしい」のですが(未確認です)、レジストリの変更後再起動が必要なため、環境によっては上記対策を取りにくいこともあろうかと思います

また、長くなりすぎたパスへの対応として上位のフォルダ名を短くする、といった対応を取られることもあるかと思いますが残念ながら「以前のバージョン」の環境ではこの対策は不可能です

ここで、Windows が長いパスへ対応しないというなら wsl の Linux 環境から対象ファイルへアクセスしようと考えたとしても、次は wsl から「以前のバージョン」の環境へどうアクセスするか?という課題が立ちふさがります

そこで本記事では wsl の環境で「以前のバージョン」の環境をマウントする方法についてまとめておきたいと思います

「以前のバージョン」の UNC パス

実は Windows エクスプローラーでも以下のパスへアクセスすることで、「以前のバージョン」のタブを経由することなく「以前のバージョン」のファイルへアクセスすることが可能です

\\サーバ名\フォルダ名\@GMT-yyyy.mm.dd-hh.nn.ss

※ yyyy.mm.dd-hh.nn.ss の部分は以前のバージョン作成日時のGMT時間です

wsl で「以前のバージョン」のパスをマウントする

sudo mount -t drvfs '\\サーバ名\フォルダ名\@GMT-yyyy.mm.dd-hh.nn.ss' /mnt/マウントポイントとして作成したフォルダ名

あとは cp 等でコピーするだけ

マウントしてしまえばあとは普通にコピーするだけです

SharePoint リスト 列の書式設定でリンクを作成する際、リストにある任意の列の値を用いてURLを組み立てる方法

日本語の情報が見つからなかったのでメモ

SharePoint のリストでは列の書式設定としてjson形式でHTMLでいうところのAタグ、いわゆるリンクを作成できますが、以下のように記述することでURL内にリスト内のデータを使用することが可能です

{
  "elmType": "a",
  "attributes": {
    "target": "_blank",
    "href": "='/sites/test/Lists/List15/NewForm.aspx?Source=/sites/test&Title='+[$Title]"
  },
  "style": {
    "position": "relative",
    "display": "block",
    "border": "1px #E7A600 solid",
    "color": "#E7A600",
    "top": "11px",
    "height": "20px",
    "min-height": "20px",
    "width": "80px",
    "text-align": "center",
    "vertical-align": "middle",
    "font-weight": "normal"
  },
  "txtContent": "申し込む"
}

解説

リストにおける列の書式設定でURLリンクを作成する方法は探せばいくらでもあたってくるのでここでは割愛
今回解説するのは href の部分のみ

    "href": "='/sites/test/Lists/List15/NewForm.aspx?Source=/sites/test&Title='+[$Title]"

基本は json 形式でそれぞれの項目を記載しているが、各値部分については「Excelにおける式の構文」が使えるため、=(イコール)ではじめて文字列の連結を+(プラス)を使って行っている
また同じリスト、同じレコード内の他の列の値を使用するには"[$列の内部名]"と書くことでそのレコードにおける対象列の値を参照可能

参考

docs.microsoft.com

MSの

長年悩まされた右クリックするとエクスプローラーが固まる問題に終止符が打てた件

ここ数年、ふと Explorer 内でファイルを右クリックすると Explorer が固まるという事象が続いていた
もともとマウス派ではなくキーボード派だったこともありだましだまし使い続けてきたが、今日ようやくこの問題に終止符が打てたため久しぶりの記事としたい

願わくば同じ問題で困っている人にとって少しの手助けにならんことを

PC環境

現象

だいたい右クリックをする時はファイルをコピーしようとして油断した時なので、固まっても冷静にコマンドプロンプトを開いて copy コマンドを使う、という対応をしていた
あほか

解決方法

  • Windows Search Service を無効化する

スタートメニュー > Windows管理ツール > サービス を開き、Windows Search Service を開く

Windows Search サービスを無効化する
Windows Search サービスを無効化する

即時でサービスを止められなかったためPCを再起動

結果

今のところ(1時間後)快適に右クリック生活が送れています

IIS 匿名認証の際に使用されるユーザをアプリケーションプールで指定したアカウントに設定する

クラシックaspActive Directoryのグループにユーザを追加する処理を書いていたところ、「書き込めません」というエラーになったため検討を開始

ところが調査を開始して早々、アプリケーションプールの実行権限は該当グループにメンバーを追加する権限を持っていることが発覚
これで問題ないはずなのになぜ「書き込めません」になるのか?

さらに調査したところ、Windows Server 2012IISでは(他のバージョンは試してないので不明です)仮想ディレクトリにアプリケーションプールを設定しただけでは、アプリケーションプールで設定した権限で処理が行われるわけではないことが判明

仮想ディレクトリの設定画面内、認証の「機能を開く」→ 匿名認証の「編集」を開いたところ、デフォルトではIUSRが割り当てられていた

ここを「アプリケーションプール ID」に変更することで無事「書き込めません」は発生しなくなったので解決

Sharepoint Frameworkの環境構築にはまった件

この度はじめてSharepointに触れる機会があったのですが、Sharepoint Frameworkの環境構築をしてHello Worldの固定文字列を表示するWebパーツをブラウザに出力するところまでに1日半かかってしまいました

いちばんはまったポイントは、終わってみればNode.jsのバージョンでした
Microsoftさんのこの記事↓にははっきりとバージョンについて書かれているんですけどねorz

SharePoint Framework 開発環境の設定 | Microsoft Docs
https://docs.microsoft.com/ja-jp/sharepoint/dev/spfx/set-up-your-development-environment

最初はDockerの上で環境構築をしていたが…

はじめのうちはこちら↓を参考にさせていただきながらDocker上に環境を構築していました

SharePoint Framework 開発入門 まとめ - SharePoint Developer
https://sharepoint.orivers.jp/sharepoint-framework-dev

ところが、手順通り進めていてもgulp serve後に表示されるブラウザ内でWebパーツを配置したところ、

There was a network problem. This may be a problem with a HTTPS certificate. Make sure you have the right certificate.

と表示されて先に進めませんでした

キャプチャを撮り忘れたんですが、[SPLoaderError.loadComponentError] というタイトルで、https://0.0.0.0:4321/lib/webparts/[Webパーツ名]/loc/en-us.js がLoad出来ない、といったエラーだったと記憶しています
なんらか回避策があるのかもしれませんが自分には解決できず、Dockerによる環境構築を諦めて自PC内にNode.jsをインストールすることにしました

Node.js v12だとgulpでエラーになる…

次はこちら↓を参考にさせていただきながらNode.jsの環境構築をはじめます

SharePoint Framework (SPFx) 開発環境構築 (Windows 10) - 鍋綿ブログ
https://www.micknabewata.com/entry/sharepoint/spfx/devenv-win10


途中までスムーズにさくさくと進んだのですが、gulp trust-dev-cert したところでエラーになってしまいました
内容としてはNode.jsのバージョンが範囲外だ、というものだったかと思います

上に貼ったのと同じURLですが、こちら↓にはっきりとNode.jsはバージョン10.xをダウンロードするよう書かれています

SharePoint Framework 開発環境の設定 | Microsoft Docs
https://docs.microsoft.com/ja-jp/sharepoint/dev/spfx/set-up-your-development-environment


…なのに、ここにたどり着くまでにgulpのバージョンをあげてみたり(3系→4系)、英語のサイトをさまよったり、気が付けば結構な時間が流れていました…

さ迷い歩く中でNode.jsやnpm、gulpといったモダンな開発環境に対する理解はいくばくか深まったので、あながち無駄な時間というわけでもなかったのですが


「すでにNode.jsのLTSバージョンは12系となっていますが、Microsoftさんが提供している @microsoft/generator-sharepoint はNode.js v10系までしか対象としてくれていません」という情報がこの先誰かの助けになるかもしれませんので記事にしておくことにします

Classic ASPのADODBのParameterを使用してnvarchar型のデータを保存する際に使用するTypeは adLongVarWChar

別にClassic ASPに限らないんですが、vbsでもVBAでも、ADODB.CommandをParameter付きで使用し、SQL Serverのnvarchar型に文字化けさせずにデータを保存するためには、ParameterのTypeを adLongVarWChar = 203 にすると文字化けせずにデータが格納できます

ずっとTypeをadVarChar = 200にしたまま、たまにしか発生しない文字化けを個人的に15年くらい放置していた問題なんですが、今日突っ込んで調査したら判明しました
(日本語はほぼ問題なく、中国語等の文字で化けていたため、優先度が低かった)

What is the ADO DataType for nVarchAR(max)
https://social.msdn.microsoft.com/Forums/ja-JP/ac06f814-1814-4861-b2cd-8d5e507a7ee3/what-is-the-ado-datatype-for-nvarcharmax?forum=sqldataaccess

SQL Serverのリンクテーブルを使用してOracleに接続し、取得したデータが文字化けする

前提

Oracle Instant Client を Oracle Installer を使用してインストール、サーバ再起動後、サーバ名:ポート番号/サービス名の接続文字列を使ってリンクサーバを設定し、以下のSQLを使ってデータを取得したところ、日本語部分が文字化けしたので、その解消法を書き残しておく

select * from OPENQUERY ([作成したリンクサーバ], 'SELECT * FROM [スキーマ名].[テーブルまたはビュー]')

解決方法

SQL Serverをインストールしたサーバの環境変数に「NLS_LANG=JAPANESE_JAPAN.JA16SJIS」を設定しサーバを再起動

以上