はじめに
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スクリプトを実行する