簡體   English   中英

使用來自其他PowerShell腳本的參數調用PowerShell腳本

[英]Call PowerShell script with arguments from another powershell script

如何調用PowerShell腳本從PowerShell腳本中獲取命名參數?

foo.ps1:

param(
[Parameter(Mandatory=$true)][String]$a='',
[Parameter(Mandatory=$true)][ValidateSet(0,1)][int]$b, 
[Parameter(Mandatory=$false)][String]$c=''
)
#stuff done with params here

bar.ps1

#some processing
$ScriptPath = Split-Path $MyInvocation.InvocationName
$args = "-a 'arg1' -b 2"
$cmd = "$ScriptPath\foo.ps1"

Invoke-Expression $cmd $args

錯誤:

Invoke-Expression : A positional parameter cannot be found that accepts 
argument '-a MSFT_VirtualDisk (ObjectId = 
"{1}\\YELLOWSERVER8\root/Microsoft/Windo...).FriendlyName -b 2'

這是我最近的嘗試 - 我嘗試過googling的多種方法似乎沒有用。

如果我從shell終端運行foo.ps1為./foo.ps1 -a 'arg1' -b 2它按預期工作。

在發布問題之后,我偶然發現了答案。 為了完整性,這里是:

bar.ps1:

#some processing
$ScriptPath = Split-Path $MyInvocation.InvocationName
$args = @()
$args += ("-a", "arg1")
$args += ("-b", 2)
$cmd = "$ScriptPath\foo.ps1"

Invoke-Expression "$cmd $args"

這可能有助於未來的讀者:

foo.ps1:

param ($Arg1, $Arg2)

確保在任何可執行代碼之前將“param”代碼放在頂部。

bar.ps1:

& "path to foo\foo.ps1" -Arg1 "ValueA" -Arg2 "ValueB"

而已 !

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM