Powershell强类型环境变量

Powershell强类型环境变量,powershell,strong-typing,Powershell,Strong Typing,我想设置一个强类型环境变量,当我使用$env时,它似乎“丢失”了它的类型: 在原始功能中,它可以正常工作: function Create-ThisCrap(){ [Microsoft.ApplicationInsights.TelemetryClient] $mytest = New-Object -TypeName Microsoft.ApplicationInsights.TelemetryClient $mytest.InstrumentationKey = "213-123" $

我想设置一个强类型环境变量,当我使用$env时,它似乎“丢失”了它的类型:

在原始功能中,它可以正常工作:


function Create-ThisCrap(){

[Microsoft.ApplicationInsights.TelemetryClient] $mytest = New-Object -TypeName  Microsoft.ApplicationInsights.TelemetryClient
$mytest.InstrumentationKey = "213-123"
$mytest.TrackTrace("something")

}

但这已经不是:


function Create-ThisCrap(){

[Microsoft.ApplicationInsights.TelemetryClient] $env:mytest = New-Object -TypeName  Microsoft.ApplicationInsights.TelemetryClient
$env:mytest.InstrumentationKey = "213-123"
$env:mytest.TrackTrace("something")

}

有错误:

  • 在此对象上找不到属性“InstrumentationKey”

  • 方法调用失败,因为[System.String]不包含名为“TrackTrace”的方法

我试过作弊:


function Create-ThisCrap(){

[Microsoft.ApplicationInsights.TelemetryClient] $mytest = New-Object -TypeName  Microsoft.ApplicationInsights.TelemetryClient
$mytest.InstrumentationKey = "213-123"
$mytest.TrackTrace("something")


return $mytest
}



function FROMAnotherScript(){

[Microsoft.ApplicationInsights.TelemetryClient] $env:HopeItWorks = Create-ThisCrap
$env:HopeItWorks.TrackTrace('whatever')

}

但它也产生了同样的效果



我大致了解Powershell传递类时的问题(显然还不够),但我认为只要它在一个函数中,它就应该工作,$env问题困扰着我。

环境变量只能是字符串。如果需要存储多个值,可以使用多个环境变量,但数据类型始终为字符串。环境变量可以追溯到MS-DOS,这意味着它们可以追溯到20世纪80年代,用于批处理文件和DOS命令。它们是非常古老的遗留组件

此外,通过
$env:
命名空间设置环境变量不会为其他进程永久设置环境变量。您可以通过调用
[System.Environment]::SetEnvironmentVariable()
来实现这一点,但即使如此,设置环境变量也只能为设置值后创建的进程设置值。它不会刷新已经运行的其他线程


不能将对象从一个进程完全传递到另一个进程。您需要以某种方式序列化它,然后在另一端反序列化它。通常,这是通过将设置存储在数据文件、数据库或注册表中来实现的。您可以尝试导出Clixml和导入Clixml,它们为PowerShell提供了基本的数据类型感知对象序列化,但我无法确定您要做什么。

环境变量只能是字符串。如果需要存储多个值,可以使用多个环境变量,但数据类型始终为字符串。环境变量可以追溯到MS-DOS,这意味着它们可以追溯到20世纪80年代,用于批处理文件和DOS命令。它们是非常古老的遗留组件

此外,通过
$env:
命名空间设置环境变量不会为其他进程永久设置环境变量。您可以通过调用
[System.Environment]::SetEnvironmentVariable()
来实现这一点,但即使如此,设置环境变量也只能为设置值后创建的进程设置值。它不会刷新已经运行的其他线程


不能将对象从一个进程完全传递到另一个进程。您需要以某种方式序列化它,然后在另一端反序列化它。通常,这是通过将设置存储在数据文件、数据库或注册表中来实现的。您可以尝试
导出Clixml
导入Clixml
,它们为PowerShell提供了基本的数据类型感知对象序列化,但我真的不知道您想做什么。

我怀疑我误解了您。。。但是环境变量是严格意义上的字符串。您不能对这样的文件强制任何类型,因为它存储为简单的字符集合。我怀疑我误解了您。。。但是环境变量是严格意义上的字符串。您不能对这样的类型强制任何类型,因为它存储为简单的字符集合。