无法使用批处理文件运行PowerShell脚本

4

我编写了一个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" %* 开头吗?还是这只是复制粘贴错误?如果是错误,请[编辑]问题。另外,会发生什么?有错误信息吗?没有任何输出吗?还是输出错误? - vonPryz
@vonPryz 更新了错误。 - Lasal Senarath
1个回答

2

您的系统不允许执行PowerShell脚本。请以管理员权限执行以下命令,以允许执行:

Set-ExecutionPolicy RemoteSigned

或者可以通过以下方式绕过它(在你的.bat文件中):

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

Access.ps1 中,以下代码行几乎没有用处:
Start-Process PowerShell -ArgumentList "Set-ExecutionPolicy Unrestricted -Force" -Verb RunAs

由于您需要权限才能执行脚本来运行此脚本。


PSVersion 5.1.18362.145 - Lasal Senarath
@LasalSenarath 嗯,当然你必须提供正确的脚本路径。.\Access.ps1是一个相对路径,意味着该文件应该位于你的工作目录中。 - stackprotector
两个文件(.bat和.ps1)与其他dll文件在同一个目录中。.ps1文件的最后一行可以在输出中看到。你能给我一个在.bat文件中放置绝对路径的例子吗,@Thomas? - Lasal Senarath
这个目录也应该是你的工作目录。绝对路径看起来像这样:C:\Users\LasalSenarath\Desktop\scripts\Access.ps1 - stackprotector
1
我在.ps1文件中加入了"PowerShell -File "%~dpn0.ps1" %*",所以无论是相对路径还是绝对路径都可以使用这个解决方案。谢谢@Thomas。 - Lasal Senarath
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接