gpt4 book ai didi

powershell - 如何安全读取 PowerShell .PSD1 文件

转载 作者:行者123 更新时间:2023-12-03 12:29:55 24 4
gpt4 key购买 nike

PowerShell 模块 list 文件格式 (.psd1) 本质上是一个带有特定键的 Hashtable 文字。这是 PowerShell 脚本的配置文件的理想选择。我最终想要做的是读取一个 .psd1 文件,其中包含一组特定于脚本的键。

例如(MyScriptConfig.psd1):

@{
FTPHost = "ftp.blah.com"
FTPUserName = "blah"
FTPPassword = "blah"
}

我没有理由不能对这些信息使用 XML、INI、JSON 或其他任何东西,但我宁愿它使用与 PowerShell 的模块 list 相同的基本数据格式。

显然,最简单的方法是阅读文本并将其传递给 Invoke-Expression。这将返回一个哈希表,但随后它会调用文件中的任何内容,这容易出错并且可能不安全。

我想我想起了一个使用 PowerShell cmdlet 的“安全”子集读取这些数据的 cmdlet,但我在想 ConvertFrom-StringDataDATA部分,这两个部分都不允许我读取包含 Hashtable 文字的任意文件。

PowerShell 中是否有内置的东西可以让我这样做?如果没有内置任何东西,那么我可能会走 JSON 或 Key=Value 的路线 ConvertFrom-StringData .

最佳答案

Powershell 版本 5 添加了 Cmdlet Import-PowershellDataFile用于安全解析 PSD1 文件。

在版本 5 之前,至少有三种解决方案:

  • Cmdlet Import-LocalizedData .虽然用于处理语言文件,但它会读取任何 PSD1 格式的文件。
    # Create a test PSD1 file
    @'
    @{
    a1 = 'a1'
    a2 = 2
    a3 = @{
    b1 = 'b1'
    }
    }
    '@ | Set-Content -Path .path\example.psd1

    # Read the file
    Import-LocalizedData -BaseDirectory .\path -FileName example.psd1 -BindingVariable Data

    # Use the data
    $Data.a1
    $Data.a3.b1
  • 也可以使用 Data Section 处理在线数据。 (在线排序失败了目的)。
    # Safely parse data
    $Data2 = DATA {
    @{
    a1 = 'a1'
    a2 = 2
    a3 = @{
    b1 = 'b1'
    }
    }
    }

    # Use the data
    $Data2.a1
    $Data2.a3.b1
  • 第三个是PowerShell DSC parameter transformation attribute mentioned by @Jakub Berezanski .
  • 关于powershell - 如何安全读取 PowerShell .PSD1 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25408815/

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