首页 > 解决方案 > 在 PowerShell 中更改函数内变量的声明数据类型

问题描述

我有一个 PowerShell 脚本,我想在开始时声明一个变量数据类型,并且有一个函数可以在某些条件下更改此数据类型。如果这是在函数之外完成的,我可以使它工作,但我无法更改函数内部的数据类型,即使我使用范围修饰符。

如果我把它放在脚本 foobar 中:

[string]$foo = "123"
[int]$foo = $foo
$foo.GetType()

并执行脚本:

PS C:\> .\foobar.ps1

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Int32                                    System.ValueType

但如果我把这个:

[string]$foo = "123"
Function bar {
    [int]$script:foo = $foo
    $foo.GetType()
}
bar

我执行:

PS C:\> .\bar.ps1

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     String                                   System.Object

这里需要注意的是,第二种情况仅在您从脚本执行代码时才会发生。直接从终端执行时结果会有所不同。我希望数据类型在两种情况下都更改为整数。有任何想法吗?

标签: powershell

解决方案


传入参考变量,如下所示

[string]$foo = "123"

Function bar([ref]$foo) {
[int]($foo)  ='123'
    
 ##  Get-Variable -Name foo -Scope global | select fullname
$foo.GetType()
 }

推荐阅读