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

はじめに

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

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

@(echo '> NUL
echo off)

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

exit /b 0
') | sv -Name TempVar

# PowerShellスクリプト

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

対象処理
bat側PowerShellを実行する
Powershell側実際にファイルを出力する処理を記載

@(echo '> 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スクリプトを実行する

タイトルとURLをコピーしました