Powershellを実行するとエラーになる

事象

Powershellを実行すると下記の様なエラーになる。

PS C:\Users\user> .\hoge.ps1
.\hoge.ps1: File C:\Users\user\hoge.ps1 cannot be loaded.
The file C:\Users\user\hoge.ps1 is not digitally signed.
You cannot run this script on the current system.
For more information about running scripts and setting execution policy, 
see about_Execution_Policies at https://go.microsoft.com/fwlink/?LinkID=135170.

なお、ポリシーはRemoteSignedに設定変更している。

原因

未署名の外部スクリプト(※1)を実行しようとしていたから。

※1 外部スクリプト
インターネットや外部ネットワークからダウンロードされ、
代替データストリームに Zone.Identifier(ZoneId=3など)が付与されているファイルのこと。

対応方法

以下のどちらか(※2)で実行可能になる。

  1. Zone.Identifierを削除する
  2. スコープをUnrestrictedやBypassなどにする(※3)

※2 場合によっては、署名付きファイルをもらうという手もあるかもしれない。
※3 セキュリティを弱くするため、あまり好ましくはない。

Zone.Identifierの確認方法と削除方法

## 確認方法

# ファイルのすべてのデータストリームを出力
Get-Item .\hoge.ps1 -Stream *

# Zone.Identifierだけ指定(無い場合はエラー)
Get-Content .\hoge.ps1 -Stream Zone.Identifier

## 削除方法

# Zone.Identifier削除専用コマンド
Unblock-File -Path .\hoge.ps1

# ストリーム削除コマンド
Remove-Item -Path .\hoge.ps1 -Stream Zone.Identifier

## 複数削除方法

# カレントディレクトリ配下のすべての .ps1 ファイルのZone.Identifierを解除
Get-ChildItem -Filter *.ps1 | Unblock-File

# サブフォルダーも含めてすべてのファイルのZone.Identifierを再帰的に解除
Get-ChildItem -Recurse | Unblock-File

スコープ確認方法・変更方法

## 確認方法

# 現在適応されているポリシーの確認
Get-ExecutionPolicy

# 全スコープ一覧
Get-ExecutionPolicy -List

## 変更方法(管理者権限があるコンソールで実行する必要有)
Set-ExecutionPolicy -Scope <スコープ名> -ExecutionPolicy <ポリシー名>

実行ポリシーとスコープ名

スコープ名一覧

優先度 スコープ名 適用範囲・特徴
1 (最優先) MachinePolicy グループポリシー(GPO)によってPC全体に強制される。一般ユーザーや個別のスクリプトからは変更不可。
2 UserPolicy グループポリシー(GPO)によって現在のログインユーザーに強制される。変更不可。
3 Process 現在のPowerShellプロセス(セッション・タブ)内のみに適用される。ウィンドウを閉じると設定は消滅する。
4 CurrentUser 現在のログインユーザー全体に適用される。設定はレジストリ(HKCU)に保存され、次回起動時も維持される。
5 (最底辺) LocalMachine PC全体(すべてのユーザー)に適用されるデフォルトの保存先。設定の変更には管理者権限が必要。

実行ポリシー名一覧

実行ポリシー名 実質的な権限・挙動 外部スクリプトの実行可否
Restricted すべてのスクリプトの実行を禁止。 インタラクティブな個別コマンドの入力のみを許可する(Windows クライアントOSの既定値)。 ✕ 不可
AllSigned 署名付きスクリプトのみ許可。 ローカル作成・外部ダウンロード問わず、信頼された発行元のデジタル署名が必要。 ◯ 許可(要署名)
RemoteSigned ローカル作成は許可、外部ダウンロードは要署名。 ネットから取得したファイル(ZoneId=3)を実行する場合はデジタル署名が必要(Windows Serverの既定値)。 ◯ 許可(要署名)
Unrestricted すべてのスクリプトを実行許可。 ただし、インターネットからダウンロードした未署名のスクリプトを実行する際には、事前の警告プロンプトが表示される。 ◯ 許可(警告有)
Bypass すべてのスクリプトを実行許可(警告なし)。 警告やブロックが一切発生しないため、自動化タスクやバックグラウンド処理で広く使われる。 ◯ 許可
Undefined この階層(スコープ)での設定は「未定義(空)」であることを示す。 固有の権限は持たず、判断を下位スコープやOSのデフォルト値に委ねる。(※4) —(委ねる)

※4
デフォルト値は、サーバーにより異なる。

  • Windows10/11:Restricted
  • Windows Server系:RemoteSigned

コマンドで確認する場合、全てUndefiend設定後Get-ExecutionPolicyを実行すれば確認できる。

PowerShellの初期ロードに設定すると良い内容

設定ファイルの配置場所とファイル名

配置場所

通常

C:\Users\<ユーザー名>\Documents\PowerShell

OneDrive設定がある場合

C:\Users\<ユーザー名>\OneDrive\Documents\PowerShell

設定ファイル名

多少分類の境界線微妙なとこはあるが、以下の様な役割で分かれてそう

  • Microsoft.PowerShell_profile.ps1(※1):主にシェル操作に関する設定
  • powershell.config.json:PowerShell全体の処理に関わる設定

※1
これとは別にprofile.ps1も存在する。
これは同じ内容を定義するが、対象とする範囲が別になる。
Microsoft.PowerShell_profile.ps1は、PowerShellコンソールのみ範囲となる。
一方、profile.ps1はVSCodeなど別ホストからPowerShellが実行された場合も当内容が適用される。
(逆にMicrosoft.PowerShell_profile.ps1の内容は読込されない)
そのため、全環境共通にしたい場合は、profile.ps1を作成する方が良い。

設定しておくと便利な設定

Microsoft.PowerShell_profile.ps1

# ==== エンコード関連 ====
 
# コンソールの表示をUTF-8にする
# 設定確認方法:chcp
chcp 65001 > $null
 
# 標準入力の文字コードをUTF-8にする
# 設定確認方法:$InputEncoding.WebName
$InputEncoding  = [System.Text.Encoding]::UTF8
 
# 標準出力の文字コードをUTF-8にする
# 設定確認方法:$OutputEncoding.WebName
$OutputEncoding = [System.Text.Encoding]::UTF8
 
# ==== コンソール操作関連 ====
 
# Tabキーの補完動作設定
# 設定確認方法:Get-PSReadLineKeyHandler | Where-Object { $_.Key -eq "Tab" }
Set-PSReadLineKeyHandler -Key Tab -Function MenuComplete
 
# 過去の履歴から予測候補を表示
# 設定確認方法:Get-PSReadLineOption | Select-Object PredictionSource
Set-PSReadLineOption -PredictionSource History
 
# 予測候補の表示形式の指定
# 設定確認方法:Get-PSReadLineOption | Select-Object PredictionViewStyle
Set-PSReadLineOption -PredictionViewStyle ListView

powershell.config.json

{
  "Microsoft.PowerShell:ExecutionPolicy": "RemoteSigned",
  "POWERSHELL_TELEMETRY_OPTOUT": "1",
  "DisableImplicitWinCompat": true
}
  • Microsoft.PowerShell:ExecutionPolicy:明示的に指定
  • POWERSHELL_TELEMETRY_OPTOUT:MSに情報送るの停止
  • DisableImplicitWinCompat:PowerShellの古い互換機能を無効化

PowerShell実行時に覚えておくと便利な内容

PowerShellのインストール方法

以下のコマンドでインストールするのが楽である。
後は見慣れたインストーラが起動して、インストールできる。

winget install Microsoft.PowerShell

実行したら、ライセンス条件に同意するか聞かれるので、Yを選択すればよい。

PowerShellのアップデート方法

winget upgrade Microsoft.PowerShell

PowerShellのバージョン確認方法

$PSVersionTable.PSVersion

なお、PowerShellはv5まではpowershellが起動コマンドである。
しかし、v6以降はpwshが起動コマンドである。

インストールしているソフト一覧と名称確認方法

# 全量出したい場合
winget list

# 一部だけでも検索可能
winget list Power

# パイプしてgrep的に削る方法
winget list | Select-String Power

覚えておくと便利なコマンド

# コマンドの場所を見つける
Get-Command hoge

# ファイルダウンロード
irm "https://hoge.com" | iex

# カレントディレクトリのエクスローラを開く
ii .

# 環境変数の全量表示
Get-ChildItem Env:

# 環境変数の指定表示(例:PATH変数)
$env:PATH

PowerShellでコマンドが実行できない

事象

スペースを含むため、.\みたいな直接指定ができない。
そのため、絶対パスでダブルクォーテーションで括って実行した。
しかし、PowerShellからコマンドが実行できない。

"C:\Program Files\OpenSSL-Win64\bin\openssl.exe" s_client -connect sts.amazonaws.com:443 -servername sts.amazonaws.com

原因

コール演算子(&)の付け忘れ

対応方法

頭に"& "を指定すれば良い

& "C:\Program Files\OpenSSL-Win64\bin\openssl.exe" s_client -connect sts.amazonaws.com:443 -servername sts.amazonaws.com

補記事項:直接指定とコール演算子の違い

項目 .\hoge.exe (直接指定) & ".\hoge.exe" (コール演算子)
主目的 静的ファイルの即時実行 文字列や変数の動的実行
スペースを含むパス 不可(エラーになる) 可能("で囲む必要あり)
変数の使用 不可(変数の値を展開して実行できない) 可能& $path の形式で実行)
評価の仕組み 文字列をコマンドとして実行 演算子の後ろを評価した結果をコマンドとして実行

IPv6で動いてる風で、実は動いてなかった

環境構成

  • NTT西日本 フレッツ光ネクスト スーパーハイスピードタイプ隼
  • OCN 光 with フレッツ ファミリー・スーパーハイスピード 隼・西日本
  • NTT GE-ONU 第6世代(交換前は第5世代)
  • NEC Aterm 7200 D8BE(交換前は3600HP)

発端

この3か月位、よくネットがふん詰まりを起こしていた。
ネット自体はつながるのだが、動画とか再生ができない事態が頻発していた。
ルーターが調子悪く古かったので買い替えもしたが改善しなかった。
そこでONUをルーターを同時に再起動すると改善していた。
結果、ONU(10年利用)を交換することになった。
ただ、その原因追及をしている際、IPv6が動いていないことが分かった。(※1)

※1
Antigravityが調査してくれた
IPv6はNTTから払い出しされてたが、OCNで止められてた

IPv6対応で行ったこと

1.OCN現状確認

OCNにIPv6対応できているかを確認できるサイトが用意されている。
OCN | 接続環境確認

OCNではIPoE[IP over Ethernet]のことをIPv4 over IPv6と呼称している模様
IPoE(IPv4 over IPv6)とは | OCN

当サイトで確認した結果、IPv6が対応できていないという結果が表示された。

2.OCN契約確認

OCNの契約確認を行った。
確認方法は綺麗に確認方法を解説されているページがあった。

OCN IPoEインターネット接続機能の提供状況を確認したい | OCNお客さまサポート

結果、IPoEは未提供と表示されていることが確認できた。

3.OCN契約変更

OCNにIPoEを利用させて欲しいという契約変更を行った。
こちらに関しては、無料で行える。
また、元の方式が使えなくなる訳ではなく、両方使える感じになる模様である。
加えて、最悪うまく動かない場合は、契約を元に戻すこともできるとのこと。
なお、Web上から変更も行えるようである。
(私は質問したい事項がいくつかあったので電話で対応してもらった)
切り替えには3日程度かかるとのことであった。
support.ocn.ne.jp

4.ルーター設定&確認

切替前はPPPoE接続になっている。
それをIPoE接続に変更する必要がある。

PPPoEルータでIPv6は未接続と表示されている

但し、ルーターが自動化設定でIPv6有効化するとなっている場合がある。

NEC Aterm 7200 D8BEもデフォルトで上記設定であった

そのため、OCNの契約変更が反映された3日後に、自動でIPv6接続に切り替わった。

OCNバーチャルコネクトモードに変わり、IPv6も利用可能になっていた

その他

速度・安定感

  • 速度はそんなに正直変わらないかもしれない。今まで400Mbps出ていたのが、変更後も同じ位なので。
  • 安定感は上がったかも。上記数値は良い時で、悪い時は100とか50とかなることあったが、あまりないかも。(但し、観測日数少ないだけかも)

機器として必要なもの

当対応を行うには、予め機器が対応している必要がある。
ルーターはOCNバーチャルコネクト対応ルーターでないといけない。
OCNバーチャルコネクト対応ルーター対応一覧 | NTT docomo Business

ONUも対応している必要あるが、こちらは余程古い機種でなければ問題ない。
(私が10年前使い続けてた交換前のモデルもIPoE自体は対応版とのことであった)

IPoEのデメリット

コールセンターの方に言われていた内容としては、監視カメラ系が動かなくなるケースがあると言われていた。
しかし、私はgoogle nest cam(多分第一世代)を利用しているが、問題なく動いてくれた。
後、ルーターもIPoE対応していないといけないので、対応していない場合は買替する必要がある。
なお、プランや別プロバイダ次第では、ルーターも無償 or 格安レンタルできる場合がある。

ONU交換時間帯

表題とは直接関係ないが、今回ONUも同じタイミングで実施した。
その際、交換時間帯なるものが存在する事を見落としていた。(朝7時~夜22時)
また、反映には30分~1時間かかるようである。
その仕様に気づくまで1時間位苦闘していて、送付資料に小さく記載見つけた。。。
結果、夜1時から格闘し始め、朝8時前までネットが使えなかった。

Edgeのワークスペースを直接起動したい

行いたいこと

通常Edgeを起動する際、Edgeを開いて、更にワークスペースを選択して開かないといけない
これだと、使いたいワークスペースを開くのにワンテンポ遅くなる
なので、ショートカットでワークスペースを起動させたい

対応方法

現時点ではこれ位しかいい案思い浮かばず
guidについては後述

"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe --launch-workspace=workspaceのguid

ショートカット作成例


  • EdgeのBetaなど利用している場合は、そちらを指定すれば良い
  • workspaceのguid部分はダブルクォーテーション不要
  • ショートカット名はお好きな名前を付ければOK

欠点

  • 必ず新規ウインドウが開く(そのため、閉じる作業が別途必要)
  • workspaceのguidを見つけるのが面倒

workspaceのguidの見つけ方

  1. アドレスバーに edge:/sync-internals と入力
  2. Searchタブを選択
  3. workspaceと入力して検索ボタンをクリック
  4. 下側の8XXXXXXX-4XXXX-4XXX-4XXX-12XXXXXXXXXX形式のを一つずつ確認する
  5. titleにワークスペースの名前が付いているJSONを探す
  6. 見つけたJSONのguidをコピーしておく
  7. 上のコマンドのworkspaceのguidを置き換える

沢山あるので一つずつ見ていくしかない

補記事項

  • ワークスペースとワークスペース内のタブ情報が同一に並んでいる
  • タブ情報のparent guidでもOK
  • 見つけれない場合は、ワークスペース名を特徴的な名前に一度変えてみる

ショートカットの呼び出し方

私はPATHが通っているところにショートカットを配置している。
そうすることでWIn + R → ショートカット名とかで実行できる様になる。

e2aiというショートカットを実行

EIAM・CIAM

名称

  • EIAM[Enterprise Identity Access Management]:社内向けIAM
  • CIAM[Customer Identity Access Management]:顧客向けIAM

用途比較

| | EIAM(社内向けIAM) | CIAM(顧客向けIAM) | | :--- | :--- | :--- | | 対象ユーザー | 従業員、派遣社員、外部契約者、ビジネスパートナー | 一般消費者(B2C)、顧客企業のユーザー(B2B顧客) | | 主要な目的 | 業務効率化、内部不正防止、ガバナンス・統制の強化 | 顧客体験(UX)の向上、コンバージョン率向上、顧客データ統合 | | ユーザー規模とスケーラビリティ | 数百〜数万人(組織規模に依存)
増減は予測可能で緩やか(近年は合併、提携などで急増する場面増えたが…) | 数万〜数千万人以上
キャンペーンやメディア露出による突発的なスパイクへの対応が必須| | アイデンティティの信頼源 (Source of Truth) | 人事システム(HRM)、Active Directory / Entra ID など | ユーザー自身による登録(自己サインアップ)、CRM、CDP | | ライフサイクル管理 | 入社・異動・退職に基づくプロビジョニング / デプロビジョニングの厳密な自動化 | ユーザー主導の登録、eKYC(※1)、プロフィール更新、アカウント削除(退会・未使用判定) | | 主な認証プロトコル | SAML 2.0, OIDC, Kerberos, LDAP | OIDC, OAuth 2.0, FIDO2 (WebAuthn) | | 認証UI/UXの要件 | セキュリティ重視
厳格な多要素認証(MFA)を強制
認証失敗時の対応 | 摩擦(フリクション)の最小化
SNSログイン(ソーシャルログイン)、パスワードレス、生体認証
リスクベースでの追加認証| | 認可・アクセス制御 | ロールベース(RBAC)、属性ベース(ABAC)
最小権限の原則に基づく厳格な制御 | スコープベース、リソースベース
動的な同意管理に基づく限定的なアクセス認可| | セッション管理 | 長時間のセッション、または業務時間内に限定
即時一括サインアウト(Global Sign-Out)の重要性が高い | 短期〜長期の柔軟なセッション(デバイスの「ログイン状態を保持」など)
リスク検知による動的セッション切断 | | セキュリティ・脅威対策 | ゼロトラスト、社内ネットワーク境界防御、シャドーIT検知 | アカウント乗っ取り(ATO)、Credential Stuffing、ボットによる不正登録検知| | プライバシー・同意管理 | 企業のポリシーに基づきデータは企業が管理
同意取得は原則不要(就業規則等に依存)| GDPR、CCPA、個人情報保護法等への厳格な準拠
ユーザー自身による明示的な同意・オプトイン管理| | 主な提供ベンダー/ソリューション | Okta Workforce, MS Entra ID, Ping Identity (PingFederate), HENGE | Auth0 (Okta), MS Entra  External ID, Amazon Cognito, Firebase Authentication, Uni-ID Libra, ForgeRock |

※1 eKYC[electronic Know Your Customer]

オンライン上で身元確認手続きを完結させる仕組みのこと。

【主な方式】

  • 運転免許証やマイナンバーカードといった本人確認書類と、自身の顔(風貌)を撮影して送信する方式
  • マイナンバーカードの署名用電子証明書を使った公的個人認証サービス(JPKI)を利用する方式

法律・ガイドラインごとの要点

個人情報保護法

すべての業種に適用される基本法である。

  • ID管理において管理対象となる属性が個人情報に該当する場合、取得・利用・保管・削除に関して本人の同意や利用目的の明示が必要
  • 不正アクセスや漏洩防止のため、アクセス制御や認証の強化が推奨
  • ログ管理やアクセス履歴の記録・監査も義務付けられるケース有

NIST SP 8000-63

米国連邦政府の情報システムにアクセスするユーザー(職員、契約者、一般市民など)のIDの信頼性を確保するためNISAが策定した定義

  • IDプロビジョニングのライフサイクル管理(登録・認証・廃止)を定義
  • 多要素認証の導入を推奨し、パスワード、生体認証、ハードウェアトークンなどを組み合わせる
  • IDフェデレーションとSSOの技術要件を提示
  • ID保証レベルを定義し、リスクに応じた認証強度を設定
  • 監査証跡とコンプライアンス報告の自動化を推奨

GDPR

EU内の個人のプライバシーとデータ保護を強化し、個人データに関するルールを規定

  • データ主体の権利(アクセス権、訂正権、削除権)を尊重
  • データ最小化と目的限定し、必要最小限のID情報のみを収集・利用
  • 処理記録と監査対応

デジタル社会推進標準ガイドライン DS-511

デジタル庁が作成したガイドラインで、2025年9月に全面改訂された

  • マイナンバーカードなど身分証明書のICチップ活用により偽造対策を強化
  • 被害が増加しているリアルタイムフィッシングへの体制を重視してAAL(※2)を設定
  • システムのリスクアセスメントプロセスを大幅に簡易化して、適用を容易に

※2 AAL:Authenticator Assurance Level(当人認証保証レベル)
ログインしようとしている人が、本当に登録された本人かどうかを確かめるプロセスの強固さ(確実性)」を表す指標

参考文献

第1特集:今さら聞けないID管理より

Turso(SQL Liteベースの分散DB)

Software Design 2026年5月号で紹介されていた。 良さげな感じがしたので、備忘録がてら。

** 製品 turso.tech - MITライセンス - インストール利用は無料利用可能 - マネージドDBサービスTurso Cloudも展開、無料プラン有

** 特徴 - 軽量さと分散性を両立 - HTTPおよびWebSocket経由のリモートアクセス - WebAssemblyへの対応 - DBをGitのようにブランチ・マージできる機能 - レプリカによる同期機能 - ベクトル検索をサポート