#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
}

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS