arrays - 为什么调用此函数时 $args 数组为空?

标签 arrays powershell dsc

我发现以下代码的工作方式存在错误,摘自存档 DSC 资源 MSFT_Archive.psm1。

Function Get-CacheEntry
{
    $key = [string]::Join($args).GetHashCode().ToString()
    Trace-Message "Using ($key) to retrieve hash value"
    $path = Join-Path $CacheLocation $key
    if(-not (Test-Path $path))
    {
        Trace-Message "No cache value found"
        return @{}
    }
    else
    {
        $tmp = Import-CliXml $path
        Trace-Message "Cache value found, returning $tmp"
        return $tmp
    }
}

"$key = [string]::Join($args).GetHashCode().ToString()"行做错了,因为 $args 总是作为一个空数组出现。对该方法的典型调用是:
$cacheObj = Get-CacheEntry $Path $Destination

我添加了打印语句,并且 $Path 和 $Destination 有值;它们不是空的或零。因为 $args 数组是空的,所以 $key 的值总是相同的,因此所有的缓存文件都有相同的名称,而不管解压缩的 Zip 存档。不同的输入会导致查询同一个缓存文件,即使没有任何变化,也会导致同一个文件被重复解包。

该方法没有命名参数,因此 $args 应该始终具有未绑定(bind)参数的列表。怎么了?

我在带有 DSC Resource Kit Wave 10 的 Windows Server 2008R2 系统上使用 Powershell 4.0。

更新 : 这个问题存在于 Archive 和 xArchive 资源中。

最佳答案

只有 [string]::Join($args) 的函数如您所见,将产生空结果。如EBGreen说明您需要在方法中至少有 2 个参数(取决于您使用的重载)。作为替代方案,您可以尝试使用 -join运算符。

$key = (-join $args).GetHashCode().ToString()

关于arrays - 为什么调用此函数时 $args 数组为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29758037/

相关文章:

java - 如何通过套接字将 C 字符数组发送到 Java 客户端

powershell - 从没有作业信息的 Powershell 作业返回数据

powershell - 使用所需状态配置与 Azure 规模集进行驱动器映射

powershell - 使用单个 DSC 配置初始化可变数量的磁盘

powershell - 具有大型包的 Set-AzureVMDscExtension 会导致 PowerShell DSC 扩展中的内存使用量极大

JavaScript : can't initialize an object property with an array of function

ruby-on-rails - 如何对具有反向排序方向的 ruby​​ 数组应用二次排序?

c++ - 将可变大小的 double 组转换为 wchar_t

powershell - 主机未知时如何捕获 plink 失败

Azure - 在 Powershell 中断开 VNet 集成