Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Windows上的powershell上执行sudo_Windows_Powershell_Sudo - Fatal编程技术网

如何在Windows上的powershell上执行sudo

如何在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脚本时,如果我添加
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
      )中,这不再是必需的,因为调用方的当前位置是继承的
  • 执行
    设置位置
    需要使用
    -Command
    而不是
    -File
    • 从好的方面来说,这样就不需要
      -nologo
    • 一般警告是,
      -Command
      可以更改传递给脚本的参数的解释方式(在您的情况下没有),因为它们的解释方式与从PowerShell中传递参数时的解释方式相同,而
      -File
      将它们视为文本
如果您是从PowerShell外部调用的,通常是从批处理文件
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