![](/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.