GSUDO是Windows的sudo
等效物,其用户体验与原始Unix/Linux Sudo相似。允许您在当前的控制台窗口或新的窗口中使用高架权限运行命令(或重新启动当前的外壳)。
只需将gsudo
(或sudo
别名)预先放置到您的命令中,它将运行。用于PowerShell使用此语法: gsudo { ScriptBlock }
每次都会出现一个UAC弹出窗口。如果启用GSUDO缓存,您可以更少的弹出窗口。
它检测您当前的外壳并将您的命令提升为本机壳命令。 (支持Cmd
, PowerShell
, WSL
, git-bash
, MinGW
, Cygwin
, Yori
, Take Command
, BusyBox
& NuShell
。)
GSUDO-窗户的Sudo
PowerShell / Powershell核心的使用
WSL的使用(Linux的Windows子系统)
Powershell模块
目录
演示
特征
安装
用法
配置
凭证缓存
已知问题
常问问题
请支持Gsudo! ?
扩展文档可用:https://gerardog.github.io/gsudo/
(使用gsudo config CacheMode auto
)
高架命令显示在当前控制台中。没有新窗口(除非您指定-n
)
凭据缓存: gsudo
可以多次提升,如果用户选择启用缓存,则只显示一个UAC弹出窗口。
检测您当前的外壳(支持CMD
, PowerShell
, WSL
, Bash for Windows
(git-bash/mingw/msys2/cygwin), Yori
, Take Command
and NuShell
),并正确提高了命令。
支持在脚本上使用:
输出stdout /stderr可以被管道或捕获(例如gsudo dir | findstr /c:"bytes free" > FreeSpace.txt
)和退出代码( %errorlevel%
)。如果gsudo
无法提升,则出口代码为999。
如果从已经升高的控制台调用gsudo
,它将仅运行命令(不会失败)。因此,您不必担心是否运行gsudo
或使用已提升控制台的gsudo
的脚本。 (由于不需要高程,因此不会出现UAC弹出窗口)
gsudo !!
提升最后执行的命令。在CMD,Git-Bash,Mingw,Cygwin上工作(仅使用GSUDO模块)
使用勺子: scoop install gsudo
使用Winget: winget install gerardog.gsudo
使用巧克力: choco install gsudo
运行此行:(脚本):
powerShell -command“ set -execution -policy远程设计-Scope Process; [net.ServicePointManager] :: SecurityProtocol ='TLS12'; IWR -USEB https://raw.githubusercercort.com/gerardog/gerardog/gerardog/gsudo/gsudo/gsudo/gsudo/gsudo/master/master/master/master/master/master/installgsudo.pss1 | iexps1 | iex1 | iex1 | iexi |
便携的:
从最新版本中下载gsudo.portable.zip
将与您的处理器体系结构(X64,X86或ARM64)相对应的文件夹从zip文件中提取到计算机上的合适目录。
可选地,如果尚未访问该目录,则将该目录添加到系统的路径环境变量中。
安装后,请重新启动所有控制台窗口,以确保刷新PATH
环境变量。
注意: gsudo.exe
是便携式的。不需要Windows服务或进行系统更改,除了将其添加到路径中。
gsudo [options]#启动您当前的shell levergsudo [options] {command} [args]#运行{command},使用升高的permissionsgsudo cache [on |关闭|帮助]#启动/停止凭据缓存会话。 (较少的UAC弹出窗口)GSUDO状态[-json |过滤器]#显示当前用户,缓存和控制台状态。gsudo! #重新运行最后一个命令为admin。 (YMMV)
新窗口选项:-n | - 新#在新的控制台/窗口中启动命令(并立即返回)。 -w | - 等#在新控制台中,等待命令结束。 - 保存#在运行命令后,保持高架外壳打开。 - keepwindow#在新控制台中运行命令后,请在关闭控制台/窗口之前索要按键。安全选项:-u | - 用户{usr}#作为指定的用户运行。要求密码。除非“ -i媒介”,否则本地管理员显示UAC -i | - integrity {v}#指定完整性级别:不信任,低,中,中倍,高(默认),系统 -s | - 系统#作为本地系统帐户(NT Authority System)运行。 -ti#作为NT ServicortedInstaller的成员运行 -K#杀死所有缓存的凭证。下次GSUDO运行时,将出现UAC弹出窗口。相关选项:-D | - 直接#跳过外壳检测。假设CMD Shell或CMD {命令}。 - loadProfile#升级PowerShell命令时,加载用户配置文件。其他选项:-loglevel {val}#设置最小日志级别以显示:ALL,调试,信息,警告,错误,无 - debug#启用调试模式。 -Copyns#将网络驱动器连接到高架用户。警告:冗长,互动要求提供证书 -Copyev#(已弃用)将环境变量复制到高架过程。 (默认控制台模式不需要) - chdir {dir}#在运行命令之前,将当前目录更改为{dir}。
注意:您可以在安装程序创建的任何地方使用sudo
别名。
示例:
GSUDO#在当前控制台窗口中提高当前外壳(支持CMD/PowerShell/PWSH CORE/YORI/take command/git -bash/cygwin)gsudo -n#启动在新的控制台窗口中启动当前外壳-N -W PowerShell 。 findstr /c:“ bytes free”> freespace.txt gsudo config loglevel“ error”#配置减少的logginggsudo config提示提示“ $ p [升高] $ g”#配置自定义的高架提示提示提示提示提示提示 - reset#reset#reset to default value#enable recortentials cache(simel uac popups):gsudo config cachemode:gsudo config cachemode汽车
gsudo
检测是否从PowerShell调用并提升PS命令(除非使用-d
来提升CMD命令)。
提升的命令将在不同的过程中运行,因此它无法访问父$variables
和范围。
提升命令或脚本块:将其包裹在{Curly Braces}中。
#语法:gsudo {scriptblock} gsudo [options] {scriptblock} [-args $ gringnt1 [...,$ grightn]];#示例:gsudo {entry-output“ hello world”}#带有-args $ mystring =“ hello world” gsudo {gsudo {输入输出$ args [0]} -args $ myString#输出被序列化为具有属性的psobject。$ services = gsudo {get-service'wsearch','winmgmt'} 书面输出$ services.displayname#也输入:示例list.get-childitem的示例提升迭代。 | gsudo {$ input.creationtime}
替代语法:
#通过以上的``$ lust:faste'$ pass值(不是引用的变量)。 ie $ myString =“ Hello world” Indoke-Gsudo {写入输出$ fuls:myString} #语法:Invoke-gsudo [-scriptblock] <scriptblock> [[-argumentList] <object []>] [-InputObject <psObject>] [-loadProfile | - 非专制] [-credential <pscredential>]
- PowerShell function. - Performs auto serialization of inputs & outputs. - You can prefix variables with the `$using:` scope modifier (like `$using:variableName`) and their serialized value is applied. - Use `-LoadProfile` or `-NoProfile` to override profile loading or not. - Use `-Credential` option for Run As User (same as `-u` but for `Get-Credentials`). - Better forwarding of your current context to the elevated instance (current Location, $ErrorActionPreference)
用法:gsudo'字符串字面'#变量替换示例:$ file ='c:我的secret.txt'; $ algorithm ='md5'; $ hash = gsudo'(get -filehash' $ file'-algorithm $ algorithm).hash“#或$ hash = gsudo”(get -filehash“ get -filehash” $ file“” $ file' -algorithm $ algorithm $ algorithm $ algorithm) .hash“
接受命令提升的字符串字面。
返回字符串列表。
可选:导入模块gsudoModule.psd1
到您的powershell配置文件中:
#将以下行添加到您的$ profile Import-module“ gsudomodule”#或run:nimport-module`gsudomodule` | |附加符号$配置文件
为此,将此行添加到您的个人资料(导入gsudoModule
之后):
SET-ALIAS提示GsudoPrompt
如果您尚未自定义您的PowerShell提示(例如,通过安装OH-MY-POSH),可以轻松添加一个红色#
,以表明当前过程已升高:
如果GSUDO缓存处于活动状态,则Test-IsGsudoCacheAvailable
RETURN将返回(意味着无UAC的高程)。
Test-IsProcessElevated
:如果当前过程升高,则返回为TRUE。
Test-IsAdminMember
:如果当前用户是Local Administrators
组的成员,则返回true,这意味着它可以提升。
在PowerShell中将语法自动完成为Gsudo。另外,它暗示了以前的3个命令,使您的工作流比以往任何时候都更加顺畅!
启用gsudo !!
在PowerShell上,提升了最后执行的命令。
添加功能:
在WSL上,高程和root
是不同的概念。 root
允许完全管理WSL,但不能完全管理Windows系统。使用WSL的本机su
或sudo
获得root
访问。要获得Windows盒上的管理特权,您需要提高WSL.EXE进程。 gsudo
允许(将出现UAC弹出窗口)。
在WSL BASH上,预先登录gsudo
以提升WSL命令或gsudo -d
for cmd命令。
#提升默认shellpc:〜$ gsudo #运行高架WSL Commandpc:〜$ GSUDO MKDIR/MNT/C/C/Windows/MyFolder#运行高架Windows Commandpc:〜$ GSUDO -D Notepad C:/Windows/windows/system32/drivers/drivers/drivers/eett/hosts PC:〜$ gsudo -d“记事本c:windowssystem32driversetchosts”#gsudo和命令ResconceRectionVal = $?;; if [$ retval -eq 0];然后是“成功”; elif [$ retval -eq $((999%256))];然后,#GSUDO故障退出代码(999)在WSL(999 MOD 256)上读取为231,回声“ Gsudo未能提升!”; ElseCho“ ElseCho”命令失败,带有Exit Code $ retval; fi; fi;
GSUDO配置#显示当前配置设置和值。 gsudo config {key} [ - global] [value]#读取或编写用户设置 gsudo config {key} [-global] - reset#reset config to默认值 - 全球#影响所有用户(覆盖用户设置)
Credentials Cache
如果启用和活动性,则允许仅使用一个UAC弹出窗口从父进程中提升几次。 5分钟无高程后,缓存会话将自动关闭(可通过gsudo config CacheDuration
配置超时)。
尽管这非常方便,但重要的是要了解其潜在的安全风险。即使Gsudo本身是安全的,固有的漏洞也在于主机过程。如果您的系统已经被恶意过程妥协,则可以操纵允许的过程(例如,CMD/PowerShell),并强迫主动的GSUDO缓存实例提高特权而不会触发UAC提示。
这种风险是使用凭据缓存的权衡。只要您有信心系统上没有恶意流程,缓存就可以安全使用。
这是Credentials Cache
模式:
Explicit:
默认值)每个高程显示一个UAC弹出窗口,除非手动启动缓存会话...
启动或停止缓存会话运行: gsudo cache {on | off}
这是默认模式。 (使用gsudo config CacheMode Explicit
恢复为此值)。
Auto:
类似于Unix-Sudo。第一个高程显示一个UAC弹出窗口,并自动启动缓存会话。
运行gsudo config CacheMode Auto
以使用此模式。
Disabled:
每个高程都显示一个UAC弹出窗口,尝试启动缓存会话将引发错误。
运行gsudo config CacheMode Disabled
以使用此模式。
无论如何,您可以使用gsudo -k
停止所有缓存会话。
了解更多
提升实例无法访问在非高级空间上连接的网络共享。这不是gsudo
问题,而是Windows的工作原理。使用--copyNS
将网络共享复制到高度的会话中,但这不是双向的,并且是交互式的(可能会提示用户/密码)。
gsudo.exe
可以放置在网络共享上,并将其调用为serversharegsudo {command}
但是如果您的当前文件夹是网络驱动器,则无效。例如,请勿将servershare
映射到Z:
然后Z:>gsudo do-something
。
请在“问题”部分报告问题。
为什么它命名为gsudo
而不是sudo
?
当我创建gsudo
时,大多数Windows流行的软件包经理(例如Chocolatey
and Scoop
上还有其他sudo
套餐,因此我别无选择地选择其他名称。 gsudo
安装程序为sudo
创建一个别名,因此请随时在命令行上使用sudo
调用gsudo
。
您为什么从.Net Framework 4.6
到.Net Core 7.0
迁移?
从v1.4.0开始,它是使用.Net 7.0
nativeaot构建的。它加载更快,使用较少的内存,并在没有安装任何.NET运行时的机器上运行。先前的版本<v1.3.0
使用了.NET 4.6,因为它包含在每个Windows 10/11安装中。
gsudo
是*nix sudo
的港口吗?
否gsudo
提醒原始Sudo关于用户期望。许多sudo
功能是*nix
特定的,永远无法有Windows
对应物。其他功能(例如sudoers
)可能会实现,但目前尚未实现。
有什么要求?它在Windows 7/8中有效吗?
它可以在Win7 SP1上使用。某些功能可能只能在Windows 10/11中起作用,例如提升为TrustedInstaller。
使用GSUDO后,如何返回上一个安全级别?
就像您使用Unix/Linux sudo
: gsudo
不会改变当前过程的方式相同,它启动了具有不同权限/完整性级别的新过程。要回到上一个级别,只需结束新过程即可。对于Command Prompt
或PowerShell
只需键入exit
即可。
请给我们一个明星!
通过在社交网络中提及gsudo
来帮助传播这个词!
赞助商或捐赠