![](/img/trans.png)
[英]Powershell - How to use import-csv for SwitchParameter
[英]How do I pass a SwitchParameter to a function in Powershell?
如何將 SwitchParameter 傳遞給 function?
function schtsk( $triggers ) {
$trigger = New-ScheduledTaskTrigger $triggers
}
schtsk -AtStartup
編輯:更簡單的問題,
$trigger "-AtStartup"
$trigger = New-ScheduledTaskTrigger $trigger
錯誤:無法將值“System.String”轉換為類型“System.Management.Automation.SwitchParameter”
您正在做的是在非參數化 function 中定義一個變量。 在 function 中定義所有可能性在 PowerShell 幫助文件中。
開關參數
開關是不需要值的參數。 相反,您鍵入 function 名稱,后跟開關參數的名稱。
要定義開關參數,請在參數名稱前指定類型 [switch],如下例所示:
function Switch-Item {
param ([switch]$on)
if ($on) { "Switch on" }
else { "Switch off" }
}
另請參閱: 關於高級功能了解更多 function 功能和關於高級功能參數。
根據您下面的“困惑”評論進行更新
像這樣的東西只是一個例子。 不管你叫你的function,你必須使用參數塊才能使用開關。 這個 function 可以很容易地被稱為......
function MyNewFangledSwitchTag {
param ([switch]$on)
if ($on) { "Switch on" }
else { "Switch off" }
}
......這將是同樣的事情,並使用相同的方式......
MyNewFangledSwitchTag -on
然而,永遠不要使用這樣的東西。 始終使用正確的動詞-名詞命名約定。
只需將您的 function 重構為與示例相同,名稱無關緊要,除了使用提到的正確約定。
function New-MySchtsk
{
Param
(
[switch]$AtStartUp
)
if ($AtStartUp)
{
'AtStartup switch used'
# Put the rest of your code actions here
# $trigger = New-ScheduledTaskTrigger $triggers
}
else
{
'AtStartup switch was not used'
# Put the rest of your code actions here
}
}
New-MySchtsk -AtStartUp
一個開關參數大約是一個state。 這是文檔告訴你的。 您不能在其上分配/使用其他任何東西,因為這不是它的目的。 如果使用了開關,則運行代碼塊,如果沒有,則不執行任何操作,或運行其他代碼塊。
這與在測試代碼或任何其他可用於任何內置 cmdlet 的開關時使用 -WhatIf 開關相同。 您可以在 Microsoft PowerShell github 上查看 Powershell 源代碼,以了解 cmdlet 在幕后的作用以及如何實現、使用參數等。
您可以使用-switch:$bool來實現這一點,如此處所建議的,但除了 static $True 和 $False 之外,您還可以使用自己的變量。 結果是您只需定義一次 cmdlet/代碼。
我將它與 Format-Table 一起使用,僅在循環中第一次顯示表頭,該循環應在每個訂單后顯示訂單行。
$intIndex = 0;
$arrayOrders | ForEach-Object -Process `
{
# Only show table headers first time
If($intIndex++ -eq 0) {
$boolHideTableHeaders = $False }
Else {
$boolHideTableHeaders = $True }
# Show current order
$_ | Format-Table -HideTableHeaders:$boolHideTableHeaders `
@{ Name = "No."; Expression = { $_.orderNumber } },
@{ Name = "Date"; Expression = { $_.date } },
@{ Name = "Net amount"; Expression = { '{0, 10:N2}' -f $_.netAmount } }
# Show order lines after each order
Write-Line "Order lines..."
}
嘗試這個
PS> $taskTrigger = Invoke-Expression "New-ScheduledTaskTrigger $ScheduleArgs"
PS> $taskTrigger
Enabled : True
EndBoundary :
ExecutionTimeLimit :
Id :
Repetition :
StartBoundary : 2021-01-07T05:00:00Z
DaysInterval : 1
RandomDelay :
PSComputerName :
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.