我有一个脚本:
function comparisonScriptAIX
{
Param(
$sideToCheck
)
#contents of my script
#such as creating files
#performing actions etc...
}
comparisonScriptAIX -sideToCheck
如果我运行它,我会得到一个错误:
comparisonScriptAIX : Missing an argument for parameter 'sideToCheck'. Specify a parameter of type 'System.Object' and try again.
这是有道理的,因为没有向参数提供参数。如果我像这样更改代码:
comparisonScriptAIX -sideToCheck "Blabla"
它会运行。现在,我希望脚本通过任务计划程序运行并传递一个参数,所以我从脚本中删除了“blablabla”。我创建了一个任务,当我不包含“-sideToCheck”时,该任务会正确运行脚本。但是当我包含“-sideToCheck”时,什么也没有发生。
程序/脚本:
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe
添加参数(可选):
-NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File G:\Scripts\check_AIX.ps1 -sideToCheck "CMDB"
现在,我不知道将CMDB的参数传递给 Powershell 脚本的参数的正确语法。另外我不确定 Powershell 中的语法是否正确。
为什么这不起作用,我该如何解决?
编辑 13-12-2022:
根据评论/答案我更新了脚本:
comparisonScriptAIX -sideToCheck $sideToCheck
我还添加了以下行以使用脚本中已有的日志:
"$(Get-Date -Format "yyyy-MM-dd HH:mm:ss") : $($sideToCheck)" | Out-File -encoding ascii $errorLog -append
当我在 Powershell 中运行此脚本时(因此还没有任务),日志中的结果如下:
2022-12-13 10:52:24 :
当我从任务计划程序运行它时,它看起来是一样的:
2022-12-13 10:55:00 :
所以数据(在我的例子中“CMDB”还没有传递给脚本)。我希望在日志中看到以下内容:
2022-12-13 11:03:00 : CMDB
脚本运行,但尚未传递值。
编辑 2 还尝试过:
Param(
[Parameter()]
[string]$sideToCheck
)
你在你调用的脚本中的函数中有这个,它定义了函数,它做了什么,以及你定义的在调用时使用的任何参数。
在定义函数的同一个脚本中,您还使用命名参数调用函数,但在该调用中省略了要传递给函数的变量。
当脚本执行并调用函数时,它不会传递您设置参数变量的值。因此,在脚本中调用时,它在函数执行时丢失的错误。
改变这个
成为这个
要解决
param()
在脚本顶部定义的问题,因为您将其传递给脚本以在PowerShell -File
调用脚本时对其进行设置。然后它将重用它的值传递给脚本中的函数调用,从而为您提供预期的输出。完整的脚本应该是这样的。
逻辑屏幕截图分解
通过以下语法使用 PowerShell.exe 执行它:
配套资源
职能
将参数传递给 PowerShell 脚本
我认为你正在寻找的是一种叫做 a 的东西
switch
。您需要将参数更改为如下所示:
这是你如何称呼它:
以下是检查方法:
更多信息:如果您使用的是 powershell 核心,您可以
switch
像对待boolean
. 这也有效:这是文档的链接:
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_functions_advanced_parameters?view=powershell-7.3