函数之间的数据更改

时间:2017-07-05 20:51:56

标签: powershell powershell-v5.0

在查看我能找到的内容之后,我所看到的一些罪魁祸首就是将回归展开为一个简单的字符串,或其他数据在管道中。

我的问题是cmdlet是针对第一个函数中的数据运行的,当它到达第二个函数时不对数据起作用。

function Get-FileInput() {
    $fileData = Import-Csv $filePath -Delimiter "`t"
    if ($fileData | Get-Member | Where-Object {$_.name -eq "DistinguishedName" -or $_.name -eq "dn" -or $_.name -eq "name"})
    {
        Write-Host -ForegroundColor Green "Confirmed.
        Processing"$fileData.Count"objects."
        $invalidFilePath = $false
        $fileData
        }
    $data = Get-FileInput
    Write-Host $data
}

$data = Get-FileInput
Set-MultipleComputersEnabledStatus -data $data

到目前为止,一切正常。在它传递到第二个函数之前,它可以与Format-Table和Get-Member一起使用,一切看起来都很好。但是,在Set-MultipleComputersEnabledStatus中,我无法对我在Get-FileInput中完成的$ data对象执行完全相同的检查

正在寻找一个名为" DistinguishedName"它在第一个函数中找到,但在到达第二个函数时不会在数据中识别。

if ($filterType -eq "DistinguishedName" -and $data | Get-Member | Where-Object {$_.Name -eq 'DistinguishedName'})
{
    Write-Host -ForegroundColor Green "Valid filters. Processing list."
}

我认为这意味着在作为参数传递给第二个函数后,PowerShell以某种方式为我更改了数据,但是我找不到任何记录它做了什么,或者如何防止它/解决的问题它

1 个答案:

答案 0 :(得分:1)

您需要在嵌入式命令部分周围使用括号,以便先执行它,然后才能评估结果:

if ($filterType -eq "DistinguishedName" -and ($data | Get-Member | Where-Object {$_.Name -eq 'DistinguishedName'})) { }