如何在Windows上的powershell上执行sudo
每当我需要运行powershell脚本时,如果我添加如何在Windows上的powershell上执行sudo,windows,powershell,sudo,Windows,Powershell,Sudo,每当我需要运行powershell脚本时,如果我添加powershell.exe-nologo-executionpolicy bypass-File.\install.ps1unauthorizedAccessException,它就会抱怨安全问题。我只想运行此安装脚本,在windows上的powershell上键入的sudo等效于什么?您可以使用“以管理员身份运行”选项启动powershell: Start-Process powershell -Verb runAs 如果您有阻止脚本执行
powershell.exe-nologo-executionpolicy bypass-File.\install.ps1
unauthorizedAccessException,它就会抱怨安全问题。我只想运行此安装脚本,在windows上的powershell上键入的sudo等效于什么?您可以使用“以管理员身份运行”选项启动powershell:
Start-Process powershell -Verb runAs
如果您有阻止脚本执行的公司策略,则是。旁路不会更改您的配置文件(用户上下文)状态。这不是这些开关的设计(用例) Windows中没有sudo的直接比较,这与PowerShell无关。您要么是会话/应用程序中的管理员,要么不是。如果您正在安装软件,这意味着您必须是管理员。如果您正在进行全局系统范围的更改,这意味着您必须是管理员 有些人努力实现脚本、包装器函数和/或模块来模仿sudo MS PowerShell库中的模块。 在PowerShell中使用类似于sudo的功能 来自GitHub 从PowerShell安装PowerShell的Sudo,如果需要,请创建$profile 你没有一个: 在记事本中打开配置文件: 添加以下行并保存文件: sudo将在所有新的PowerShell windows使用中可用 …但这并没有改变Windows在处理安全边界时的期望 另见本问答 $^是一个变量,可扩展到上次执行的Powershell命令。 您可以使用runas作为另一个用户运行命令,因此 作品: 为了缩短一点,你可以用别名做一些魔术。坐 更多信息请看这个 编辑:一个警告-$^只执行管道或管道中的第一个命令 多命令行。如果需要重做一个完整的命令 加上管道或分号,使用Invoke History(调用历史记录) 默认为最后一个完整命令)
<强>注释< /强>:如果您想添加通用的、预打包的<>代码> SUDO < /C> >类似于PuthS壳的功能,请考虑
从中输入Administration
(psa
)功能,在的底部部分讨论
如果您已经从PowerShell运行,请使用启动进程-动词RunAs
,如下所示:
Start-Process -Verb RunAs powershell.exe -Args "-executionpolicy bypass -command Set-Location \`"$PWD\`"; .\install.ps1"
注:
- 脚本总是在新窗口中运行
- 由于新窗口的工作目录始终是
,因此预先设置了一个$env:windir\System32
调用,该调用将切换到调用者的工作目录(设置位置
)。$PWD
- 请注意,在PowerShell(Core)7+(
)中,这不再是必需的,因为调用方的当前位置是继承的pwsh.exe
- 请注意,在PowerShell(Core)7+(
- 执行
需要使用设置位置
而不是-Command
。-File
- 从好的方面来说,这样就不需要
-nologo
- 一般警告是,
可以更改传递给脚本的参数的解释方式(在您的情况下没有),因为它们的解释方式与从PowerShell中传递参数时的解释方式相同,而-Command
将它们视为文本-File
- 从好的方面来说,这样就不需要
cmd.exe
/strong>调用,则需要将上述内容封装在对PowerShell.exe
的外部调用中,这会使引用变得复杂,不幸的是:
powershell.exe -command "Start-Process -Verb RunAs powershell.exe -Args '-executionpolicy bypass -command', \"Set-Location `\"$PWD`\"; .\install.ps1\""
当然,您可以以交互方式:
- 右键单击PowerShell快捷方式(在任务栏、开始菜单或桌面上),选择
,打开以管理员权限运行的PowerShell窗口,然后从中运行以管理员身份运行
\install.ps1
- 或者,从现有的PowerShell窗口中,您可以使用
打开“以管理员身份运行”窗口,如中所示启动进程-Verb RunAs PowerShell.exe
-动词runas
来提升
我创建了一个类似这样的sudo函数,并将其添加到我的powershell配置文件中:
function sudo {
Start-Process @args -verb runas
}
示例:以管理员身份打开记事本以编辑主机文件
sudo notepad C:\Windows\System32\drivers\etc\hosts
如果您使用的是Chocolate(软件包管理器),则可以安装名为
sudo
然后你可以像Linux一样使用sudo,我实际上是在试着运行我在一个。同样的脚本在AppVeyor中运行得很好,所以这是一个惊喜/嗯…好吧,那么你完全控制了那个虚拟机?如果是,那么为什么执行策略受到限制?这是默认设置,但您可以使用Set ExecutionPolicy-ExecutionPolicy RemoteSigned更改该设置,这样就不需要绕过。本地脚本运行,远程脚本需要签名才能运行<代码>-ExecutionPolicy Bypass始终有效,而与有效的PowerShell执行策略无关。在确认/向UAC提示符提供管理员凭据后,您可以使用它来调用运行
启动流程-动词RunAs
的PowerShell实例,该实例将为您提供一个提升的流程。您链接到的第二个项目是启动流程-动词RunAs
的最小包装,它需要从PowerShell调用。然而,它的极简主义本质意味着它不能解决工作目录的问题。默认为$env:windir\System32
,也不启动进程。简而言之:这个包装根本不值得。如果您使用内置的管理员帐户,那么runas.exe/user:…
只会导致提升的(以管理员身份运行)进程-出于安全原因,默认情况下禁用该帐户<代码>$^
不是最近执行的PowerShell co
runas /user:domain\administrator $^
Start-Process -Verb RunAs powershell.exe -Args "-executionpolicy bypass -command Set-Location \`"$PWD\`"; .\install.ps1"
powershell.exe -command "Start-Process -Verb RunAs powershell.exe -Args '-executionpolicy bypass -command', \"Set-Location `\"$PWD`\"; .\install.ps1\""
function sudo {
Start-Process @args -verb runas
}
sudo notepad C:\Windows\System32\drivers\etc\hosts