PowerShell的命令⾏启动参数(可⽤于执⾏命令、传参或进⾏环境配置)
有⼀些程序不⽀持被直接启动,⽽要求通过命令⾏启动。这个时候,你就需要使⽤ PowerShell 或者 PowerShell Core 来启动这样的程序。我们都知道如何在命令⾏或各种终端中启动⼀个程序,但是当你需要⾃动启动这个程序的时候,你就需要知道如何通过 PowerShell 或其他命令⾏终端来启动⼀个程序,⽽不是⼿⼯输⼊然后回车运⾏了。
本⽂就介绍 PowerShell 的命令⾏启动参数。利⽤这些参数,你可以⾃动化地通过 PowerShell 程序来完成⼀些原本需要通过⼿⼯执⾏的操作或者突破⼀些限制。
本⽂内容
⼀些必须通过命令⾏启动的程序
⼀般来说,编译⽣成的 exe 程序都可以直接启动,即便是命令⾏程序也是如此。但是有⼀些程序就是要做⼀些限制。⽐如下⾯的 FRP 反向代理程序:
借助 来启动的⽅法可以参见我的另⼀篇博客:
那么我们如何能够借助于 PowerShell 或者 PowerShell 来启动它呢?
PowerShell 的帮助⽂档
先打开⼀个 PowerShell。
对于 Windows ⾃带的基于 .NET Framework 的 PowerShell,使⽤ powershell 命令可以直接启动 PowerShell。对于基于 .NET Core 版本的 PowerShell Core,使⽤ pwsh 命令可以直接启动。
关于 .NET Core 版本的 PowerShell Core 可以参见我的另⼀篇博客:
接下来输⼊下⾯三个命令中的任何⼀个:
PowerShell -Help
PowerShell -?
PowerShell /?
或者对于 PowerShell Core 来说,是下⾯三个命令中的任何⼀个:
pwsh -Help
pwsh -?
pwsh /?
你就可以看到 PowerShell 的使⽤说明:
PowerShell 的启动参数⽰例
使⽤ PowerShell 间接启动⼀个程序并传⼊参数
下⾯的命令,使⽤ PowerShell 间接启动 反向代理程序,并给 程序传⼊ -c ./frpc.ini 的启动参数:
> pwsh -Command "D:\ -c ./frpc.ini"
或者简写为:
> pwsh -c "D:\ -c ./frpc.ini"
实际上使⽤ PowerShell 来做这些事情简直是⽤⽜⼑杀鸡,因为本⾝ PowerShell ⾮常强⼤。我们只是因为⼀些程序的限制不得不使⽤这样的⽅案来启动程序⽽已。
⽐如其中之⼀,执⾏脚本。
使⽤ PowerShell 间接执⾏⼀个脚本
# 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}"
附 PowerShell 的全部启动参数说明
PowerShell[.exe] [-PSConsoleFile <⽂件> | -Version <;版本>]
[-NoLogo] [-NoExit] [-Sta] [-Mta] [-NoProfile] [-NonInteractive]
[-InputFormat {Text | XML}] [-OutputFormat {Text | XML}]
[-WindowStyle <;样式>] [-EncodedCommand <Base64 编码命令>] [-ConfigurationName <;字符串>]
[-File <⽂件路径> <;参数>] [-ExecutionPolicy <;执⾏策略>]
[-Command { - | <;脚本块> [-args <;参数数组>]
| <;字符串> [<;命令参数>] } ]
PowerShell[.exe] -Help | -? | /?
-PSConsoleFile
加载指定的 Windows PowerShell 控制台⽂件。若要创建控制台
⽂件,请在 Windows PowerShell 中使⽤ Export-Console。
-Version
启动指定版本的 Windows PowerShell。
使⽤参数输⼊版本号,如 "-version 2.0"。
-NoLogo
启动时隐藏版权标志。
-
NoExit
运⾏启动命令后不退出。
-Sta
使⽤单线程单元启动 shell。
单线程单元(STA)是默认值。
-Mta
使⽤多线程单元启动 shell。
-NoProfile
不加载 Windows PowerShell 配置⽂件。
-NonInteractive
不向⽤户显⽰交互式提⽰。
-
InputFormat
描述发送到 Windows PowerShell 的数据的格式。有效值为
"Text" (⽂本字符串)或 "XML" (序列化的 CLIXML 格式)。
-OutputFormat
确定如何设置 Windows PowerShell 输出内容的格式。有效值
为 "Text" (⽂本字符串)或 "XML" (序列化的 CLIXML 格式)。
-WindowStyle
将窗⼝样式设置为 Normal、Minimized、Maximized 或 Hidden。
-EncodedCommand
接受 base-64 编码字符串版本的命令。使⽤此参数
向 Windows PowerShell 提交需要复杂引号
或⼤括号的命令。
或⼤括号的命令。
-ConfigurationName
指定运⾏ Windows PowerShell 的配置终结点。
session如何设置和读取该终结点可以是在本地计算机上注册的任何终结点,包括
默认的 Windows PowerShell 远程处理终结点或具有特定⽤户⾓⾊功能
的⾃定义终结点。
-File
在本地作⽤域("dot-sourced")中运⾏指定的脚本,以便
脚本创建的函数和变量可以在当前
会话中使⽤。输⼊脚本⽂件路径和任何参数。
File 必须是命令中的最后⼀个参数,因为在 File 参数
名称后⾯键⼊的所有字符都将解释
为后跟脚本参数的脚本⽂件路径。
-ExecutionPolicy
设置当前会话的默认执⾏策略,并将其保存
在 $env:PSExecutionPolicyPreference 环境变量中。
该参数不会更改在注册表中
设置的 Windows PowerShell 执⾏策略。
-Command
执⾏指定的命令(和任何参数),就好像它们是
在 Windows PowerShell 命令提⽰符下键⼊的⼀样,然后退出,除⾮
指定了 NoExit。Command 的值可以为 "-"、字符串或
脚本块。
如果 Command 的值为 "-",则从标准输⼊中读取
命令⽂本。
如果 Command 的值为脚本块,则脚本块必须
⽤⼤括号({})括起来。只有在 Windows PowerShell 中运⾏ 时,才能指定脚本块。脚本块的结果将作为反序列化的 XML 对象
(⽽⾮活动对象)返回到⽗ Shell。
如果 Command 的值为字符串,则 Command 必须是命令中的
最后⼀个参数,因为在命令后⾯键⼊的所有字符
都将解释为命令参数。
若要编写运⾏ Windows PowerShell 命令的字符串,请使⽤以下格式:
"& {<;命令>}"
其中,引号表⽰⼀个字符串,调⽤运算符(&)
导致执⾏命令。
-Help, -?, /?
显⽰此消息。如果在 Windows PowerShell 中键⼊
命令,请在命令参数前⾯添加连字符(-),⽽不是添加正
斜杠(/)。你可以在 中使⽤连字符或正斜杠。
⽰例
PowerShell -PSConsoleFile SqlSnapIn.Psc1
PowerShell -version 2.0 -NoLogo -InputFormat text -OutputFormat XML
PowerShell -ConfigurationName AdminRoles
PowerShell -Command {Get-EventLog -LogName security}
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)
< -encodedCommand $encodedCommand
如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 欢迎⼤家加⼊。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论