如何将SwitchParameter传递给Powershell中的函数?

如何将SwitchParameter传递给Powershell中的函数?,powershell,Powershell,如何将SwitchParameter传递给函数 function schtsk( $triggers ) { $trigger = New-ScheduledTaskTrigger $triggers } schtsk -AtStartup 编辑:更简单的问题 $trigger "-AtStartup" $trigger = New-ScheduledTaskTrigger $trigger 错误:无法转换值 “System.String”输入“System.Management.Auto

如何将SwitchParameter传递给函数

function schtsk( $triggers ) {
 $trigger = New-ScheduledTaskTrigger $triggers
}
schtsk -AtStartup
编辑:更简单的问题

$trigger "-AtStartup"
$trigger = New-ScheduledTaskTrigger $trigger
错误:无法转换值
“System.String”输入“System.Management.Automation.SwitchParameter”

您要做的是在非参数化函数中定义一个变量。在PowerShell帮助文件中定义函数中的所有可能性

开关参数

开关是不需要值的参数。相反,你 键入函数名,后跟开关参数的名称

要定义开关参数,请在 参数名称,如下例所示:

另请参见:了解更多功能和功能

根据您下面的“困惑”评论进行更新

像这样的东西只是一个例子。无论调用什么函数,都必须使用参数块来使用开关。这个函数可以很容易地被调用

function MyNewFangledSwitchTag {
  param ([switch]$on)
  if ($on) { "Switch on" }
  else { "Switch off" }
}
。。。这将是同样的事情,用同样的方式

MyNewFangledSwitchTag  -on
然而,永远不要使用这些东西。始终使用专有动词-名词命名约定

只需将函数重构为与示例相同,名称无关紧要,只需使用前面提到的适当约定即可

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
开关参数与状态有关。这是文档告诉您的。您不能在其上分配/使用任何其他内容,因为这不是其目的。 如果使用了开关,则运行代码块;如果没有,则不执行任何操作,或运行其他代码块

这与在测试代码或任何内置cmdlet可用的任何其他开关时使用-WhatIf开关相同。要查看cmdlet在封面下的功能以及参数的实现、使用等,请尝试以下操作

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     :

我已经看到了这个令人困惑的例子。我只想在新的ScheduledTaskTrigger后面放一些文字-AtStartup不是布尔型的,if/else语句有什么用途?该函数应该被称为Switch Item,还是仅仅是名称的占位符?如果这是名称,那么如果要传递参数的多个函数都被称为Switch Item,您将如何调用它们?我在Powershell中有一个简短的项目,我可能再也不会使用它了,我希望有人能翻译我上面的例子,可能会澄清我90%的问题。困惑?你有什么困惑吗。只有一种方法可以进行切换,即在文档中进行切换。你可以随意调用函数,困惑吗?你有什么困惑吗?只有一种方法可以进行参数切换,这是有文档记录的。在ISE中的内置代码段中有这样的例子[use crtl+j]可以在VSCode use[crtl+alt+j]中看到它们。不要将开关语句代码与参数开关设置混淆。你混乱的陈述会让我相信你没有阅读我链接到的样本之外的文档。使用开关(on/yes/true)或不使用开关(off/no/false)。
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     :