Open7
PowerShell スクリプト&テクニックメモ
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
>
「登録されている拡張子は表示しない」を無効にする
デフォルトだと拡張子が隠されるようになっているので、すべての拡張子を表示するように設定を変更する。
# 「登録されている拡張子は表示しない」を無効にする
> Set-ItemProperty -LiteralPath "HKCU:Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "HideFileExt" -Value "0" -Force
# Explorer を再起動して、変更を反映する
> Stop-Process -name explorer -force
.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 —コレログ—
ローカルユーザを追加
ローカルユーザを追加する .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
非対話式でローカルユーザを作成する場合は、変数の指定を次のように変える必要がある。
# ユーザ名を指定
$user = 'UserName'
# フルネームを指定
$fullname = "John Doe"
# パスワードを指定
$plain_password = 'Pa$$w0rd'
# パスワードを SecureString に変換
$password = ConvertTo-SecureString $plain_password -AsPlainText -Force
日本語パックをインストール
Windows を英語など日本語以外の言語でセットアップした際に日本語パックをインストールするコマンド。要管理者権限。
> Install-Language ja-JP
Language Language Packs Language Features
-------- -------------- -----------------
ja-JP LpCab BasicTyping, Handwriting, Speech, TextToSpeech, OCR
>
FYI: Install-Language (LanguagePackManagement) | Microsoft Learn
PowerShell の PATH 環境変数を再読み込みする
PowerShell を開きながら別窓でアプリケーションをインストールしたり、 winget
コマンドでプログラムをインストールしたりしたときに、接続中の PowerShell セッションに更新された PATH 変数が反映されず、新しいプログラムへのパスが通らないときのおまじない。
該当の PowerShell 上で次のように実行すれば、 PATH 変数が更新されて新しいプログラムへのパスが通るようになる。
> $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")