我在本地(非远程)计算机上使用Invoke-Command
来运行包含函数的脚本块。在" root"中定义的一些变量该函数中提供了scriptblock,有些要求我将它们作为Global:
范围。
所以在准代码中,这失败了:
{
function test() {
if (test-path $filepath.trim('t')) {
$taskFolder.gettasks(1) |out-file '$env:temp\tasks.txt'
}
}
$filepath = '$env:temp\test.txt'
$TaskService = new-object -ComObject('Schedule.Service')
$TaskService.connect()
$TaskFolder = $TaskService.GetFolder('\')
test
}
使用"您无法在空值表达式上调用方法。" (即$filepath -eq $null
)。
然而,这有效:
{
function test() {
if (test-path $Global:filepath.trim('t')) {
$taskFolder.gettasks(1) |out-file '$env:temp\tasks.txt'
}
}
$Global:filepath = '$env:temp\test.txt'
$TaskService = new-object -ComObject('Schedule.Service')
$TaskService.connect()
$TaskFolder = $TaskService.GetFolder('\')
test
}
尽管$TaskFolder
不是全球性的。
我似乎无法在这里使用简短的代码来复制问题,但 ONLY 全局确定几个变量的影响会产生重大影响。
当我尝试使用Script:
范围的变量并且失败时,我最初注意到了这个问题。我以为这是因为这是一个脚本块,而不是一个真正的脚本。更改为Global:
已解决问题,然后我注意到了无范围的$taskfolder
变量。
我不是在询问计划任务!我只是将它包含在示例中,因为这是在没有分配全局范围的情况下工作正常的变量。
显然,我不了解范围界定,调用或计划服务。
有人可以启发我吗?