从Windows获取参数在Powershell中运行



我试图在调用Powershell脚本时从运行窗口传递一些参数。看起来像这样: myscript "一些参数", "一些其他" 这可能吗?如果是这样,我如何将参数从它带到 powershell 脚本并使用它们? 到目前为止,我知道如何使用参数的"ValueFromPipelineByPropertyName"选项通过cmd请求用户输入参数,但这不是我想要的。 提前谢谢。

PowerShell 基本上提供了两种处理脚本参数的方法:

  • 自动变量$args保存所有参数的列表,然后可以通过索引访问这些参数:

    脚本:

    "1st argument: " + $args[0]
    "2nd argument: " + $args[1]
    "3rd argument: " + $args[2]
    

    调用:

    powershell.exe -File .script.ps1 "foo" "bar"
    

    输出:

    第一个参数:福 第二个参数:柱线 第三个参数:
  • 脚本开头的Param()部分获取分配给各个变量的参数值:

    脚本:

    Param(
    [Parameter()]$p1 = '',
    [Parameter()]$p2 = '',
    [Parameter()]$p3 = ''
    )
    "1st argument: " + $p1
    "2nd argument: " + $p2
    "3rd argument: " + $p3
    

    调用:

    powershell.exe -File .script.ps1 "foo" "bar"
    

    输出:

    第一个参数:福 第二个参数:柱线 第三个参数:

如果希望能够在不显式运行powershell.exe命令的情况下调用 PowerShell 脚本,则需要更改注册表中Microsoft.PowerShellScript.1类型的默认操作。您可能还需要调整系统上的执行策略 (Set-ExecutionPolicy RemoteSigned -Force)。

通常,您只会将$args用于非常简单的方案(按明确定义的顺序排列的少数参数)。完整的参数定义使您可以更好地控制参数处理(您可以将参数设置为可选或必需、定义参数类型、定义默认值、执行验证等)。

我几乎不明白你的问题。这是试图更接近你想要的。

您尝试通过Windows CMD调用Powershell脚本,如下所示:

powershell.exe myscript.ps1 parameter1 parameter2 anotherparameter

以上是如何获取未命名参数的。 您还可以查看命名参数,如下所示:

Powershell.exe myscript.ps1 -param1 "Test" -param2 "Test2" -anotherparameter "Test3"

您可以在CMD中接受来自使用"设置"的用户输入,如下所示:

set /p id="Enter ID: "

在powershell中,您将使用Read-host,如下所示:

$answer = Read-Host "Please input the answer to this question"

在脚本的顶部,您声明要传递的参数,这是我的build.ps1的示例

param (
[string] $searchTerm,
[ValidateSet('Remote', 'Local')][string] $sourceType = 'local',
[switch] $force
)
Write-Host $searchTerm

然后,您可以按以下顺序传递参数:

build.ps1 '1234' local -force

或带有命名参数

build.ps1 -searchTerm '1234' -sourceType local -force

最新更新