3

すべての PowerShell プラットフォームで実行されるコードを記述したいと考えています。\次のコードは、Windows では/パス区切り記号を使用し、Linux ではパス区切り記号を使用して出力を生成します。

Get-ChildItem -File -Recurse | ForEach-Object { $_.FullName }

objディレクトリの下にあるファイルを除外したい。ディレクトリの数と深さobjは不明です。これを行う 1 つの方法は、次のようなものを使用してそれらを除外することです。ただし、Linux ではパス セパレータが異なるため、これは機能しません。

Get-ChildItem -File -Recurse | 
    Where-Object { -not ($_.FullName -like '*\obj\*' |
    ForEach-Object { $_.FullName }

正規表現パターンを使用するとうまくいくように見えますが、これを行うためのより明確な方法があるかどうか知りたいです。これは厄介だと思います。それだけでなく、この\\文字は Linux ファイル名の一部として有効であり、このコードに脆弱性が存在する可能性があります。

Get-ChildItem -Recurse |
    Where-Object { -not ( $_.FullName -like "*[/\]obj[/\]*") } |
    ForEach-Object { $_.FullName }
4

2 に答える 2

0

少なくともPowerShell v6.0.0-beta.2$PSVersionTable には、追加のプロパティ GitCommitId、OS、および Platform があり、Mikhails の回答のようにバージョンが 1 つしかないにもかかわらず、コードで区別するために使用できます。

$PSVersionTable                                                                                                                  

Name                           Value                                                                                               
----                           -----                                                                                               
PSVersion                      6.0.0-beta                                                                                          
PSEdition                      Core                                                                                                
BuildVersion                   3.0.0.0                                                                                             
CLRVersion                                                                                                                         
GitCommitId                    v6.0.0-beta.2                                                                                       
OS                             Linux 4.4.0-78-generic #99-Ubuntu SMP Thu Apr 27 15:29:09 UTC 2017                                  
Platform                       Unix                                                                                                
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}                                                                             
PSRemotingProtocolVersion      2.3                                                                                                 
SerializationVersion           1.1.0.1                                                                                             
WSManStackVersion              3.0  
于 2017-06-15T17:30:30.487 に答える