#author("2025-03-06T22:50:18+09:00","default:admin","admin") #author("2025-03-06T22:50:31+09:00","default:admin","admin") #navi(../) #Contents ------------------------ PowerShellでRunOnceの登録を関数化する方法を紹介します。これにより、RunOnceのエントリを簡単に登録したり削除したりできるようになります。 **RunOnceの関数化 [#pa7524b2] 次のように、RunOnceエントリを追加するためのPowerShell関数を定義できます: function Set-RunOnce { param ( [string]$ScriptPath, [string]$ScriptName ) # レジストリキーのパス $RunOnceKey = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" # スクリプトのパスをレジストリに追加 Set-ItemProperty -Path $RunOnceKey -Name $ScriptName -Value $ScriptPath Write-Output "RunOnce entry added for: $ScriptName" } function Remove-RunOnce { param ( [string]$ScriptName ) # レジストリキーのパス $RunOnceKey = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" # RunOnceエントリを削除 Remove-ItemProperty -Path $RunOnceKey -Name $ScriptName Write-Output "RunOnce entry removed for: $ScriptName" } **使用方法 [#od44c27f] Set-RunOnceを使用してエントリを追加 Set-RunOnce -ScriptPath "C:\path\to\your\script.bat" -ScriptName "MyScript" これにより、RunOnceにMyScriptという名前で、指定したスクリプトが追加されます。 Remove-RunOnceを使用してエントリを削除 Remove-RunOnce -ScriptName "MyScript" これにより、RunOnceからMyScriptエントリが削除されます。 **説明 [#c6c34686] -Set-RunOnce関数は、指定したスクリプトのパスと名前をRunOnceに追加します。 -Remove-RunOnce関数は、指定した名前のRunOnceエントリを削除します。 -レジストリのHKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceに直接操作を行っています。 これにより、RunOnceエントリを簡単に管理することができます。 ***関数 [#y14a8f68] ### --------------------------------------------------------------------------- ### RunOnceでPowerShellスクリプトを実行する関数 ### --------------------------------------------------------------------------- function Set-RunOnceAndExecute { param ( [string]$ScriptPath, [string]$ScriptName ) # レジストリキーのパス $RunOnceKey = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" # スクリプトをRunOnceに登録 Set-ItemProperty -Path $RunOnceKey -Name $ScriptName -Value "powershell.exe -ExecutionPolicy Bypass -File $ScriptPath" Write-Output "RunOnce entry added for: $ScriptName" # スクリプトが実行された後、RunOnceエントリを削除する関数 $removeScript = { # 一度スクリプトを実行した後、RunOnceエントリを削除 Remove-ItemProperty -Path $RunOnceKey -Name $ScriptName Write-Output "RunOnce entry removed for: $ScriptName" } # スクリプトを実行 Start-Process "powershell.exe" -ArgumentList "-ExecutionPolicy Bypass -File $ScriptPath" -NoNewWindow -Wait # 実行後にエントリを削除 & $removeScript }