情報技術」カテゴリーアーカイブ

MAASの用語と設定のメモ

MAASには複数の単位(Fabricなど)があります。
本体にも説明は記述されているのですが、自分があとで見返しやすい様にメモにします。

ここで書いていることはすべて私の想像です。

Availability zones

場所で区切った単位。

例:
– 東京データセンター
– 大阪データセンター

など?

Subnet -> Space

SpaceはphpIPAMでいうL2 Domainを指します。

Spaceが違う場合、普通はVLANは通せません。

同一のインテリジェントスイッチにつながっていないLANケーブルの集合体であると思います。

Subnet -> Fabric

よくわからない

Resource Pool

リソースを管理する際に利用する単位

Controller

システム図
Image from: https://maas.io/docs/snap/2.9/ui/controllers

Rack Controller

DHCPやPXE、IPMI管理などを提供するサーバ

Region Controller

DNSやWebUIなどを提供するサーバ

日本の公的個人認証サービスを利用したPDF署名とその受け入れ

初めに

公的個人認証サービス(JPKI)は国および地方公共団体が共同で運営する地方公共団体情報システム機構の提供するサービスである。

この記事では2021/12/02時点でのこのサービスとマイナンバーカードを利用したPDF署名とその受け入れについて記述するため、今後この記事の内容が利用できなくなる可能性も存在する。

マイナンバーに関する法律は多くあり、それらを遵守したうえで本ページを参考にしていただきたい。この記事が必ずにも現在の法律に適応しているわけではないことを留意したうえで閲覧していただきたい。

署名により記録される情報

署名をすることにより、下記の個人情報がPDFファイルに記載される。
– 氏名
– マイナンバー上に記述されている都道府県及び市町村

上記情報を渡したくない相手に対しては署名したファイルを送信しないことを強く推奨する。

サードパーティ製のソフトウェアを利用して署名する

公式的に署名する方法はPDF署名プラグインを利用する方法が法務省(登記ねっと 供託ねっと)から提供されている。
しかし、この方法ではAdobe Inc.Adobe Acrobatが必要であり、個人では敷居が高い。(無料版のAdobe Acrobat Readerでは署名の検証のみ可能)

今回は有志の方が開発したJPKI PDF SIGNER(無料)を利用する。

事前準備

あらかじめカードリーダのドライバをインストールしておく必要がある。

利用者クライアントソフトのインストール

JPKIの提供する利用者クライアントソフトをダウンロードし、インストールする必要がある。

注意:
WindowsのロケールはJapaneseである必要性がある。この設定がされていない場合インストーラや本体ソフトウェアが動作しない。

JPKI PDF SIGNERのダウンロード

先に説明した通り、JPKI PDF SIGNERは有志の開発したマイナンバー用のPDF署名ソフトウェアである。

もし第三者の作成したソフトウェアに不信感を感じる場合、OSDNページからソースコードをダウンロードし、ユーザ側で検証とビルドを行うことを推奨する。

このアプリケーションにインストーラは存在しない。公式ページからzipファイルをダウンロードし、各自で解凍して利用する。

署名を行う

公式サイトに操作方法が記述されているので説明は不要であると思うが念のために記述する。

印影を利用しない署名

JPKI PDF SIGNERでPDFファイルを開き、右側メニューの印影なしで電子署名するをクリックする。
マイナンバーカードがコンピュータに認識されていれば公的個人認証 署名用パスワードの入力が求められる。

注意:
JPKIのサイトでは、「署名用電子証明書のパスワードを5回間違えるとロックされ、市区町村窓口でのロック解除が必要となる。」とアナウンスされている。

詳細はパスワードの失念を参照のこと。

署名された文章の受け入れ

署名の検証にはAdobe Inc.Adobe Acrobat Reader(無料)を利用する。

Adobe Acrobat Readerのインストール

公式インストールマニュアルを参考にAdobe Acrobat Readerをインストールする。

ルート証明書のダウンロード

JPKIサイトからルート証明書をダウンロードする。

  1. 認証局の運営ページにアクセスする。
  2. 画面左メニューから署名用認証局の運営に関する情報を開く
  3. 署名用認証局の自己署名証明書を選択しダウンロードする。

注意:
署名用認証局の自己署名証明書は存在するすべての証明書をダウンロードし追加すること。
これは、マイナンバー(証明書)発行時期により利用されているルート証明書が異なるためである。

ルート証明書の追加

悲しいことにAdobe Acrobat ReaderにはJPKIで利用されている署名用認証局の自己署名証明書は信頼リストに追加されていない。
そのため、手動で信頼リストに追加する必要がある。

下記に手順を示す
1. Acrobat Readerを開きウィンドウ上部のメニューバーから編集->環境設定と進む
2. 設定画面左側のメニューから署名を選択
3. IDと信頼済み証明書メニューを開く
4. ウィンドウ左メニューから信頼済み証明書を選択
5. 画面上部の取り込みを選択
6. 新規ウィンドウ上側リスト右の参照を選択
7. ダウンロードしたルート証明書を選択
8. 複数のルート証明書をダウンロードした場合は手順6.から別の証明書を読み込む
9. ウィンドウ下の取り込みボタンを選択
10. Acrobat Readerを再起動する
11. 再度手順4.まで進める
12. 公的個人認証サービス署名用, 地方公共団体情報システム機構から始まる証明書を1つずつ選択し、信頼性を編集ボタンを選択する
13. この証明書を信頼済みのルートとして使用にチェックを入れ、画面下OKをクリックする
14. 2つ以上追加した場合は手順12.に戻りすべての証明書に実施する
15. 再度Acrobat Readerを再起動する

以上でルート証明書が信頼リストに追加される。

署名を検証する

Acrobat Readerで検証したいファイルを開く。

署名済みであり、すべての署名が有効です。
の表示が出れば問題ない。

署名者を確認する

署名を検証するセクションで出たアラートにある署名パネルボタンを選択する

  • 署名者を確認したい署名を開き、署名の詳細を開くと署名者の氏名が表示される。
  • 上状態で証明書の詳細…をクリックすると証明書の情報を確認でき、ここで市町村のデータなどが閲覧できる。

無料で使えるインターネット関連サービス一覧

この記事は別のサイトと連携している記事です。

常に金欠な私が見つけた無料でいい感じのサービスをメモがてら書いていきます。

特定のサービスに密接に関わっており、利用に当たり当該サービスの利用を強制されるような物は省略します。
例えば、AWS Budget ManagementはAWSサービスの利用が前提になりますので、この記事では扱いません。

また、あくまでもメモとして書いていますので、筆者が絶対に使わないであろうサービスや、
無料範囲が設定されたサービスも省略します。

認証系

JumpCloud

認証系サービスとしてかなり優秀で、10ユーザまでLDAPやRADIUSが使え、独自の認証連携ソフトウェア上で10デバイスまで無料でほぼフル機能がついています。おまけに最初の10日間は24時間365日チャットサポートが有るという素晴らしい待遇。

サポートを実際に私も受けましたが、画面共有をしながら状況の確認を行っていただき、かなり親切で丁寧な印象を受けました。また、どうやら10日を超えてもフォームでサポートを受けられる気がします。(未確認)

ご自宅WPA2 EnterpriseやZabbix LDAPなどをやってみたい方は一度試してみてもいいと思います。

Azure Entra ID (旧 Azure Active Directory)

こちらはSSOとActive Directoryにおいてかなり優秀なシステムです。ローカルのActive Directoryと連携できるAzure AD Connectも無料で使える上、Windows 10 Proなどで使えるAzure ADログインに対応しています(当たり前の話ですが)。いつの間にかSSOも無制限になっており、ユーザもある程度入れられたと記憶しています(具体的な数を調べられなかった)

JumpCloudと連携することでJumpCloud側の制限である10ユーザまでRadiusやLDAPを利用できるようになります。

Cloudflare Access

自分がホストしているWebサービスなどにアクセスする際にメールアドレス認証やSSOをかませる事ができるサービスです。
50ユーザまで無料で利用できます。

例えばGrafanaのWebコンソールにアクセスできるユーザを先に紹介しているAzure ADなどで制限することが出来ます。アクセス元はCloudflareのIP扱いになるので、それだけをファイアウォールで許可することである程度安全な環境を作ることが出来ます(ただし、監視などの通信についてはよく考える必要性がありますが)

Google Cloud Identity Free

IdPになってくれるサービスです。Googleアカウントとほぼ同じ機能がIDに割り当てられるのが特徴で、実際にAndroidなどでログインすることもできます。

50ユーザまで無料で利用でき、LDAPと同期することなどもできるようです。

無料版の開始URLがとてもわかりづらい場所にあります。

IBM Cloud App ID

モバイルアプリやWebアプリにユーザ認証機能を入れるサービスらしいです。
月に1,000イベントまで無料です。

CDN

Cloudflare

定番ですが一応紹介しておきます。CDNとして使えますし、IPv6やIPv4非対応ホストにそれぞれのIPを作ってあげる用途で使うことも一応可能です。また、SSL非対応のホストに外見だけSSLを渡すことも出来ます(Cloudflareとホスト間の通信は暗号化されないので注意)

Amazon CloudFront

1TBまで無料ですが、細かい制限がありそうです。

VPS

Oracle Cloud Free Tier – Compute VM

1/8 OCPUと1GBメモリを搭載している2つのVMを使えます。私はここにVPNとZabbixを置いています。かなり快適ですし、これが無料なのは信じられないレベルです。

今はどうやらARMのVMを4台用意できるようです。

Google Cloud Compute Engine

e2-microがアメリカの一部リージョンに限り無料で利用できます。

Web Server

GitHub Pages

GitHubが提供する静的サイト限定のサービスです。標準でJekyllに対応している他、GitHub Actionsと合わせることでHugoなどのビルドも自動化出来ます。

SSLや独自ドメイン(サブドメイン含む)に対応していますが、ホストするコンテンツが1GB以内である、1ヶ月に100GBまで、1時間に10ビルドまでなどの制限があるそうです。(About GitHub Pages – GitHub Docs

Cloudflare Pages

かなり制限が緩めの静的サイト向けサービスです。独自ドメイン利用時は基本的にCNAMEで設定します。
Cloudflare Workersと組み合わせて動的なサイトを作ることもできます。

ビルド数制限が月単位で存在します。

Azure App Service

Node.jsやPHPなどに対応したWebアプリのホスティングサービスです。10個󠄀のWebアプリをホストできるようですが、ストレージの条件がぱっと見ではわからないため、詳細は記述しません。

XREA

GMOが提供するレンタルサーバです。スペックは下記の通り。

  • 1GB のストレージ
  • マルチドメイン(10個)
  • 1GB/Day の転送量
  • WordPress利用可能
  • チャットサポート
  • CGI/SSI/Perl/PHP/Ruby対応
  • SSL対応(独自、Let’s encrypt)
  • 広告が表示されます

また、メインではないのでしょうが、一応100個までメールアドレスを発行できるため、メールサーバとしても使えます。一日あたり1,000通もメールをメールを送ることは無いでしょうから十分だと思っています。

StarServer Free

Netowlの提供するレンタルサーバです。プランは下記のとおりです。

  • 2GB 広告無し
  • 4GB
  • 2GB PHP, MySQL(50MB)

一番上のプラン以外はスマートフォンアクセス時にのみ広告が表示されます。難点として、SSL非対応です。また、ドメインを1つ追加できると謳っていますが、TLDにかなり厳しい制限があり、それ以外を利用するには有料プランにしなければならないとのこと。

個人的には静的なサイトを2GBプランを使ってCloudflareを噛ませて公開するのに丁度いいと思っています。

XFREE

Xserverが提供するレンタルサーバです。プランは下記の通り。

  • 1GB 広告無し(条件付き)
  • 1GB PHP, MySQL(50MB)
  • 2GB WordPress (DB: 100MB)

一番上のプランは3ヶ月以上ファイルを変更する動作をしていない場合に広告表示、それ以外は常時のようです。独自のドメインは10個とのことですが、私が試した限りStarServer Freeと同じようにリストに無いTLDを持つドメインは追加できません。こちらもSSL非対応です。

使い道としてはStarServer Freeと同じ感じになると思います。

Git/Version Control

Azure DevOps

5ユーザまで無料のGitサーバやCI/CDができる環境がいろいろそろったやつです。
今は正直GitHubが優秀なのでそれでいいと思います。

Google Cloud Source Repository

5ユーザまでで、50GBのストレージが利用できます。ダウンロードは月50GBまで無料です。

AWS CodeCommit

5ユーザまで、50GBのストレージが利用できます。Gitリクエストは1月1万件󠄀まで利用できます。

CD/Build Tools

IBM Cloud Continuous Delivery

500ジョブまで無料です。おそらく外部システムへの展開もやってくれる気がします。

Google Cloud Build

合計で月に120分ビルドできます。

AWS CodeBuild

月に100分までビルド可能だそうです。

AWS CodePipeline

1件のみパイプラインを設定できます。

Database

IBM Cloudant

1GBまで無料で使える、JSONを保存できるデータベースのようです。

Google Firestore

1プロジェクト当たり1GBのストレージが利用できます。読み込みは5万リクエストまで、書込みと削除は2万リクエストまでです。

Oracle Autonomous Database

20GBのストレージと1つのOCPUをもつDBを1つ使えるようです。

Oracle NoSQL Database

読み書きが約1億回無料でできるようです。また、1テーブル当たり25GBで、3テーブルまで作れるらしいです。

Amazon DynamoDB

NoSQLサービスです。25GBのストレージを無料で利用できます。

Container Hosting

Azure Container Apps

制限はかなりありそうですが、簡易的なコンテナをホストするくらいなら使えそうなサービスです。

Container/Package Registry

IBM Container Registry

月に5GBのダウンロード方向の通信が無料らしいです。保存は月に0.5GBまで無料という表記がありますが、詳細は不明です。

AWS CodeArtifact

2GBのストレージと10万件のリクエストが無料なアーティファクトリポジトリです。

スクリプト実行

このセクションを説明するワードが無かったので、とりあえず仮で「スクリプト実行」とします。
Cloudflare WorkersやAWS Lambdaなどがこの仲間です。
Webから呼び出せることを条件にしています。

Azure Functions

100万回まで無料とのこと。

Google Cloud Run

200万リクエスト、1GBの下りネットワークが無料です。計算リソースについても詳細な制限があります。

AWS Lambda

100万リクエストまで無料です。

Cloudflare Workers

1日当たり、10万リクエストまで無料です。

Object Storage

Google Cloud Storage

5GBまで無料のようです。また、下りは毎月1GBまで無料で、5,000回までPUTリクエストなどが無料で行えるそうです。

Oracle Cloud Object Storage

10GBの普通のオブジェクトストレージと低頻度アクセスのオブジェクトストレージ、そしてアーカイブストレージを使わせてもらえるようです。
リクエスト自体は5万リクエストまで無料とのこと。通信容量課金は計算機に乗ってなかったのですが、おそらくテナントとして課金され、10TBまで無料となるのかなと思います。

Cloudflare R2

10GB、100万クラスA、1000万クラスBまで無料です。

通知・メール送信

Azure Notification Hubs

100万件までのプッシュ通知が無料とのこと。

Oracle Cloud Email Delivery

3,000件󠄀まで無料とのことだが詳細不明。

Mailjet

メールの送信サービスです。独自ドメインなどからメールを送信したい場合にとても重宝します(私はZabbixのアラートに使っています)。1日に200通までしか送れませんが、そこまで使うことはないと思います。(というか、1日にアラート200件来たら諦めてサーバの電源引っこ抜く)

APIを使ってメール送信もできるので、様々なサービスと連携ができそうです。

Amazon SNS

100万メッセージの発行まで無料です。

DNS

Cloudflare

Webが関連するところにはだいたい現れるであろうCloudflareです。DNSツールとしてかなり使いやすく、対応しているサービスをホストするのであればIPを隠す事もできます。

アカウントの共有機能を使って大きなプロジェクトのDNSを複数人で管理したり、APIを使って動作を自動化したりも可能です(応用してDDNSのような使い方もできます)

対応しているドメインであればDNSSECなどのセキュリティ機能もありますし、格安のCloudflare Registrarが利用可能な場合は、何も考えずにここに載せてもいいと思っています。

Hurricane Electric Free DNS Management

Hurricane Electricが提供しているDNSです。DDNSに対応しているサービスで、かなりわかりやすい部類だと思います。DNS機能としては細かい制限がありますがクリティカルなものは無かったと思います。

Email Forward

ImprovMX

特定のドメインに来たメールすべてを特定のアドレスに転送できる凄い奴です。制限として、独自に転送先を変更できるアドレスは25個までであることと、10Mbまでの添付ファイルまでしか受け付けてくれないことがあります。

VPN

Tailscale

外向きの通信が通れば大体使えるすごいやつです。無料版だと20デバイスまで接続できるとのこと。(私が初めて見たときには100だった気がする)サブネットルーティングなどが使えるためかなり便利なサービスです。(しかし、現在無料で使えるサービスにかなりの制限がかかっているので、Oracle CloudにSoftEther VPN置いたほうが良さそうと思ったり…)

VPN Azure

SoftEther VPNに置いて、NAPTやファイアウォール超えをするときにとても重宝するサービスです。前提としてSoftEther VPN Serverを建てる必要がありますが、Oracle Cloudの無料枠などに置くと完全無料でいい感じのVPNが作れます。注意点として、内部に用意する仮想ネットワークはv6非対応です。L2 VPNではv6をつかうことが出来ます。

システム監視

Grafana Cloud

3ユーザまでで、1万メトリック、50GBのログなどを14日間保存できるサービスです。
Grafanaファミリーで動いているので、LokiやPrometheusがそのまま使えます。

データ処理

Google Cloud BigQuery

1TBまでの処理と、10GBのストレージが無料で利用できます。

Oracle Cloudのminimal UbuntuのInstanceで外からつながらない問題

自分用のメモです。

環境

  • Oracle Cloudインスタンス
  • Image: Canonical-Ubuntu-20.04-Minimal-2020.12.10-0
  • Shape: VM.Standard.E2.1.Micro

原因

iptablesのルールである

-A INPUT -j REJECT --reject-with icmp-host-prohibited

解決策

/etc/iptables/rules.v4

の17行目にある

-A INPUT -j REJECT --reject-with icmp-host-prohibited

をコメントアウトして再起動。(すべてのポートが晒されるので注意)

Windows 10をUSBメモリなどに手動でインストールする方法

まえがき

かなり前の話になりますが、株式会社アーク情報システムということろが「BOOT革命/USB」という製品を作っていました。
この製品は、WindowsをUSBに入れる事ができることを売りにしていたソフトで、私は全く使いませんでしたが一応持ってはいました。
今回、SSDの代わりに低容量のUSBメモリを臨時で使いたいという問い合わせがあり、私なりに方法を探ったのでメモとして残します。

注意

この記事で紹介する動作について、一切の責任を負いませんので予めご了承ください。
もし、この記事を参考にし作業する際は、自己責任でお願いします。

検証環境

  • Windows 10 Home x64 (ビルド不明)
  • VMWare Workstation 16 Player

手順

パーティションの設定

Windows 10の場合、基本的にパーティションは3つ生成されます。
しかし、1つは回復領域であるため無視し、EFI用とシステム用の2つのみで構成しようと思います。

パーティションは以下のようになります。
1. 200MB-500MB程度 FAT32 Active
2. 残りの容量 NTFS

設定方法は解説しませんがActiveにする方法として、diskpartでパーティションを選択しactiveコマンドを打つ方法があります。

設定する上で2つのパーティションにドライブレターが割り当てられている必要があります。ここから先の手順では、上からそれぞれE:F:が割り当てられているとします。

イメージの展開

一般のキッティングにも使われているであろうDismを使います。事前にWindows 10のインストールメディア内のsources/install.esdを抽出してください。
此処から先の工程では、作業ディレクトリ内に抽出したinstall.esdが存在し、アクセス権がある状態を想定し記載します。

イメージIDを調べる

管理者権限のPowerShellもしくはコマンドプロンプトで次のコマンドを入力します。

“`plaintext:PowerShell(管理者)

Dism /Get-WimInfo /WimFile:install.esd


希望するエディションのインデックスを覚えておいてください。
此処から先では、`Windows 10 Home(インデックス: 1)`をインストールする前提で記載していきます。

### イメージを展開する
イメージを展開します。`/Index:`と`/ApplyDir:`は各自の環境に応じて変更してください。

```plaintext:PowerShell(管理者)
> Dism /Apply-Image /ImageFile:install.esd /Index:1 /ApplyDir:F:\

ブートローダーの設定

bcdbootを使用し、ブートローダーを設定します。各自でE:\Windows/l ja-JP/s E:については読み替えてください。
また、/l ja-JPはなくても動くはずです。

“`plaintext:PowerShell(管理者)

bcdboot F:\Windows /l ja-JP /s E: /f ALL
“`

設定(OOBE)

あとはUSBメモリからブートし、普通に設定をしていくだけです。

参考

Raspberry Pi上でUbuntu server 20.04を動かしてsshできるようにするまで

経緯

Raspbian環境が壊れたので新しく環境を用意しようとしたところ、私の大好きなUbuntuが使えることを知りました。しかし、インストールからsshできるまでかなりの時間を割かなければならなかったので、ここにメモがてら書き留めることにしました。

イメージ焼き

特に難しいことはないです。Install Ubuntu Server on a Raspberry Pi 2, 3 or 4 | Ubuntu から使いたいRaspberry Pi向けのイメージをダウンロードしてください。
その際、zipではなくxzで圧縮されていますので、Windowsユーザーの方は7zipなどを使ってください。

起動

初期パスワードだけ注意してください。

ユーザー名 パスワード
ubuntu ubuntu

その際、パスワードの変更を求められます。もう一度初期パスワードの入力をしなければならないのでご注意ください。

openssh-serverの設定

openssh-serverはインストールされていますが、hostkeyが設定されていません。
次のコマンドを使ってhostkeyを自動生成させてください。

$ sudo dpkg-reconfigure openssh-server

生成出来たらopenssh-serverを再起動してください。

$ sudo service ssh restart

参考

  • Ubuntu 20.04 LTS Server を Raspberry Pi 4 にインストール – Qiita, https://qiita.com/azumabashi/items/182f365cf7405156788c 2020.10.10 参照.
  • How To: Ubuntu / Debian Linux Regenerate OpenSSH Host Keys – nixCraft, https://www.cyberciti.biz/faq/howto-regenerate-openssh-host-keys/ 2020.10.10 参照.

PowerShellを使ってMinecraftのリソースを正式名でエクスポートする

最初に

Minecraftはデフォルトリソースをハッシュ名にして保存しています。実際のリソース名とはJSONファイルを使用して関連付けています。

{"objects": 
    {
        "resource1.png": 
            {"hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "size": 1234},
        "resource2.png": 
            {"hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "size": 5678}
    }
}

このような形でハッシュとリソース名を対応付けています。これをリソース名にしてエクスポートしようという試みです。

対応環境

Minecraft 1.16とPowerShell 5.1で実行できることを確認しました。また、オープンソース版のPowerShellでも実行できると思われます。

最低限の検証しかしていません。

実際のコード

$objects_dir = "C:\Users\Owner\AppData\Roaming\.minecraft\assets\objects"; # .minecraftフォルダ内のassets/objectsまでのフルパス
$listjson = "C:\Users\Owner\AppData\Roaming\.minecraft\assets\indexes\1.16.json" # .minecraftフォルダ内のassets/indexes内の任意のバージョン名のJSONファイルまでのフルパス

$exportdir = "C:\Users\Owner\AppData\Roaming\.minecraft\assets\extracted" # エクスポート先フォルダのフルパス

# ===================

$json = Get-Content $listjson
$list = ConvertFrom-Json -InputObject $json


foreach ($r in $list.objects.psobject.Properties) { 
    $fname = $r.Name
    $afname = $list.objects.$fname.hash

    $hash_dirname = $afname.Substring(0, 2);

    $from = $objects_dir + '\' + $hash_dirname + '\' + $afname;
    $to = $exportdir + '\' + $fname;

    $destdir = Split-Path $to -Parent;

    if (!(Test-Path -Path $destdir)) { $0_ = New-Item $destdir -Type Directory }
    Copy-Item -Path $from -Destination $to
}

汚いコードですが概ねこのような形です。先頭の3行(改行含め4行)を書き換えて利用してください。

注意点・解説

先ほども説明した通り、JSONでリストが作られています。そのため、ConvertFrom-Jsonで簡単に読み込むことができました。しかし、いくつか注意点があります。

PowerShell 5.1ではJSONをHashtableにできない

Windows 10に標準搭載されているPowerShellは-AsHashtableオプションに対応していません。そのため、PSCustomObjectで出力されたオブジェクト名をそのまま取得することができません。
 これを解決するために、foreach文ではpsobject.Propertiesを取得したいオブジェクトにつけることによって、プロパティのデータをforeachにかけています。
 これによって取得したオブジェクト名をそのまま埋め込み、$list.objects.$fname.hashとすることによってPSCustomObjectのままでデータを取得しています。

ファイルコピー時に親ディレクトリがない

PowerShellのCopy-Itemコマンドレットは親ディレクトリを自動的に作ることはできません。そのため、Split-Path $to -Parentで親ディレクトリを取得し、当該ディレクトリがなかった場合は、新しくディレクトリを作成しています。

ディレクトリ作成時のログ

New-Itemコマンドレットを使用すると、実行時に結果としてディレクトリの詳細データを出力します。しかし、今回は邪魔なだけなので、$0_変数に結果を代入させることによって表示をなくしています。