PowerShell脚本块范围很奇怪

时间:2017-12-07 21:15:28

标签: powershell scope

我在本地(非远程)计算机上使用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变量。

我不是在询问计划任务!我只是将它包含在示例中,因为这是在没有分配全局范围的情况下工作正常的变量。

显然,我不了解范围界定,调用或计划服务。

有人可以启发我吗?

0 个答案:

没有答案
相关问题