快捷使用指定 Windows Profile 执行程序

原文标题「新建一个账户就能隔离毒瘤应用:Windows 自带权限工具妙用」,但实质上是讲的通过快捷方式运行一段 PowerShell 指令,实现一键使用其他用户运行程序的效果。如果这里指定的其他用户不在管理员组,那么就可以限制程序的行为,包括自启动这些都能避免。

我仅挑选重要的片段进行记录整理,原文可以通过搜索引擎找到。

准备工作

把安装程序或者执行程序放到一个「公共」路径,这个路径要求所有的用户都能访问。通常下面两种路径符合这个条件:

  • C:\Users\Public\Downloads
  • 除了 C: 以外的其他分区根目录
  • 除了 C: 和其他分区 Program FilesProgram Files (x86) 以外的目录

现在假设程序的所在路径是 D:\Isolate\wechat-setup.exe

如果这是个安装包,那么需要确保即使没有管理员权限也能进行安装,否则这一套操作下来可能无法起到保护系统的作用,仅能实现使用不同的用户 profile 去执行程序的效果。

也可以尝试先把安装包使用 7-zip 进行解包,然后按照后面的部分继续设置。

建立新用户

建立一个新的用户来安装/执行程序。这里建立一个名为 IsolatedApps 的用户:

  1. 使用 Win+R 快捷键调出「运行」窗口,输入 compmgmt.msc 并按回车运行。
  2. 系统工具-本地用户和组-用户,右击鼠标-新用户。
  3. 输入用户名、密码和确认密码,取消勾选 用户下次登录时须更改密码,创建。

至此 IsolatedApps 用户创建完成。双击这个用户,转到 隶属于 选项卡,可以看到当前仅隶属于 Users 组。

Windows 属性界面,显示"属于"选项卡,列出 Users 组

仅隶属于 Users 组意味着 IsolatedApps 只能执行有限的操作,通过 IsolatedApps 运行的程序无法对系统进行更改,即有些不放心的软件无法作妖。而加入到 Administrators 组之后可以获得更高的权限,这种行为仅适合需要使用不同的用户身份运行且需要管理员权限的情况。比如原神多账号可以通过这种方法来实现一键登陆,因为使用了不同的 Windows profile,可以简单理解为换了台电脑登原神,而一个 Windows profile 就对应一台电脑。

安装软件

使用 Win+R 打开「运行」窗口,输入并执行 powershell。在 powershell 窗口中输入 $cred = Get-Credential 并回车,然后在弹出的窗口中输入用户名 IsolatedApps 和密码并确认。

继续在 powershell 中输入:

Start-Process powershell -ArgumentList '-Command Start-Process powershell' -Credential $cred -LoadUserProfile

回车确认,这一步是为了使用新的用户打开命令窗口。回车后会打开一个新的 powershell 窗口。接下来在新的窗口中进行操作:

  1. 输入 $env:__COMPAT_LAYER = 'RunAsInvoker' 并回车。
  2. 输入 cd ~ 回车,左边的光标提示符应该变为 C:\Users\IsolatedApps
  3. 输入 & '安装包路径'并回车,然后会打开安装界面。按照正常流程安装软件,但安装路径也需要是个公共路径,参考 [[#准备工作|准备工作]]。

在本例中应该输入 & 'D:\Isolate\wechat-setup.exe'。安装完成后继续在 powershell 中输入 cd ~/Desktop 然后 ls,检查刚刚安装的 wechat 是否出现在列表里。

准备启动器

关闭所有的 powershell 窗口,然后重新打开一个新的并继续执行:

$cred = Get-Credential
$cred.Password | ConvertFrom-SecureString | Set-Clipboard

这样就得到了一个加密密码字符串,并且已经设置到了剪贴板上。

接下来在 Winodws 开始菜单中打开 PowerShell ISE,然后在空白的编辑器里先贴上刚刚得到的字符串。接着把这些也贴到字符串下面:

$password = ''
$cred = [pscredential]::new('test', ($password | ConvertTo-SecureString))
Start-Process powershell -ArgumentList '-Command Invoke-Item ~\Desktop\wechat.lnk' -WorkingDirectory 'C:\' -Credential $cred -LoadUserProfile -WindowStyle Hidden
#Start-Process powershell -ArgumentList '-Command Start-Process "Path-To-Program"' -Credential $cred -LoadUserProfile -WindowStyle Hidden

把第一行的加密字符串剪切到 password 后面的单引号里面,然后按下 F5。如果没有问题,刚刚安装的软件(wechat)会被打开。

如果在 [[#安装软件|安装软件]] 最后没有看到 wechat 被列出来,则表示这个软件没有创建桌面快捷方式,需要使用上面脚本中被 # 号注释掉的方法来执行。

把 # 号剪切到上一行的 Start-Process 前面,然后修改 Path-To-Program 为刚刚安装的程序的直接执行文件的全路径。wechat 的运行路径是 C:\Program Files\Tencent\WeChat\wechat.exe,因此这一行代码修改为:

Start-Process powershell -ArgumentList '-Command Start-Process "C:\Program Files\Tencent\WeChat\wechat.exe"' -Credential $cred -LoadUserProfile -WindowStyle Hidden

接着按 F5 确保程序能打开。

到这里如果没有问题,那么按下 Ctrl-S 保存脚本到任意一个你能访问到的路径,这里假设存放路径是 C:\Users\Public\Documents\start-wechat.ps1

最后来到桌面上,右击-新建-快捷方式,位置写 powershell -ExecutionPolicy Unrestricted -File "C:\Users\Public\Documents\start-wechat.ps1"

新建的快捷方式除了修改名称和图标以外,还需要在 属性-快捷方式 中修改运行方式为最小化。然后就可以直接使用快捷方式来用 IsolatedApps 这个用户执行程序了。

收尾

前面创建了新的用户,如果不需要登陆到这个用户的桌面上,那么继续进行下面的操作使这个用户不再出现于锁屏界面中。

新建一个后缀为 .reg 的文件,输入以下内容,并把 … 替换为需要隐藏的用户名:

Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList] "..."=dword:00000000

保存-关闭-双击导入,完成。

Comments