0

在我的设计中,遇到一个问题,就是:

在数据库中,表格A,我定义了一个变量名“MyParams”,它的值是“1,2,3”,或者“2,3,5”或者“5,6,9”,即变量将根据业务逻辑进行更改。

在powershell中,下面的脚本会处理一些被~分割的文本,它会检查从数据库中的变量“MyParams”中提取的列是否为空,如果有空值的列,它将排除这条记录。

    Get-Content "${myFile}.tmp" | Where-Object { $_.Split("~")[1] -ne "" -and $_.Split("~")[2] -ne "" -and $_.Split("~")[3] -ne ""  }|Out-File $myFile -Encoding ASCII 

这里,$ .Split("~")[1] $ .Split("~")[2] $_.Split("~")[3] 中的数字 (1,2,3) 来自变量 " MyParams”,在数据库中配置。

我的问题是,MyParams 的值经常变化,我怎样才能起源我上面的代码来调整这个?

我想也许我需要使用 foreach-object 内部 Where-object ,正确的?任何人都可以帮助我吗?谢谢。

4

4 回答 4

1

假设$myparams是一个数组,如1,2,3

Get-Content "${myFile}.tmp" | %{$splitted = $_ -split "~"; if(!($myparams | ?{$splitted[$_] -eq ""})){$_} }
于 2012-08-31T16:46:24.827 回答
1

我有同样的问题,发现您需要像这样使用脚本块语法:

Get-Module -ListAvailable | where {($_.Name -notlike "Microsoft*" -and $_.Name -notlike "PS*") -and $_.HelpInfoUri}

这使您可以访问 PowerShell 可用的标准逻辑运算符,而不是仅限于从Where-Object.

请参阅此 TechNet 文章中的示例 7

于 2014-10-22T06:54:17.837 回答
0

好吧,我自己解决了,我使用 -and 组合所有参数并返回布尔值,经过测试,这行得通。下面的代码示例可能不起作用,您需要将其格式化为一行,删除多余的空格。

Get-Content "${sftpFile}.tmp2" | ForEach-Object {
$line = $_.Split("~");
$columnOverseeCount = $columnsOverseeList.Count;
if($columnOverseeCount -eq 0)
{
    if (($line[4] -ne ""))
    {
    [String]::Join("~", $line);
    }
}
else
{
    $columnOverseeFlag = $true;
    foreach($columnOverseeValue  in $columnsOverseeList)
    {
        $columnOverseeFlag = $columnOverseeFlag -and  ($line[$columnOverseeValue] -ne "");
    };
    if(($line[4] -ne "") -and $columnOverseeFlag)
    {
        [String]::Join("~", $line) | Out-File -Append $sftpFile -Encoding ASCII
    }
    else
    {
        [String]::Join("~", $line) | Out-File -Append "${sftpFile}.filterByColumns" -Encoding ASCII
    }
}

}

于 2012-09-04T02:59:05.527 回答
-1

放入$myParams一个变量,然后在其中使用它Where-Object

$myParams = "1,2,3"
$indexes = [int[]] $myParams.Split(',')

Get-Content "${myFile}.tmp" | Where-Object {
  $_.Split("~")[$indexes[0]] -ne "" -and 
  $_.Split("~")[$indexes[1]] -ne "" -and 
  $_.Split("~")[$indexes[2]] -ne ""  } | Out-File $myFile -Encoding ASCII 
于 2012-08-31T17:15:28.407 回答