我需要通過從CSV文件導入所需的值來將參數傳遞到管道輸入的腳本。原始腳本具有超過15個要傳遞的參數,輸入值存儲在CSV文件中。我發佈了一個簡單的例子來表達這個問題。來自管道的開關參數的值
下面是CSV文件(Input.csv
)
ResourceGroupName,SetThrottling
TestRG1,1
TestRG2,0
TestRG3,1
TestRG4,0
TestRG5,0
腳本文件的內容 - Switch-FromPipelineTest.ps1
[CmdletBinding()]
Param(
[Parameter(Mandatory=$True, ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)]
[String]$ResourceGroupName,
[Parameter(ValueFromPipeline=$True, ValueFromPipelineByPropertyName=$True)]
[Switch]$SetThrottling
)
Begin {}
Process {
Function TestingValues {
Param(
$ResourceGroupName,
$SetThrottling
)
Write-Host "$ResourceGroupName is set to $SetThrottling"
}
TestingValues -ResourceGroupName $ResourceGroupName -SetThrottling $SetThrottling
}
End {}
如果我運行命令Import-Csv .\Input.csv | .\Switch-FromPipelineTest.ps1
它給出了一個錯誤,如下所示:
C:\Scripts\Switch-FromPipelineTest.ps1 : Cannot process argument
transformation on parameter 'SetThrottling'. Cannot convert value
"System.String" to type "System.Management.Automation.SwitchParameter".
Boolean parameters accept only Boolean values and numbers, such as
$True, $False, 1 or 0.
At line:1 char:26
+ Import-Csv .\Input.csv | .\Switch-FromPipelineTest.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (@{ResourceGroup...etThrottling=1}:PSObject) [Swith-FromPipelineTest.ps1], ParameterBindingArgumentTransformationException
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,Switch-FromPipelineTest.ps1
爲了使這項工作,我有以下命令來運行:
Import-Csv -Path .\Input.csv -Verbose |
Select-Object -Property ResourceGroupName,@{n='SetThrottling';e={[bool][int]$_.SetThrottling}} |
.\Switch-FromPipelineTest.ps1
有沒有我們可以省略通過第二個命令使用自定義屬性表達式進行類型轉換的方法嗎?和原文一樣,我有幾個[switch]
參數,我需要爲每個[switch]
參數做同樣的事情。
'[轉] [BOOL] [INT] $ SetThrottling' – PetSerAl
@PetSerAl是對的。問題是'Import-CSV'正在創建所有值字符串。你只需要修復劇組。 – Matt
你的意思是,這需要在Param()塊中完成嗎? – SavindraSingh