batファイルにPowerShellスクリプトを埋め込み実行する


はじめに

PowerShellスクリプトを記載する場合「.ps1」ファイルに記載して実行しますが、batファイル内にPowerShellスクリプトを記載して一緒に一つのファイルで管理することが出来ます。
今回は、その方法について記載します。

batファイル内にPowerShellスクリプトを記載してみる

sample.bat

@(echo '> NUL
echo off)

rem bat処理はここに記載する

exit /b 0
') | sv -Name TempVar

# PowerShellスクリプト

こんな感じですね。
では、実際に以下の条件に当てはめて書いてみようと思います。

[bat処理]

・OSが32bitなのか64bitなのかを判定する

[PowerShell処理]

・ファイル出力

@(ecjp '> NUL
echo off)

set local enabledelayedexpansion

SET THIS_PATH=%~f0

net SESSION >nul 2
if %ERRORLEVEL% neq 0 (
    goto RESTERT
)

rem 32bitか64bitかを判定し、実行するPowershel.exeを選別する
IF %PROCESSOR_ARCHITECTURE% equ AMD64 (
    SET BIN=Powershell.exe
) ELSE (
    if "%PROCESSOR_ARCHITEW6432" == "AMD64" (
        SET BIN=%systemroot%¥Sysnative¥WindowsPowerShell¥v1.0¥Powershell.exe
    ) ELSE (
        SET BIN=Powershell.exe
    )
)

%BIN% -NoProfile -ExecutionPolicy unrestricted -Command "Invoke-Expression -Command ((Get-Content ¥"%THIS_PATH:`=``%¥" -join ¥"`n¥")"
goto END

:RESTART
powershell -NoProfile -ExecutionPolicy unrestricted -Command "Start-Procee %~f0 -Verb runas"

:END
exit /b 0
endlocal

') | sv -Name TempVar

#------------------------
# PowerShell Script
#------------------------

$strPath = $Env:Temp
$outputFilePath = "$strPath¥sample.txt"

echo "INFO, Start sample powershell script." | Out-File -Append $outputFilePath

exit 0

1) 管理者権限で実行しているかどうかをチェックし、管理者権限で実行していない場合は自身を再起動する

2) 32bitか64bitかを判定し、実行するpowershell.exeを選別する

3) Powershellスクリプトを実行する