gpt4 book ai didi

powershell - 变量类型与 Powershell 中的预期不符

转载 作者:行者123 更新时间:2023-12-02 14:49:35 24 4
gpt4 key购买 nike

这是一个理解问题。

我使用字符串变量$path构建目录结构。我附加了要创建的目录的名称,这按预期工作。路径完成后,我需要完整的目录作为 System.IO.DirectoryInfo 但以这种方式分配路径 $Path = Get-Item $Path 会产生字符串类型.

$path = "c:\dir1"
If(-Not (Test-Path $path))New-Item -ItemType Directory -Path $path
$path = $path + "\dir2"
If(-Not (Test-Path $path))New-Item -ItemType Directory -Path $path

# Assigned to same variable
$path = Get-Item $path
echo $path.GetType() # = string

# assigned to different variable
$p_a_t_h = Get-Item $path
echo $p_a_t_h.GetType() # = System.IO.DirectoryInfo

# solution but not understood the behavior
[System.IO.DirectoryInfo]$path = Get-Item $path
echo $path.GetType() # = System.IO.DirectoryInfo

我花了几个小时才发现这种行为,但我找不到任何文档来解释为什么会这样 - 也许是因为我不知道要搜索什么。

很明显,要将某些内容附加到变量,变量的类型是相关的,但是 $path = ... 是一个"new"赋值,并且应该具有以下类型赋予的值(value)——至少在我看来。在我到目前为止使用的语言中,变量成为其值的类型,并且不会转换为该变量之前的类型,或者我定义了变量的类型,如果分配了错误的类型,则会收到错误。

我的逻辑错误在哪里?

最佳答案

我认为在代码中的某个地方,您对 [String] 进行了左侧转换(在变量上,而不是值),就像您稍后在示例中使用 所做的那样[System.IO.DirectoryInfo]$path.

发生这种情况的最常见方式:参数。

这是从函数中获取的吗?喜欢:

function Invoke-MyThing {
param([String]$Path)

}
<小时/>

为什么这很重要

当您将类型置于变量上时,分配给该变量的所有值都会接受该强制转换。

[String]$Value = 'Hello'
$Value.GetType()

$Value = 3.141
$Value.GetType()

转换该值仅影响该值:

$V2 = 5
$V2.GetType()

$V2 = [String]9
$V2.GetType()

$V2 = 45
$V2.GetType()

因此,删除之前的变量端强制转换,或者如果它是参数,则只需使用不同的局部变量。

更好的是,如果它是一个参数,您可以将其设置为 [System.IO.DirectoryInfo] 类型。然后它会直接接受该参数,甚至接受一个字符串。您只需稍微修改一下代码即可处理它。

关于powershell - 变量类型与 Powershell 中的预期不符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48117215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com