通話可能なSIMを15分で用意できる!? eSIMを物理SIMにする9esimを試した

eSIMを物理SIMにする5berというのがあるらしいと調べてみると、扱っていた会社の状況がいまいちで入手できなくなっていた。

似たようなのがあるだろうと、探してみるといくつか出てきた。

9esimというのが入手性がよさそうだなぁ、と

どういったソフトウェアでeSIM情報を書き込むのかな?と調べてみると

Windows/MacOS/Linuxだとgithubで公開されてる「MiniLPA」というソフトウェアで書き込める

AndroidだとNEKOKOLPA ( github / GooglePlayStore ) と 9eSIM (NEKOKOLPAの9esim版)

iOSだとNEKOKOLPA というのがある

で・・・調べていくと、eSTK.me という会社が主体で開発しているオープンソースのOpenEUICC ( githubのミラー )というのが 制約事項の少ないeSIMを物理SIM化できるものらしい

いろいろ調べてtwitterで発言してたら上記のNEKOKOLPAなどに日本語翻訳をつけたRe*Indexさんから「docomoのEIDに対応した物理eSIM「eSTK.me」」というまとめを教えてもらった


EUICCとは?

EUICCとは Embedded Universal Integrated Circuit Cardの略称となるのだが、そもそもの「UICC」というのは「電話番号を特定するために固定のID番号が記録されたICカード」のことを指している。ユーザと特定するためのモジュールということでUIM(User Identity Module)と呼ばれることもあり、これを一般的にSIMカードと呼んでいる。

EmbeddedなUICCというのがどういう状態をさすかといえば、機器などに組み込まれているUICCということで、カードとして取り外せないSIMカードという意味合いになる。

じゃあ、eSIMというのは何なのか、ということになるのだが Embedded UICC Remote Provisioning、つまりリモートから書き換え可能なEUICCをeSIMと称している形になる。

Embedded UICC Remote Provisioningの詳しい仕組みについてはNTTドコモテクニカルジャーナル VOL22. No2(2014年7月号)の「Embedded UICC Remote Provisioningの標準化状況 PDFファイルダウンロード」参照のこと

eSIM情報を書き込める物理SIMとは?

たぶん、いくつか商品があるのだと思われるのだが、安価で提供されているものはeSTK.me社が主体となって開発しているOpenEUICC をベースとしているようだ。

OpenEUICCはAndroid端末上に直接組み込んで使うもので、物理SIMにeSIM情報を書き込めるやつはEasyEUICCというバリエーションという扱いになっている。

物理SIM側に搭載されているチップ上にはSIM ToolKit(STK)と呼ばれるアプリケーションが導入されており、そこにeSIM情報などを書き込んで使えるようにする形となる。

5berや eSIM.me といった製品では各ベンダ固有のアプリケーションでeSIM情報を書き込む必要がありしかも書き換え回数などが有料で販売されていたりする。

それに対してeSTK.meのEasyEUICCベースの製品はそのような制限はなく、自由に操作を行うことができ、また、たとえ会社がなくなったとしても、管理ソフトウェアは単体で動作するように作られているため、継続性に問題はない

EasyEUICCベースの製品を入手する

eSTK.me社のEasyEUICCをベースとした製品を入手するにはいろいろ手段はある

・オリジナルのeSTK.me社から買う

2025年4月28日時点では「SmartCard(2025)」として「ESTKme-AIR」と「ESTKme-ESS(Essentail)」の2種類がある

ESTKme-ESS(Essential)はV3と呼ばれるバージョンで、カード上の記憶域が440KBあり容量がある限りは書き込めるもの。

ESTKme-AIRはeSIMのプロファイルを2個まで書き込める制限版だが、記憶領域自体は440KB用意されている。

・9eSIMから買う

9eSIMからは現状、V2とV3の2種類が出ている。また、パソコン上でeSIM情報を書き込むためのアダプタも販売しているので同時に購入してもよいかもしれない。

9eSIM V2はeSIMプロファイルが50個まで保存できる

9eSIM V3もeSIMプロファイルが50個まで保存できるが、記憶域が1.5MBに拡張されている。

・aliexpressで探す

aliexpressでEasyEUICCを検索するといろいろ出てくる

その中で出てきた「Open Source ESIM Physical Card EasyEUICC Unlimited Write Storing 15 Phone Numbers for IPhone and Android」2080円というのを買ってみた

使ってみた

aliexpressで買ったやつが届いた

9eSIM V0と書いてありました。

取り外して手持ちのAndroidで空いていたOPPO Reno A(Qualcomm Android 9)に入れて 9eSIM-nLPAアプリを起動してみます

認識できてない

GRATINA KYV48(MediaTek Android11)…認識できない
Android One S7(Qualcomm Android11)…認識できた
Xiaomi 12 Lite(Qualcomm Android14)のSIMスロット2は認識できない、SIMスロット1は認識できた

あと、富士通Lifebook U938/S LTEモデルのSIMスロットだとどうなのかな?と試してみたけど、書き換えアプリからは認識できなかった

Androidは、QualcommのAndroid 11以降じゃないと使えないのかなぁ?という印象。

povoでの設定手順例

povoでeSIM契約をしてみた。(招待コード M9Y5NL3G )

手続きして以下の画面までもっていく

「eSIMの設定」をクリックすると、下記のようにQRコードが表示される

QRコードを真ん中においてスクリーンショットを取得

9eSIM-nLPAアプリを起動

+をクリック

「カメラで撮影」か「画像ファイルを指定」を選べるので適切なほうをクリックしてQRコードを読み込み、「SM-DP+Address」と「Matching ID」が表示されることを確認

SM-DP+AddressとMatching IDが表示されている状態で「ダウンロード」ボタンを押すとeSIMプロファイルのダウンロード操作が始まり、しばらくすると、ダウンロードするべきプロファイル情報を表示してくる。

こちらで「ダウンロード」をクリックするとSIMへのeSIM情報書き込みが開始される

ダウンロードが完了

有効ボタンをクリックして戻ると以下のように情報が保存されていることがわかる

一度書き込んだらあとはほかの端末に差し込んでもこのeSIM情報が使えるようになった。

今回のpovo契約はマイナンバーカードを使って行ったのだが20時35分にpovoの会員登録から手続きはじめて20:50にはSIMへの書き込みが終わるという劇的短時間発行でした。

MSI Cyborg14 A13V で使える 小型GaN アダプターを買った

GTX3050以上のGPUが乗ったノートパソコンで持ち運びする、という要求事項があり、いろいろ選定した結果、14インチサイズで約20万円となる MSI Cyborg14 A13V を購入した。

Cyborg-14-A13VF-4164JP
CPU: Intel Core i7-13620H
GPU: NVIDIA GeForce RTX 4060 Laptop GPU 8GB GDDR6
メモリ: 16GB(8GB 2枚)
ディスプレイ: 14インチ 1920 x 1200

モンハンベンチマークを動かすと「快適にプレイできます SCORE 13924 平均:81.59FPS」と出た

とりあえずはいい感じで使えそうではある。

で、こいつの電源はDELTA ADP-120VH D という20.0V 6.0A出力の ACアダプタで、コネクタの口は4.5mm x 3.0mm のものだった。

このアダプタ 138mm x 68.5mm x 24.5mm(約232ccの容積) と小さくはない大きさ

代替として使えるものとして実績があるものを探すと DELTAのブランド Innergie が出しているInnergie T18(180G)というのがあった。

Amazonで7980円、セールだと6800円ぐらい、という値段なのだがT18 の大きさは 152mm x 72.5mm x 22.5mm で容積は約248cc と、薄くはなっているが元のより逆に大きくなっている。

もっと小さいのを探してみるが、良さそうなものはない。

電源コネクタが 4.5mm x 3.0mm というのは物理形状としては hpノートで使用されている水色のコネクタも同じである。

試しにType-Cコネクタからhpノート用電源を取るアダプタを指してみると、物理的にはぴったり。ただ、うちにあるのは65W用と100W用で、電圧計付けた状態で120W要求のこいつにさすと電源供給が止まったので、うまくはいかない模様。

ASUS用4.5mm x 3.0mm のアダプタは、ASUS/MSI用と書かれることもあるようで、使えそうな雰囲気があるので、両方を捜索したところ、発見

CORSULINというブランドのGaNアダプタでとりあえずメーカページもある。

aliexpressでは約7千円+送料で販売していた。

セラーとチャットでやり取りして、hp用じゃなくてasus用のほうがいいんじゃね?ということだったのでこいつを購入

約1週間で到着

アダプター本体としまう袋が付いていました

底面に書いてあるスペックはこちら

型番としては CP024U というらしいのだが、このCP024Uというモデル名、今回購入した200Wモデルのほかに 240Wモデル でも同じモデル名が書かれていたとのこと

うーん・・・ここに書いてあるワット数を信じてもいいんだろうか??

とりあえずMSI Cyborg 14 A13V純正のADP-120VH D 20V6A 120Wと CP024U 20V10A 200Wの大きさ比較はこの通り

だいぶ小型化できています。

プラグが折りたためないという点が残念なぐらい

実用上はいまのところ問題は出ていません。

自宅据え付け用として純正品をつなげっぱなしにして

外出時の持ち運び用として短時間使う、という使いかたになっています。

今回このアダプタを買ったセラーではほかにもDell Alianware、Lenovo Legion、ASUS ROG向けのGaNアダプターも販売しています。

小型のアダプタを探してる人にはちょうどいいかもしれません。

Windows Server 2025で作ったActive Directory環境でldapsを使えるようにする

Windows Server 2025でActive Directory環境を作ってみた。

フォレスト/機能レベルはWindows Server 2016とした

この環境に対してAlmaLinux 9で作ったサーバから ldapsearchコマンドを実行したところ「ldap_bind: Strong(er) authentication required (8)」というエラーになった

# ldapsearch -x -D "cn=administrator,cn=users,dc=adsample,dc=local" -w "パスワード" -H ldap://192.168.122.10 -b "CN=testuser1,CN=Users,DC=adsample,dc=local" -s base
ldap_bind: Strong(er) authentication required (8)
        additional info: 00002028: LdapErr: DSID-0C0903CB, comment: The server requires binds to turn on integrity checking if SSL\TLS are not already active on the connection, data 0, v65f4
#

セキュリティ強化のためLDAP署名もしくはLDAPSに対応していないとダメになったようだ

[AD管理者向け] 2020 年 LDAP 署名と LDAP チャネルバインディングが有効化。確認を!

じゃあ、とldapsでアクセスしてみるがエラー

# ldapsearch -x -D "cn=administrator,cn=users,dc=adsample,dc=local" -w "パスワード -H ldaps://192.168.122.10 -b "CN=testuser1,CN=Users,DC=adsample,dc=local" -s base
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
#

デバッグモードで接続のテストだけ行ってみる

# ldapsearch -x -d -1 -H ldaps://192.168.122.10
ldap_url_parse_ext(ldaps://192.168.122.10)
ldap_create
ldap_url_parse_ext(ldaps://192.168.122.10:636/??base)
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP 192.168.122.10:636
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_host: Trying 192.168.122.10:636
ldap_pvt_connect: fd: 3 tm: -1 async: 0
attempting to connect:
connect success
TLS trace: SSL_connect:before SSL initialization
tls_write: want=302 error=Connection reset by peer
TLS trace: SSL_connect:error in SSLv3/TLS write client hello
TLS: can't connect: .
ldap_err2string
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
#

証明書が設定されてないようだ

確認のためopenssl s_clientでも接続を試みる

# openssl s_client -connect  192.168.122.10:636
Connecting to 192.168.122.10
CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 302 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
This TLS version forbids renegotiation.
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
#

接続できない

DELLのサイトに「Active Directory統合用にLDAPSを構成する方法」という記事があって、それがそのまま使えた

まず、Active Directoryサーバにログインして、「ldp.exe」を実行し、接続先としてドメイン名、ポート389、SSLチェックは無しを指定して接続を試みる

これはldapでの接続テストとなる。

下記のように情報が取れれば問題ない

次にldapsでの接続をテストするため、SSLにチェックを入れ、ポート636で接続する

接続ができない、というエラーとなった。

このため、証明書の作成が必要、ということになる。

作成にはPowerShellから「New-SelfSignedCertificate -DnsName adtest.adsample.local,adtest -CertStoreLocation cert:\LocalMachine\My」を実行する

-DnsNameの後ろは、Active DIrectoryサーバのFQDNとショートホスト名の2種類をカンマ区切りで指定する

これを実行すると「certlm.msc」の[個人]-[証明書]に証明書が発行される

注意点としては、証明書の有効期限が1年間となっているので、1年以内に更新する必要がある、という点。

期間を変更する場合、New-SelfSignedCertificateの-NotAfterオプションに終了日を指定する。

試してないがおそらく 「-NotAfter (Get-Date).AddMonths(36)」で3年間が作れるのでは?

この証明書を右クリックメニューのコピーをして

[信頼されたルート証明機関]-[証明書]にペースト

再度 ldp.exeから、ポート636, SSLチェックありで接続を試みて接続に成功することを確認

再びLinux側に戻って、まずはopenssl s_clientでの確認

# openssl s_client -connect  192.168.122.10:636
Connecting to 192.168.122.10
CONNECTED(00000003)
Can't use SSL_get_servername
depth=0 CN=adtest.adsample.local
verify error:num=18:self-signed certificate
verify return:1
depth=0 CN=adtest.adsample.local
verify return:1
---
<略>
    Start Time: 1744940383
    Timeout   : 7200 (sec)
    Verify return code: 18 (self-signed certificate)
    Extended master secret: no
    Max Early Data: 0
---
read R BLOCK
^C
#

証明書が設定されたことを確認できた。

改めてldapsearchを実行して、情報が取得できることを確認した

# ldapsearch -x -D "cn=administrator,cn=users,dc=adsample,dc=local" -w "パスワード" -H ldaps://192.168.122.10 -b "CN=testuser1,CN=Users,DC=adsample,dc=local" -s base
# extended LDIF
#
# LDAPv3
# base <CN=testuser1,CN=Users,DC=adsample,dc=local> with scope baseObject
# filter: (objectclass=*)
# requesting: ALL
#

# search result
search: 2
result: 32 No such object
matchedDN: CN=Users,DC=adsample,DC=local
text: 0000208D: NameErr: DSID-0310028F, problem 2001 (NO_OBJECT), data 0, best
 match of:
        'CN=Users,DC=adsample,DC=local'


# numResponses: 1
#

Proxmoxで作った仮想マシンのsnapshotはどうやって見えるのか?

Proxmoxで仮想マシンを作った場合、仮想マシンのsnapshotの作られ方が仮想マシンを置く場所(データストア)によって異なっている。

zfsについては簡単に確認できたが、それ以外についてどうなるのかを確認した。

まず、proxmoxのWeb UIからスナップショットを作成した

これをコマンドで確認していく

まず、Proxmox VE側のコマンドで仮想マシンにsnapshotがあるかどうかは「qm listsnapshot <VMID>」を実行して確認できる。これは各ファイルシステムで共通となる。

root@pve3:~# qm listsnapshot 103
`-> test                        2025-04-17 15:19:16     no-description
 `-> current                                            You are here!
root@pve3:~#

次に各ファイルシステムごとにそれぞれ確認していく手法が違う。

ZFSの場合

例えばzfsの場合であれば 「zfs list -t snapshot」で確認できる。

root@pve3:~# qm listsnapshot 101
`-> zfs-test-snap               2025-04-17 15:39:18     no-description
 `-> current                                            You are here!
root@pve3:~# zfs list -t snapshot
NAME                                     USED  AVAIL  REFER  MOUNTPOINT
rpool/data/vm-101-disk-0@zfs-test-snap     0B      -   139K  -
rpool/data/vm-101-disk-1@zfs-test-snap     0B      -  22.8G  -
rpool/data/vm-101-disk-2@zfs-test-snap     0B      -  22.1M  -
rpool/data/vm-101-disk-3@zfs-test-snap     0B      -  85.2K  -
root@pve3:~#

NFSの場合

NFSの場合、仮想マシンをqcow2形式で作成した場合のみsnapshot作成が可能となる。

まず仮想マシンの設定を確認

root@pve3:~# qm config 105
agent: 1
boot: order=sata0;ide0;ide2;net0
cores: 2
cpu: x86-64-v2-AES
ide0: none,media=cdrom
ide2: none,media=cdrom
machine: pc-i440fx-9.2+pve1
memory: 2048
meta: creation-qemu=9.2.0,ctime=1744345484
name: wintest3-nfs
net0: e1000=BC:24:11:FD:D4:F3,bridge=vmbr0,firewall=1
numa: 0
ostype: win10
parent: nfs-snap
sata0: ontap:105/vm-105-disk-0.qcow2,size=40G
scsihw: virtio-scsi-single
smbios1: uuid=7a3e58d8-be9e-4e03-a040-bd1635aa3dfe
sockets: 1
vmgenid: f361fff2-f474-4260-99ac-586c42db009b
root@pve3:~# qm listsnapshot 105
`-> nfs-snap                    2025-04-17 15:39:29     no-description
 `-> current                                            You are here!
root@pve3:~#

該当する領域をlsコマンドで確認

root@pve3:~# ls -l /mnt/pve/ontap/images/105
total 13607536
-rw-r----- 1 root root 45504004165 Apr 17 15:36 vm-105-disk-0.qcow2
root@pve3:~#

見た目には1ファイルしかないように見える。

このファイルに対して「qemu-img snapshot -l ファイル名」を実行するとsnapshotが作成されているかどうかがわかる。

root@pve3:~# qemu-img snapshot -l /mnt/pve/ontap/images/105/vm-105-disk-0.qcow2
Snapshot list:
ID      TAG               VM_SIZE                DATE        VM_CLOCK     ICOUNT
1       nfs-snap              0 B 2025-04-17 15:39:29  0000:00:00.000          0
root@pve3:~#

cephの場合

cephの場合、rbdコマンドのオプションでいろいろ指定していくのだが、確認がちょっとめんどい

まずは、仮想マシンの設定を「qm config <VMID>」を実行して確認する。

root@pve3:~# qm config 103
agent: 1
boot: order=scsi0;ide2;net0
cores: 2
cpu: x86-64-v2-AES
ide2: none,media=cdrom
memory: 2048
meta: creation-qemu=9.2.0,ctime=1744338514
name: linux2-ceph
net0: virtio=BC:24:11:3A:D1:9E,bridge=vmbr0,firewall=1
numa: 0
ostype: l26
parent: test
scsi0: cephpool:vm-103-disk-0,iothread=1,size=40G
scsihw: virtio-scsi-single
smbios1: uuid=37f0d81e-3ed1-417a-9a10-3d8f556e3b37
sockets: 1
vmgenid: 0ea7ac3f-7b05-49d0-90c0-fbba87cc63ae
root@pve3:~# qm listsnapshot 103
`-> test                        2025-04-17 15:19:16     no-description
 `-> current                                            You are here!
root@pve3:~#

scsi0の行にある「cephpool」が使用しているデータストア名となる。

Ceph RDBが使用しているOSD Pool名を「ceph osd pool ls」を実行して確認する

root@pve3:~# ceph osd pool ls
.mgr
cephpool
cephfs_data
cephfs_metadata
root@pve3:~#

cephfs_dataとcephfs_metadataはCeph FSのほうで使っているデータで、仮想マシンをおくデータストアはcephpool のほうとなる。

cephpoolにある仮想マシン用のディスクを「rbd ls cephpool」で確認する

root@pve3:~# rbd ls cephpool
vm-103-disk-0
root@pve3:~#

この仮想マシンについて、snapshotが作成されているかは「rbd snap ls cephpool/<仮想ディスク名>」で確認する

root@pve3:~# rbd snap ls cephpool/vm-103-disk-0
SNAPID  NAME  SIZE    PROTECTED  TIMESTAMP
    10  test  40 GiB             Thu Apr 17 15:19:16 2025
root@pve3:~#

PowerShellでファイルの詳細情報をとる

excelやwordファイルのプロパティを見ると「詳細」タブにいろいろ情報が入っている。

これをPowerShellでファイル情報を収集する際に載せれるように調査した。

面倒なのがPowerShellの標準機能では収集できず、Shell.Application を使って収集するのだが、ストレートに各ファイルの情報をとるのではなく、そのファイルが置いてあるフォルダ情報のなかから取得する、という手法をとる必要がある。

前回作った「PowerShellを使ってドロップしたフォルダ内にあるファイル一覧をテキストファイルに保存する」を修正したものがこちら

# ドラッグされたフォルダの中にあるファイル一覧をつくるやつ
#
# 使い方
#  1. このファイルを保存する
#  2. このファイルのショートカットを作成する
#  3. ショートカットのプロパティを開き"リンク先"の項目の先頭に「powershell.exe -NoProfile -ExecutionPolicy RemoteSigned -File 」をつけて保存
#  4. 作成されたショートカットの上に、フォルダをドロップすると、ウィンドウが開いて確認される
#  5. 作成するファイルリストの保存ファイル名を指定する
#  6. 出力される
#
$Args | foreach{
    echo $_.GetType()
    $searchdir = Get-Item -LiteralPath $_
}

Write-Host $searchdir.FullName "のファイル一覧を作成します"
pause

$shell = New-Object -COMObject Shell.Application

# https://pg-note.com/archives/1144 より
# 必要なアセンブリを読み込む
Add-Type -AssemblyName System.Windows.Forms 
$dialog = New-Object Windows.Forms.SaveFileDialog 

$dialog.Title = "CSVファイルの保存" 
$dialog.Filter = "テキストファイル(*.txt)|*.txt|csvファイル(*.csv)|*.csv|全てのファイル|*.*" 
$dialog.InitialDirectory = [Environment]::GetFolderPath("MyDocuments")
$dialog.FileName = $searchdir.Name

$ret = $dialog.ShowDialog() 
$outputfile=$dialog.FileName

# CSV出力向けの処理
$results=@()
$linecount=0
#


if ($ret -eq "OK"){
    Write-Host ("保存するファイル名、" + $outputfile) 

    # ディレクトリの検索 start
    Get-ChildItem -Recurse $searchdir -Attributes Hidden,System,Archive,ReadOnly,Normal,Compressed,SparseFile| ForEach-Object {
    $filename=$_.FullName
    $fileobject=$_

        if( !$_.PSIsContainer ){
            Write-Host $filename
            
            # CSV向け処理 start
            $output = New-Object -TypeName PSObject
            $output | Add-Member -MemberType NoteProperty -Name "ファイル名" -Value $filename
            $output | Add-Member -MemberType NoteProperty -Name "作成日" -Value ($fileobject.CreationTime|Get-Date -Format "yyyy-MM-dd HH:mm:ss")  # $fileobject.CreationTimeUtc
            $output | Add-Member -MemberType NoteProperty -Name "サイズ" -Value $fileobject.Length
            $output | Add-Member -MemberType NoteProperty -Name "ハッシュ(sha256)" -Value (Get-FileHash -LiteralPath $filename -Algorithm SHA256).Hash

            $Getfolder = $shell.Namespace($fileobject.DirectoryName)
            $Getfile = $Getfolder.ParseName($fileobject.Name)
            $output | Add-Member -MemberType NoteProperty -Name "タイトル" -Value $Getfile.ExtendedProperty('System.Title')
            $output | Add-Member -MemberType NoteProperty -Name "件名" -Value $Getfile.ExtendedProperty('System.Subject')
            #$output | Add-Member -MemberType NoteProperty -Name "作成者" -Value ([string]$Getfile.ExtendedProperty('System.Author'))
            #  なぜか直接出力すると System.strings になるので、 string に変換
            $tmps=[string]$Getfile.ExtendedProperty('System.Author')
            $output | Add-Member -MemberType NoteProperty -Name "作成者" -Value $tmps
            $output | Add-Member -MemberType NoteProperty -Name "前回保存者" -Value $Getfile.ExtendedProperty('System.Document.LastAuthor')
            $output | Add-Member -MemberType NoteProperty -Name "コンテンツの作成日時" -Value $Getfile.ExtendedProperty('System.Document.DateCreated')
            $output | Add-Member -MemberType NoteProperty -Name "前回保存日時" -Value $Getfile.ExtendedProperty('System.Document.DateSaved')
            $output | Add-Member -MemberType NoteProperty -Name "前回印刷日" -Value $Getfile.ExtendedProperty('System.Document.DatePrinted')
            #$output | Add-Member -MemberType NoteProperty -Name "ファイル所有者" -Value $Getfile.ExtendedProperty('System.FileOwner')
            #$output | Add-Member -MemberType NoteProperty -Name "ファイル作成日時" -Value $Getfile.ExtendedProperty('System.DateCreated')
            #$output | Add-Member -MemberType NoteProperty -Name "ファイル更新日時" -Value $Getfile.ExtendedProperty('System.DateModified')
            #$output | Add-Member -MemberType NoteProperty -Name "ファイルアクセス日時" -Value $Getfile.ExtendedProperty('System.DateAccessed')

            $results+=$output
            $linecount++
            # CSV向け処理 end

            if(($linecount % 1000) -eq 0 ){
                $results | Export-Csv $outputfile -Encoding UTF8 -NoTypeInformation -Append -NoClobber
                $results = @()
            }
        }
    }
    # ディレクトリの検索 end

    $results | Export-Csv $outputfile -Encoding UTF8 -NoTypeInformation -Append -NoClobber
} else {
    Write-Host ("キャンセル") 
}


pause