WSLは各ユーザのプロファイルで起動しましたが、
portproxyの設定は管理者権限で動かさないといけません
(でした。よく知らないので...)
こんな感じのスクリプトを動かします。
function ipwsl() {
return (Get-HnsEndpoint).IPAddress
}
$ip = ipwsl
if ( $ip -eq "" ) {
exit 1
}
netsh interface portproxy reset
netsh interface portproxy add v4tov4 listenport=22 connectaddress=$ip `
connectport=22 listenaddress=0.0.0.0
exit 0
これを C:\path\to\pp.ps1
として保存します。
管理者権限のpowershellから動かすとうまく動きます。
> powershell.exe -ExecutionPolicy ByPass C:\path\to\pp.ps1
準備OKです。
タスクスケジューラで管理者権限を使って
このスクリプトを動かすには以下をチェックします。
- Administratorsのユーザを指定
- 「ユーザーがログオンしているかどうかにかかわらず実行する」を指定
- 「最上位の特権で実行する」をon
これだけで行けるはず...(仕様とか知らないけど...)
そう思い、プログラムを指定します。
- powershell.exe
-ExecutionPolicy ByPass C:\path\to\pp.ps1
このように指定しても、うまく実行できません。
管理者権限で動いような...ただ実行結果が見えないんでよくわからないんですが...
何してもよくわからないんで、ネットを調べると
YAMK BLOG
というところで
一旦 batch をかませるとよい
という話が書いてあったのでやってみることに
powershell -Command "Start-Process powershell.exe
-ArgumentList @(\"-ExecutionPolicy\", \"ByPass\",
\"c:\\path\\to\\pp.ps1\")" -Verb runas -Wait -WindowStyle Hidden
※1行で書く
このスクリプトをタスクスケジューラに登録したら、
管理者権限でpowershellのスクリプトが動きました。
続きを読む…