使用批处理文件中的参数运行 Powershell

使用批处理文件中的参数运行 Powershell

我有这个 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'
    

支持资源

答案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 }”

相关内容