[-EncodedCommand ] [-ConfigurationName ] [-File - | ] [-ExecutionPolicy ] [-Command - | { [-args ] } | { [] } ] PowerShell[.exe] -Help | -? | /?

-Command

执行指定的命令 (和任何参数) ,就像在 PowerShell 命令提示符处键入一样,然后退出,除非 NoExit 指定了 参数。

Command 的值可以是 - 、脚本块或字符串。 如果 Command - 的值为 ,则从标准输入读取命令文本。

Command 参数仅在可以将传递给 Command 的值识别为 ScriptBlock 类型时,才接受用于执行的 脚本 块。 当从另一台 PowerShell 主机运行时 powershell.exe ,才可能执行此操作。 在传递给 powershell.exe 之前, ScriptBlock 类型可以包含在现有变量中、从表达式返回或由 PowerShell 主机分析为大括号 ( {} ) 括在大括号中的文字脚本块。

powershell -Command {Get-WinEvent -LogName security}

在 中 cmd.exe,没有脚本块 (或 ScriptBlock 类型) ,因此传递给 Command 的值 将始终 是字符串。 可以在字符串中编写一个脚本块,但它不会被执行,该脚本块的行为与你在典型 PowerShell 提示符中键入它的行为完全相同,即将脚本块内容输出出来返还给你。

传递给 Command 的字符串仍作为 PowerShell 代码执行,因此从 cmd.exe运行 时,通常不需要脚本块大括号。 若要执行字符串中定义的内联脚本块,可以使用 call 运算符&

powershell.exe -Command "& {Get-WinEvent -LogName security}"

如果 Command 的值为字符串, 则 Command 必须是 pwsh 的最后一个参数,因为它后面的所有参数都解释为要执行的命令的一部分。

从现有 PowerShell 会话中调用时,结果作为反序列化的 XML 对象(而不是实时对象)返回到父 shell。 对于其他 shell,结果以字符串的形式返回。

如果 Command-的值为 ,则从标准输入读取命令文本。 将 Command 参数与标准输入配合使用时,必须重定向标准输入。 例如:

"hi" | % { "$_ there" } "out" '@ | powershell -NoProfile -Command -

该示例产生下面的输出:

hi there

进程退出代码由脚本块中最后一个 () 命令的状态确定。 退出代码是 0$?$true1$?$false。 如果最后一个命令是显式设置 或 1以外的0退出代码的外部程序或 PowerShell 脚本,则退出代码将转换为 1 进程退出代码。 若要保留特定的退出代码,请将 添加到 exit $LASTEXITCODE 命令字符串或脚本块。

有关详细信息,请参阅 $LASTEXITCODEabout_Automatic_Variables

同样,当脚本终止 (运行空间终止) 错误(如 throw-ErrorAction Stop)发生时,或者当使用 Ctrl+C 中断执行时,将返回值 1。

-ConfigurationName <字符串>

指定运行 PowerShell 的配置终结点。 这可以是在本地计算机上注册的任何终结点,包括默认 PowerShell 远程处理终结点或具有特定用户角色功能的自定义终结点。

-EncodedCommand <Base64EncodedCommand>

接受命令的 base-64 编码字符串版本。 使用此参数将命令提交到需要复杂的引号或大括号的 PowerShell。 必须使用 UTF-16LE 字符编码设置字符串的格式。

-ExecutionPolicy <ExecutionPolicy>

设置当前会话的默认执行策略,并将其保存在环境变量中 $env:PSExecutionPolicyPreference 。 此参数不会更改在注册表中设置的 PowerShell 执行策略。 若要了解 PowerShell 执行策略(包括有效值列表),请参阅 about_Execution_Policies

-File - | <filePath><args>

如果 File-的值为 ,则从标准输入读取命令文本。 在没有重定向的标准输入的情况下运行 powershell -File - 将启动常规会话。 这与根本不指定 File 参数相同。

如果 File 的值是文件路径,则脚本在本地范围 (“dot-sourced”) 运行,以便脚本创建的函数和变量在当前会话中可用。 输入脚本文件路径和任何参数。 “文件”必须是命令中的最后一个参数。 在 File 参数之后键入的所有值都解释为脚本文件路径和传递给该脚本的参数。

传递给脚本的参数作为文字字符串(在当前 shell 的解释后)传递。 例如,如果处于 cmd.exe 并且想要传递环境变量值,则可以使用 cmd.exe 语法: powershell.exe -File .\test.ps1 -TestParam %windir%

相比之下,在 cmd.exe 中运行powershell.exe -File .\test.ps1 -TestParam $env:windir会导致脚本接收文本字符串$env:windir,因为它对当前 cmd.exe shell 没有特殊含义。 $env:windir环境变量引用的样式可以在Command 参数中使用,因为该参数将解释为 PowerShell 代码。

同样,如果要从 Batch 脚本执行相同的命令,可以使用 %~dp0 而不是 .\$PSScriptRoot 来表示当前执行目录: powershell.exe -File %~dp0test.ps1 -TestParam %windir%。 如果改用 .\test.ps1,PowerShell 将引发错误,因为它找不到文本路径 .\test.ps1

File 的值是文件路径时, File必须是 命令中的最后一个参数,因为在 File 参数名称后键入的任何字符都将解释为脚本文件路径,后跟脚本参数。

可以在 File 参数的值中包含脚本参数和值。 例如:-File .\Get-Script.ps1 -Domain Central

通常,将包括或忽略脚本的开关参数。 例如,以下命令使用脚本文件的 All 参数 Get-Script.ps1-File .\Get-Script.ps1 -All

在极少数情况下,可能需要为参数提供 布尔 值。 以这种方式运行脚本时,无法为 switch 参数传递显式布尔值。 PowerShell 6 () pwsh.exe 中删除了此限制。

File 参数不能支持使用需要参数值数组的参数的脚本。 遗憾的是,这是本机命令获取参数值的方式的限制。 调用本机可执行文件 ((如 powershellpwsh) )时,它不知道该如何处理数组,因此会将其作为字符串传递。

当脚本文件使用 exit 命令终止时,进程退出代码将设置为与 命令一起使用的 exit 数值参数。 正常终止时,退出代码始终 0为 。

有关详细信息,请参阅 $LASTEXITCODEabout_Automatic_Variables

-InputFormat {文本 |XML}

描述发送到 PowerShell 的数据格式。 有效值 (Text 文本字符串) 或 XML (序列化 CLIXML 格式) 。

使用多线程单元启动 PowerShell。 此参数是在 PowerShell 3.0 中引入的。 在 PowerShell 2.0 中,多线程单元 (MTA) 是默认设置。 在 PowerShell 3.0 中,单线程单元 (STA) 是默认设置。

-NoExit

运行启动命令后不退出。

-NonInteractive

此开关用于创建不应需要用户输入的会话。 这对于在计划任务或 CI/CD 管道中运行的脚本非常有用。 任何使用交互式功能(如 Read-Host 或确认提示)的尝试都会导致语句终止错误,而不是挂起。

启动时隐藏版权横幅。

-NoProfile

不加载 PowerShell 配置文件。

-OutputFormat {文本 | XML}

确定 PowerShell 输出内容的格式。 有效值 (Text 文本字符串) 或 XML (序列化 CLIXML 格式) 。

-PSConsoleFile <FilePath>

加载指定的 PowerShell 控制台文件。 输入控制台文件的路径和名称。 若要创建控制台文件,请使用 PowerShell 中的 Export-console cmdlet。

使用单线程单元启动 PowerShell。 在 Windows PowerShell 2.0 中,多线程单元 (MTA) 是默认设置。 在 Windows PowerShell 3.0 中,单线程单元 (STA) 是默认设置。

-Version <PowerShell Version>

启动 PowerShell 的指定版本。 有效值为 2.0 和 3.0。 必须在系统上安装指定的版本。 如果计算机上安装了 Windows PowerShell 3.0,则默认版本为“3.0”。 否则,“2.0”为默认版本。 有关详细信息,请参阅 安装 PowerShell

-WindowStyle <窗口样式>

为会话设置窗口样式。 有效值为 NormalMinimizedMaximizedHidden

-Help、-?、/?

显示 的 PowerShell.exe帮助。 如果在 PowerShell 会话中键入 PowerShell.exe 命令,请在命令参数前面加上连字符 (-) ,而不是正斜杠 (/) 。 可以在 中使用 cmd.exe连字符或正斜杠。

REMARKS

故障排除说明:在 PowerShell 2.0 中,从 PowerShell 控制台启动某些程序失败, LastExitCode 为 0xc0000142。

# Create a new PowerShell session and load a saved console file
PowerShell -PSConsoleFile sqlsnapin.psc1
# Create a new PowerShell V2 session with text input, XML output, and no logo
PowerShell -Version 2.0 -NoLogo -InputFormat text -OutputFormat XML
# Execute a PowerShell Command in a session
PowerShell -Command "Get-EventLog -LogName security"
# Run a script block in a session
PowerShell -Command {Get-EventLog -LogName security}
# An alternate way to run a command in a new session
PowerShell -Command "& {Get-EventLog -LogName security}"
# To use the -EncodedCommand parameter:
$command = "dir 'c:\program files' "
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)
powershell.exe -encodedCommand $encodedCommand