Windows10 开机运行 powershell 脚本(管理员权限)

  • 创建 Task Scheduler,并给与最高权限
  • Task Scheduler 不能直接运行*.ps1, 需要额外创建一个命令脚本 *.cmd

例子

  • 我的脚本文件 C:\Users\jiang\Documents
  • 脚本功能是把 WSL2 Ubuntu 内部端口暴露到 Windows 所在的局域网.

创建 powershell 脚本

wsl2-export-ports.ps1

$remoteport = bash.exe -c "ifconfig eth0 | grep 'inet '"
$found = $remoteport -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}';

if( $found ){
  $remoteport = $matches[0];
} else{
  echo "The Script Exited, the ip address of WSL 2 cannot be found";
  exit;
}

#[Ports]

#All the ports you want to forward separated by coma
$ports=@(7101,8101,8301);


#[Static ip]
#You can change the addr to your ip config to listen to a specific address
$addr='0.0.0.0';
$ports_a = $ports -join ",";


#Remove Firewall Exception Rules
iex "Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' ";

#adding Exception Rules for inbound and outbound Rules
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Outbound -LocalPort $ports_a -Action Allow -Protocol TCP";
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Inbound -LocalPort $ports_a -Action Allow -Protocol TCP";

for( $i = 0; $i -lt $ports.length; $i++ ){
  $port = $ports[$i];
  iex "netsh interface portproxy delete v4tov4 listenport=$port listenaddress=$addr";
  iex "netsh interface portproxy add v4tov4 listenport=$port listenaddress=$addr connectport=$port connectaddress=$remoteport";
}

echo "Success!";

创建命令脚本运行 ps1

wsl2-export-ports.cmd

PowerShell -Command "Set-ExecutionPolicy Unrestricted" >> "C:\Users\jiang\Documents\wsl2-export-ports.txt" 2>&1
PowerShell C:\Users\jiang\Documents\wsl2-export-ports.ps1 >> "C:\Users\jiang\Documents\wsl2-export-ports.txt" 2>&1

在 Task Scheduler 中添加新任务

创建基础任务

Task Scheduler -> Create Basic Task...

  • Name: Wsl2ExportPorts
  • When: When I log on
  • Action: Start a program
  • Program/script: C:\Users\jiang\Documents\wsl2-export-ports.cmd

添加管理员权限

  • Task Scheduler Library 查找 Wsl2ExportPorts
  • Wsl2ExportPorts 属性中选中 Run with highest privileges
  • 点击 OK
  • 测试运行:右击 Run,可以检查wsl2-export-ports.txt里的日志输出 .

最终重启永久生效

你可能感兴趣的:(Windows10 开机运行 powershell 脚本(管理员权限))