我试图在调用powershell脚本时从Windows运行传递一些参数。看起来像这样: myscript"一些参数","其他一些" 这甚至可能吗?如果是这样,我如何将其中的参数带到powershell脚本并使用它们? 到目前为止,我得到了如何通过cmd使用" ValueFromPipelineByPropertyName"来询问用户输入参数。参数的选项,但它不是我想要的。 提前谢谢。
答案 0 :(得分:1)
PowerShell本质上提供了两种处理脚本参数的方法:
automatic variable $args
包含所有参数的列表,然后可以通过索引访问:
脚本:
"1st argument: " + $args[0]
"2nd argument: " + $args[1]
"3rd argument: " + $args[2]
调用:
powershell.exe -File .\script.ps1 "foo" "bar"
输出:
1st argument: foo 2nd argument: bar 3rd argument:
脚本开头的Param()
section获取分配给各个变量的参数值:
脚本:
Param(
[Parameter()]$p1 = '',
[Parameter()]$p2 = '',
[Parameter()]$p3 = ''
)
"1st argument: " + $p1
"2nd argument: " + $p2
"3rd argument: " + $p3
调用:
powershell.exe -File .\script.ps1 "foo" "bar"
输出:
1st argument: foo 2nd argument: bar 3rd argument:
如果您希望能够在不显式运行powershell.exe
命令的情况下调用PowerShell脚本,则需要更改注册表中Microsoft.PowerShellScript.1
类型的默认操作。您可能还需要调整系统上的执行策略(Set-ExecutionPolicy RemoteSigned -Force
)。
通常,您仅在非常简单的场景中使用$args
(定义良好的少数参数)。完整的参数定义可以更好地控制参数处理(您可以使参数成为可选或必需的,定义参数类型,定义默认值,进行验证等)。
答案 1 :(得分:0)
我几乎不明白你的问题。这是试图接近你想要的东西..
您尝试通过Windows CMD调用powershell脚本,如下所示:
powershell.exe myscript.ps1 parameter1 parameter2 anotherparameter
以上是如何使用未命名的参数。 您还可以查看命名参数,如下所示:
Powershell.exe myscript.ps1 -param1 "Test" -param2 "Test2" -anotherparameter "Test3"
您可以使用" Set"来自用户的CMD接受输入,如下所示:
set /p id="Enter ID: "
在powershell中,您将使用Read-host,如下所示:
$answer = Read-Host "Please input the answer to this question"
答案 2 :(得分:0)
在脚本的顶部,您声明了要传递的参数,这是我的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