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 inner Where-object を使用する必要があると思いますが、正しいですか? 誰でも私を助けることができますか?どうも。

4

4 に答える 4

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 に答える
1

$myparams次のような配列であると仮定し1,2,3ます。

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

-and を使用してすべての引数を結合し、bool 値を返し、テストしましたが、これは機能しました。以下のコード サンプルは機能しない可能性があります。1 行でフォーマットし、余分なスペースを削除する必要があります。

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 に答える