Powershell 函数之间的数据更改

Powershell 函数之间的数据更改,powershell,powershell-5.0,Powershell,Powershell 5.0,在查看了我能找到的内容之后,我所看到的几个罪魁祸首可能是返回被展开为一个简单字符串,或者管道中存在其他数据 我的问题是cmdlet针对第一个函数中的数据运行,但在数据到达第二个函数时,它不会对数据起作用 function Get-FileInput() { $fileData = Import-Csv $filePath -Delimiter "`t" if ($fileData | Get-Member | Where-Object {$_.name -eq "Distingu

在查看了我能找到的内容之后,我所看到的几个罪魁祸首可能是返回被展开为一个简单字符串,或者管道中存在其他数据

我的问题是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
if ($filterType -eq "DistinguishedName" -and $data | Get-Member | Where-Object {$_.Name -eq 'DistinguishedName'})
{
    Write-Host -ForegroundColor Green "Valid filters. Processing list."
}
到目前为止,一切正常。在它被传递到第二个函数之前,它可以与Format Table和Get Member一起使用,并且一切看起来都很好。但是,在Set multiplecomputersnabledstatus中,我无法对$data对象执行与在Get FileInput中执行的完全相同的检查

它正在寻找一个名为“DifferentizedName”的属性,它在第一个函数中找到该属性,但在到达第二个函数时无法在数据中识别该属性

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

我假设这意味着在作为第二个函数的参数传入后,PowerShell以某种方式为我更改了数据,但我找不到任何记录它所做操作的文档,或者如何防止它/解决它。

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

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

如果($filterType-eq“differentiedname”-和($data | Get Member | Where Object{$\ uu.Name-eq'differentiedname'})){}就可以了。在我读到的有关PowerShell字符串化函数返回的内容中,我被搞得一团糟,完全忽略了括号。。。谢谢你的提示