如何在另一个会话中使用变量(Powershell ISE选项卡)?

时间:2015-03-16 15:04:25

标签: powershell scope command-prompt powershell-ise

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

$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.

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

1 个答案:

答案 0 :(得分:2)

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

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

<强> 1。使用invoke script-block将变量传输到新的运行空间:

$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})