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
來幫助傳播這個詞!
贊助商或捐贈