这是我要实现的准系统代码。

$destinationDir = "subdir1"

#creating tab
$newTab = $psise.PowerShellTabs.Add()
Do
   {sleep -m 100}
While (!$newTab.CanInvoke)


#running required script in tab
$newTab.Invoke({ cd $destinationDir})

由于$ destinationDir是在父选项卡中初始化的,因此其范围仅限于此,并且在子选项卡中出现以下错误
cd : Cannot process argument because the value of argument "path" is null. Change the value of argument "path" to a non-null value.

如何克服此问题并使用子选项卡中的值?

最佳答案

简短的回答:不能。 PowerShell ISE中的每个选项卡都使用新的运行空间创建。没有提供用于将变量注入(inject)此运行空间的方法。

长答案:总有解决方法。这是两个。

1.使用invoke脚本块将变量传输到新的运行空间:

$destinationDir = "subdir1"
#creating tab
$newTab = $psise.PowerShellTabs.Add()
Do
   {sleep -m 100}
While (!$newTab.CanInvoke)

$scriptblock = "`$destinationDir = `"$($destinationDir)`"
cd `$destinationDir"

#running required script in tab
$newTab.Invoke($scriptblock)

2.使用环境变量:
$env:destinationDir = "subdir1"

#creating tab
$newTab = $psise.PowerShellTabs.Add()
Do
   {sleep -m 100}
While (!$newTab.CanInvoke)

#running required script in tab
$newTab.Invoke({ cd $env:destinationDir})

07-28 06:46