【问题标题】:Couldn't run PowerShell script using batch file [duplicate]无法使用批处理文件运行 PowerShell 脚本 [重复]
【发布时间】:2021-03-27 20:30:49
【问题描述】:

我编写了一个 PowerShell 脚本来授予运行权限以在没有管理员权限的情况下运行。所以我需要从批处理文件中运行该脚本。在这里,我附上了我的 PowerShell 脚本和批处理文件。我无法从我的批处理文件运行 PowerShell 脚本。

Access.ps1

powershell -File "%~dpn0.ps1" %*
Start-Process PowerShell -ArgumentList "Set-ExecutionPolicy Unrestricted -Force" -Verb RunAs
$key = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey("SOFTWARE\Wow6432Node\Unicorn",[Microsoft.Win32.RegistryKeyPermissionCheck]::ReadWriteSubTree,[System.Security.AccessControl.RegistryRights]::ChangePermissions)
$acl = $key.GetAccessControl()
$rule = New-Object System.Security.AccessControl.RegistryAccessRule (".\USERS","FullControl",@("ObjectInherit","ContainerInherit"),"None","Allow")
$acl.SetAccessRule($rule)
$key.SetAccessControl($acl)

Write-Host "Successfully set permission to PM Registry!"

Access.bat

@ECHO OFF
PowerShell.exe -Command "& '%~dpn0.ps1'"
PAUSE

这是错误

【问题讨论】:

  • Access.ps1 真的以powershell -File "%~dpn0.ps1" %* 开头,还是复制粘贴错误?如果是错误,请edit问题。还有,会发生什么?有错误信息吗?没有?输出错误?
  • @vonPryz 更新错误

标签: powershell batch-file


【解决方案1】:

在您的系统上,不允许执行 PowerShell 脚本。通过执行(具有管理权限)允许它:

Set-ExecutionPolicy RemoteSigned

或者绕过它(在你的.bat):

PowerShell.exe -ExecutionPolicy Bypass -File .\Access.ps1

Access.ps1 内部,下面这行几乎没用:

Start-Process PowerShell -ArgumentList "Set-ExecutionPolicy Unrestricted -Force" -Verb RunAs

因为您已经需要执行脚本的权限才能运行此脚本。

【讨论】:

  • 我遵循了您的第二个选项,然后我得到以下输出 -File 参数的参数 '.\Access.ps1' 不存在。提供现有“.ps1”文件的路径作为 -File 参数的参数。 @托马斯
  • PSVersion 5.1.18362.145
  • @LasalSenarath 当然,您必须提供脚本的正确路径。 .\Access.ps1 是一个相对路径,意味着这个文件应该在你的工作目录中。
  • 这两个文件(.bat 和 .ps1)与其他 dll 文件位于同一目录中。 .ps 的最后一行可以在输出中看到。你能给我一个例子,在 bat 文件中放置一个绝对路径@Thomas
  • 我将“PowerShell -File”%~dpn0.ps1“%*”放在 .ps1 文件中不是问题,因此相对路径和绝对路径都适用于这个解决方案。谢谢@Thomas
猜你喜欢
  • 1970-01-01
  • 2011-09-05
  • 2012-10-20
  • 1970-01-01
  • 2013-10-20
  • 2013-02-18
  • 2019-08-10
  • 1970-01-01
  • 2013-07-30
相关资源
最近更新 更多