我有一个脚本:
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
)