Open7

PowerShell スクリプト&テクニックメモ

ktooiktooi

PowerShell の実行ポリシーを変更

PowerShell の実行ポリシーは、デフォルトで Restricted に設定されており .ps1 のスクリプトを実行することができない。
実行ポリシーを変更し、 .ps1 スクリプトを実行できるようにする。

# 変更前の実行ポリシーを確認
> Get-ExecutionPolicy -List

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine       Undefined


# 実行ポリシーを Bypass に設定
> Set-ExecutionPolicy Bypass

Execution Policy Change
The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose
you to the security risks described in the about_Execution_Policies help topic at
https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): Y
# 変更後の実行ポリシーを確認
> Get-ExecutionPolicy -List

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine          Bypass


> 

FYI: 実行ポリシーについて - PowerShell | Microsoft Learn

ktooiktooi

「登録されている拡張子は表示しない」を無効にする

デフォルトだと拡張子が隠されるようになっているので、すべての拡張子を表示するように設定を変更する。

# 「登録されている拡張子は表示しない」を無効にする
> Set-ItemProperty -LiteralPath "HKCU:Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "HideFileExt" -Value "0" -Force
# Explorer を再起動して、変更を反映する
> Stop-Process -name explorer -force
ktooiktooi

.ps1 スクリプトが Administrator で動作していなければ、 Administrator で起動しなおす

.ps1 スクリプトの冒頭に書いておくことで、その .ps1 スクリプトが Administrator 権限で動作していなければ Administrator 権限で起動しなおすようになる。

if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole("Administrators")) { Start-Process powershell.exe "-File `"$PSCommandPath`"" -Verb RunAs; exit }

FYI: 【PowerShell】PowerShellを管理者権限で実行したい!ソースの先頭に埋め込むだけで自動で管理者権限に昇格するスクリプト! | Correct-Log —コレログ—

ktooiktooi

ローカルユーザを追加

ローカルユーザを追加する .ps1 スクリプト。要管理者権限。

# ユーザ名を入力
$user = Read-Host "Input username"
# フルネームを入力
$fullname = Read-Host "Input fullname"
# パスワードを入力
$password = Read-Host "Input password" -AsSecureString

# ユーザを作成
New-LocalUser -Name $user -FullName $fullname -Password $password -PasswordNeverExpires
# ユーザがリモートデスクトップ接続可能となるよう Remote Desktop Users グループに追加
Add-LocalGroupMember -Group "Remote Desktop Users" -Member $user
# ユーザが管理者権限を持てるよう Administrators グループに追加
Add-LocalGroupMember -Group "Administrators" -Member $user
ktooiktooi

非対話式でローカルユーザを作成する場合は、変数の指定を次のように変える必要がある。

# ユーザ名を指定
$user = 'UserName'
# フルネームを指定
$fullname = "John Doe"
# パスワードを指定
$plain_password = 'Pa$$w0rd'
# パスワードを SecureString に変換
$password = ConvertTo-SecureString $plain_password -AsPlainText -Force
ktooiktooi

日本語パックをインストール

Windows を英語など日本語以外の言語でセットアップした際に日本語パックをインストールするコマンド。要管理者権限。

> Install-Language ja-JP                                                                          
Language Language Packs  Language Features
-------- --------------  -----------------
ja-JP    LpCab           BasicTyping, Handwriting, Speech, TextToSpeech, OCR

>

FYI: Install-Language (LanguagePackManagement) | Microsoft Learn

ktooiktooi

PowerShell の PATH 環境変数を再読み込みする

PowerShell を開きながら別窓でアプリケーションをインストールしたり、 winget コマンドでプログラムをインストールしたりしたときに、接続中の PowerShell セッションに更新された PATH 変数が反映されず、新しいプログラムへのパスが通らないときのおまじない。
該当の PowerShell 上で次のように実行すれば、 PATH 変数が更新されて新しいプログラムへのパスが通るようになる。

> $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")

FYI: PowerShellで環境変数を再読込する #PowerShell - Qiita