LoginSignup
2
1

買って来てすぐの管理者権限の無いPCでも動くPowerShellスクリプトの作り方

Posted at

結論

Power.bat
<# :
@echo off & setlocal EnableDelayedExpansion
set BATCH_ARGS=%*
for %%A in (!BATCH_ARGS!) do set "ARG=%%~A" & set "ARG=!ARG:'=''!" & set "PWSH_ARGS=!PWSH_ARGS! "'!ARG!'""
endlocal &  Powershell -ExecutionPolicy RemoteSigned -NoProfile -Command "$input|&([ScriptBlock]::Create((gc '%~f0'|Out-String)))" %PWSH_ARGS%
exit/b
: #>

ここ以降にPowerShellコードを書く

上記を作成し、拡張子.batで保存して実行。

説明

PowerShell スクリプトをバッチファイル感覚で作ろうとすると・・・。
デフォルトだと、 PowerShell の ExecutionPolicy がRestrictedになっていて.ps1スクリプトを実行できない。

PowerShell
Get-ExecutionPolicy
# → Restricted

管理者権限があり、RemoteSigned以下に設定を落とせば、以後実行出来るようになる。ただし、セキュリティに懸念があるとか、そもそも管理者権限が無い事もある。

PowerShell (管理者)
Set-ExecutionPolicy RemoteSigned

ExecutionPolicy にはスコープがあり、 Process スコープ(システム全体ではなくそのプロセスのみに有効)であれば管理者権限が無くても変更可能。また、 PowerShell 起動時にそれを指定出来る。
つまり、バッチファイルから ExecutionPolicy が RemoteSigned な PowerShell を起動し、そこにスクリプトを流し込めばいけそう。
その方法として、「バッチファイルとして起動し、自分自身を PowerShell スクリプトとして起動し直す (この時に PowerShell の設定を変えて起動)」という方法がある。
(セキュリティ的にダメな気がするんですが、出来てしまう。)

※ 本スクリプトは、特殊文字非対応だったり、一部のPathが空になるようです。もっと踏み込みたい方は、以下の参考元をお読みください。

とっっても参考にさせて頂いた記事

マイナー加工してますが、ほぼ、以下の焼き直しというレベルです。
前者のスクリプトに、後者のポリシー変更を組み込んだだけです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1