如何将SwitchParameter传递给Powershell中的函数?
如何将SwitchParameter传递给函数如何将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
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 :