我有这个 PowerShell 命令,我直接从 Windows 10 系统上的 PowerShell 终端运行它,并且运行良好。
电源外壳
Get-AppxPackage | % { Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppxManifest.xml" -verbose }
我正在尝试创建一个批处理文件来自动化此 PowerShell,但遇到了麻烦。我尝试了很多不同的方法,但测试结果都不太理想。
我想知道是否有人对使用批处理文件和使用参数运行 PowerShell 命令有一些建议或示例。
答案1
接受参数的批处理脚本
这是一个批处理脚本,其中的参数设置为变量,这些变量传递给 PowerShell 脚本并执行。您可以通过这种方式使用批处理执行 PowerShell 脚本。
批处理脚本示例
扩展批处理参数随后SET arg#=%~#
@ECHO ON
SET arg1=%~1
SET arg2=%~2
SET arg3=%~3
SET arg4=%~4
SET PSScript=C:\Users\User\Desktop\Test.ps1
SET PowerShellDir=C:\Windows\System32\WindowsPowerShell\v1.0
CD /D "%PowerShellDir%"
Powershell -ExecutionPolicy Bypass -Command "& '%PSScript%' '%arg1%' '%arg2%' '%arg3%' '%arg4%'"
EXIT /B
接受参数的 Powershell 脚本
扩展PowerShell 参数随后$arg#=$args[#]
PowerShell 脚本示例
$arg1=$args[0]
$arg2=$args[1]
$arg3=$args[2]
$arg4=$args[3]
Write-Host "$arg1 is a beauty!!"
Write-Host "$arg2 is cool!!"
Write-Host "$arg3 has body odor!!"
Write-Host "$arg4 is a beast!!"
将它们结合在一起
将参数传递给批处理脚本:
c:\users\user\desktop\test.cmd "Princess" "Joe" "Akbar" "WeiWei"
将参数传递给 PowerShell 脚本:
-
Powershell -ExecutionPolicy Bypass -Command "& 'C:\Script\Path\psscript.ps1' 'Princess' 'Joe' 'Akbar' 'WeiWei'
支持资源
-
批处理脚本中的 %* 指的是所有参数(例如 %1 %2 %3 %4 %5 ...%255),只有参数 %1 到 %9 可以用数字引用。
-
调用运算符(&)允许您执行命令、脚本或函数。
答案2
我解决了在 Powershell ISE 中创建脚本 .ps1 文件的问题,之后我进入 Powershell 窗口并输入此命令以允许脚本运行:Set-ExecutionPolicy RemoteSigned 并使用以下行创建一个 .bat 文件:Powershell.exe -executionpolicy remotesigned -File "ps1_file_path\ps1_file_name.ps1" 并且一切正常。
答案3
您可以通过将命令作为参数传递给命令来从 cmd/bat 文件运行 PowerShell 命令powershell
。让您的批处理文件看起来像这样。请注意,我还没有检查这与引号的关系——特别是单引号如何与内部变量和双引号一起发挥作用。
powershell -command “Get-AppxPackage | ForEach-Object { Add-AppxPackage -DisableDevelopmentMode -Register “”$($_.InstallLocation)\AppxManifest.xml”” -verbose }”